0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API Gateway、Lambda、DynamoDBを組み合わせて翻訳Web APIを完成させてみた

Last updated at Posted at 2024-11-24

はじめに

こんにちは。
今回は以下の構成を完成させたいと思います。
image.png

本記事は以下記事の続編です。

気が付いたらマネジメントコンソールのUIが変わっていました。

やってみた

まずは、マネジメントコンソールからLambdaのページに移動します。
「AWS Lambdaを単体で動かしてみた」で作成したLambda関数(translate-function)を開きます。
image.png

以下のページを参考に、Lambda関数を修正していきます。

以下画像の赤枠部分をコピーします。
import boto3は既にLambda関数に記述されているためコピーしません。
image.png

コピーしたコードを6-7行目に貼り付けます。
image.png

貼り付けたコードを以下のように修正します。
テーブルに直接アクセスするコードを1行でまとめています。

dynamodb_translate_history_tbl = boto3.resource('dynamodb').Table('translate-history')

image.png

先程のページ(Boto3 documentation)に戻り、下にスクロールして「put_item」をクリックします。
image.png

色々なSyntaxが記載されていますが、今回参考にするのは2-4行目のItemの箇所です。
image.png

3行目と21-27行目の箇所を追記します。
image.png

↓3行目のコード
(タイムスタンプを取得するためのPythonモジュールをインポートしています。)

import datetime

↓21-27行目のコード
(DynamoDBにタイムスタンプ、入力文、出力文を追加するコードです。)

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

修正後、左側のDeployボタンをクリックします。
クリック後、以下のようなメッセージが表示されます。
image.png

Lambda関数のIAMロールにdynamoDBへのアクセス権限が付与されていないので、付与します。
「設定」→「アクセス権限」→ロール名をクリックします。
image.png

「ポリシーをアタッチ」をクリックします。
image.png

「dynamodb」を検索し、「AmazonDynamoDBFullAccess」にチェックを入れ、「許可を追加」をクリックします。
本来であれば必要最低限の権限に絞るべきではあります。
image.png

追加後、以下のようなメッセージが表示されます。
image.png

Lambdaのページに戻り、「テスト」タブをクリックします。
image.png

テストイベントを修正します。
8行目の元々「こんにちは」だった箇所を「こんばんは」に修正します。
image.png

修正後、「保存」→「テスト」をクリックします。
image.png

成功しました。「Good evening」と表示されています。
image.png

DynamoDBに履歴が残っているか確認してみます。
DynamoDBのページに移動し、「項目を探索」→「translate-history」をクリックします。
すると、先ほどの履歴(青枠箇所)が入ってます。
image.png

次はAPIの動作を確認してみます。
API-Gatewayのページを開き、「Amazon API GatewayでMock APIを作ってみた」で作成したtranslate-apiを開きます。
「ステージ」→「GET」→URLをコピーします。
image.png

コピーしたURLをブラウザのURL入力欄に貼り付けます。
"?"移行を入力します。
「ハンズオン完走しました」の部分は英語にした好きな日本語を入力します。
image.png

入力後、Enterを叩きます。
英語に変換されたテキストが出力されました。
image.png

DynamoDBの方にもしっかり履歴が記録されていました。
image.png

ようやくこの構成が完成しました!
image.png

おわりに

ちょっと時間がかかってしまいましたが、無事にハンズオンを終えることができました。
今後もやったことの足跡を付けていこうと思います!

AdobeStock_482977927.jpeg

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?