search
LoginSignup
0
Help us understand the problem. What are the problem?

posted at

Serverless アーキテクチャでWeb API を構築するハンズオンをRubyで実装してみた

概要

AWSが提供している、翻訳Web APIのハンズオンをRubyに変えて作ってみました。
※ハンズオン内ではpythonを利用されています。

前置き

ほとんどハンズオンの流れと同じため、AWS周りの流れは省略しています。

1. Lambda 単体で使ってみる

LambdaからTranslateを呼び出して「おはよう」を「Good morning」へ変換しました。
Module: Aws::Translate

require 'json'
require 'aws-sdk'

def lambda_handler(event:, context:)
   
   translate = Aws::Translate::Client.new(region: 'ap-northeast-1')
   
   input_text = "おはよう"
   
   response = translate.translate_text({
       text: input_text,
       source_language_code: 'ja',
       target_language_code: 'en'
   })
   
   output_text = response.translated_text
   
   { statusCode: 200, body: JSON.generate(output_text) }
end

2. API Gateway と Lambda を組み合わせる

input_textに受け取るように変更しました。

require 'json'
require 'aws-sdk'

def lambda_handler(event:, context:)
   
    translate = Aws::Translate::Client.new(region: 'us-east-1')
    
    input_text = event['queryStringParameters']['input_text']
    
    response = translate.translate_text({
        text: input_text,
        source_language_code: 'ja',
        target_language_code: 'en'
    })
    
    output_text = response.translated_text
    
    { statusCode: 200,
      body: JSON.generate(output_text), 
      isBase64Encoded:  false,
      headers: {} 
    }
end

3. API Gateway と Lambda と DynamoDB を組み合わせる

※あらかじめDynamoDB上でテーブル作成しています。

翻訳元,翻訳結果,実行日時をDB内に保存しました。
Module: Aws::DynamoDB

require 'json'
require 'aws-sdk'

def lambda_handler(event:, context:)
    
    # SDK
    translate = Aws::Translate::Client.new(region: 'ap-northeast-1')
    dynamodb = Aws::DynamoDB::Client.new(region: 'ap-northeast-1')
    
    # translate
    input_text = event['queryStringParameters']['input_text']
    
    response = translate.translate_text({
        text: input_text,
        source_language_code: 'ja',
        target_language_code: 'en'
    })
    
    output_text = response.translated_text
    
    # db
    dynamodb.put_item({
        item: {
            "time_stamp": Time.now.strftime("%Y%m%d%H%M%S"),
            "input_text": input_text,
            "output_text": output_text,
        },
        table_name: 't_translate_log',
    })
    

    { statusCode: 200,
      body: JSON.generate(output_text), 
      isBase64Encoded:  false,
      headers: {} 
    }
end

終わりに

AWSの実務経験がなく、もくもく会の一環として取り組みましたが、実際にやりながらだと理解が進みますね。
実行エラーになる要因が、ロール設定やリージョンを間違っていたなどAWS周りの基礎知識不足だったので、キャッチアップ続けていきます。。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?