AWSサーバレスアーキテクチャーNo6:Lambda + API Gateway + Translate
AWSのホームページの初心者ハンズオンにある「サーバーレスアーキテクチャで翻訳 Web API を構築する 」の内容を自分のAWSアカウントでやってみました。
前回投稿の DynamoDB を実装した続きで、6パート目です。
Web API が呼ばれたときに、その履歴情報をテーブルで保持するように修正します。
下のざっくり基本構成イメージ通りの最終形にします!!

今回の修正内容は、4パート目で実装した、Lambda + API Gateway (日本語を英語に翻訳するAPI 構成)に、5パート目でセットアップしたDynamoDBへの翻訳履歴情報の保存機能を組み込みます。
Lambda 関数を修正
Python SDK のドキュメントを⾒ながら、DynamoDBに保存するように Lambda 関数を修正していきます。
AWS SDK for Python (Boto3) の API リファレンス にアクセスします。
4パート目で作ったLambdaの「translate-function」を修正して、「Save」します。

import json
import boto3
import datetime
translate = boto3.client(service_name='translate')
dynamodb_translate_history_tbl = boto3.resource('dynamodb').Table('translate-history')
def lambda_handler(event, context):
input_text = event['queryStringParameters']['input_text']
try:
response = translate.translate_text(
Text=input_text,
SourceLanguageCode="ja",
TargetLanguageCode="en"
)
except Exception as e:
logging.error(e.response['Error']['Message'])
raise Exception("[ErrorMessage]: " + str(e))
output_text = response.get('TranslatedText')
try:
dynamodb_translate_history_tbl.put_item(
Item = {
"timestamp": datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
"input_text": input_text,
"output_text": output_text
}
)
except Exception as e:
logging.error(e.response['Error']['Message'])
raise Exception("[ErrorMessage]: " + str(e))
return {
'statusCode': 200,
'body': json.dumps({
'output_text': output_text
}),
'isBase64Encoded': False,
'headers': {}
}
IAMロール設定を修正

「 AmazonDynamoDBFullAccess」がアタッチされた

「AmazonDynamoDBFullAccess」 を付加した結果が展開されている


テスト結果が分かりやすいように、「こんにちは」を「こんばんは」に変更

コードを「Deploy」

テストを実行
「テスト」をクリックして実行。▶ 詳細 を展開。

「good evening」が返されている

API Gateway からのアクセスも確認する
今回は、 Lambda + API Gateway (日本語を英語に翻訳するAPI 構成)に、 翻訳履歴情報をテーブルに保持するように修正しました。
こちらで、 「サーバーレスアーキテクチャで翻訳 Web API を構築する 」 完了です!!