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」します。

「translate-function」を修正
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」がアタッチされた

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

「設定タブ」→「アクセス制御」を確認 (Amazon DynamoDB)
「設定タブ」→「アクセス制御」を確認 (Amazon DynamoDB Accelerator(DAX))

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

コードを「Deploy」

テストを実行

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

「good evening」が返されている

DynamoDB の translate-history テーブルにもitem追加されている。

API Gateway からのアクセスも確認する

「translate-api」をクリック

「ステージ」→「GET」
をクリック

「URLの呼び出し」
リンクをクリック

クエリパラメータを指定していないので、エラーになるが、input_text を追加すると・・・

翻訳成功!!

DynamoDBにも
ちゃんと追加されている!!

今回は、 Lambda + API Gateway (日本語を英語に翻訳するAPI 構成)に、 翻訳履歴情報をテーブルに保持するように修正しました。

こちらで、 「サーバーレスアーキテクチャで翻訳 Web API を構築する 」 完了です!!