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 リファレンス にアクセスします。
リファレンスを開いたら、
DynamoDBのテーブルの扱い方を見る。
パラメータの指定例を参照して実装方法を確認します。
put_itemメソッドを使うので、情報を探します。
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ロール設定を修正
「設定」タブから、ロール名のリンクを
クリックして、
IAMダッシュボードに移動
「 AmazonDynamoDBFullAccess」を選択し、
「ポリシーのアタッチ」をクリック
「 AmazonDynamoDBFullAccess」がアタッチされた
「AmazonDynamoDBFullAccess」 を付加した結果が展開されている
テスト結果が分かりやすいように、「こんにちは」を「こんばんは」に変更
コードを「Deploy」
テストを実行
「テスト」をクリックして実行。▶ 詳細 を展開。
「good evening」が返されている
DynamoDB の translate-history テーブルにもitem追加されている。
API Gateway からのアクセスも確認する
「translate-api」をクリック
「ステージ」→「GET」
をクリック
「URLの呼び出し」
リンクをクリック
クエリパラメータを指定していないので、エラーになるが、input_text を追加すると・・・
翻訳成功!!
DynamoDBにも
ちゃんと追加されている!!
今回は、 Lambda + API Gateway (日本語を英語に翻訳するAPI 構成)に、 翻訳履歴情報をテーブルに保持するように修正しました。
こちらで、 「サーバーレスアーキテクチャで翻訳 Web API を構築する 」 完了です!!