📌

サーバーレスアーキテクチャで翻訳Web APIを構築する③

2024/05/19に公開

前回
https://zenn.dev/tn_a/articles/7fab21ea707b4f

下記ハンズオンを参照
https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html


Amazon DynamoDB ハンズオン①、②

Amazon DynamoDBを用いてテーブルを作成し、Web APIが呼ばれたときに履歴情報をテーブルに記録するLambda Functionを設定する。

構成図

DynamoDBテーブルの作成

マネジメントコンソールから「DynamoDB」検索。
"テーブルの作成"をクリック。

テーブル名、パーティションキーを入力。

「テーブル設定」を"設定をカスタマイズ"に変更する。

「読み込み/書き込みキャパシティーの設定」で「読み込み/書き込みキャパシティー」のAuto Scalingをオフにして、プロビジョンドキャパシティーユニットを"1"にする。

画面下の"テーブルの作成"をクリック。

データを手動で入れてみる

作成した"translate-history"をクリック。

「インデックス」を選択。
「アクション」タブを開いて"項目を作成"をクリック。

「新しい属性の追加」タブを開き、文字列を選択して属性を追加する。
画像を例に入力して"項目を作成"をクリック。

項目が作成されたことが確認できる。

Lambda関数の修正

マネジメントコンソールで「Lambda」を検索。
前回作成したLambda関数をクリック。

コードソースを以下のコードに書き換える。
その後"デプロイ"をクリック。
https://pages.awscloud.com/rs/112-TZM-766/images/10_lambda_dynamodb.py

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']

    response = translate.translate_text(
        Text=input_text,
        SourceLanguageCode="ja",
        TargetLanguageCode="en"
    )

    output_text = response.get('TranslatedText')

    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
      }
    )

    return {
        'statusCode': 200,
        'body': json.dumps({
            'output_text': output_text
        }),
        'isBase64Encoded': False,
        'headers': {}
    }

IAM ロールを追加

「設定」タブの「アクセス権限」を選択。
「実行ロール」の「ロール名」クリック。

「許可を追加」を選択して"ポリシーをアタッチ"をクリック。

検索してAmazonDynamoDBFullAccessを選択。
"許可を追加"をクリック。

APIのテストをする

Lambdaコンソールに戻る。
コードソース上にある「Test」タブを開いて"Configure test event"をクリック。

「新しいイベントを作成」を選択し、イベント名入力。

「テンプレート」から「API Gateway AWS Proxy」を選択する。

画像赤枠の箇所を以下のコードに修正する。

"queryStringParameters": {
   "input_text": "こんばんは"
}

"保存"をクリック。

"テスト"をクリック。

以下の結果が返ってくる。

DynamoDBに項目が追加されたことを確認する。

先ほど作成したテーブルを確認すると項目が追加されたことが分かる。

APIを叩く

前回作成したAPI Gatewayのステージを選択。
「dev」を展開して「GET」を選択。
URLをコピーする。

/translate以下にクエリパラメータを入力してAPIを呼び出す。
/dev/translate?input_text=翻訳する日本語

DynamoDBに項目が追加されたことを確認する。

Discussion