概要
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周りの基礎知識不足だったので、キャッチアップ続けていきます。。