LoginSignup
1
0

More than 1 year has passed since last update.

AWS Hands-on for Beginners 〜Serverless 編〜 #1(2)

Last updated at Posted at 2022-07-10

はじめに

勉強していることをなんとなくメモっていきます。

行うこと
https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/
サーバーレスアーキテクチャで翻訳 Web API を構築する
自分宛のメモを残していきます。

本人情報
IT現場雑用員(一生エクセル触ってる人)
社会人2年目、脳死資格取得男、最近SAPに受かった。

AWS Hands-on for Beginners 〜Serverless 編〜  #1  の続きです。

DynamoDBについて

DynamoDBの特徴

1. フルマネージド型のNoSQLデータベースサービス
マネージドサービスなのでソフトウェアのインストールなどは必要にならず、起動さえできればすぐにデータベースとして使い始められます。キーバリュー型のデータベースであり、セッション情報の管理などにも使われます。

2. 3つのAZに保存されるので信頼性が高い
RDSは自分でマルチAZを有効する必要がありますが、DynamoDBは常に3つのAZで動作するため信頼性が高いです。

3. 読み書きや容量などのスケーリングが自在
要件に応じて、テーブルごとに1秒あたりの読み書きの回数を指定することができます。また予測が難しい場合にはオンデマンドに使用することもできます。ストレージに容量制限はありません。

DynamoDBの用語

パーティションキー
書き込まれたデータをどのパーティションに保存されるかを決めるためのキーです。複数のパーティションが存在する場合は、1つに書きこみが集中してしまわないように設計を行います。

ソートキー
パーティション内でどの位置に保存するかを決めるためのキーです。同じソートキーを持つデータは、物理的に近い位置に保存されます。

プライマリキー
パーティションキー、もしくはパーティションキー + ソートキーのことを指します。 
スクリーンショット 2022-07-03 23.19.32.png

グローバルセカンダリインデックス
パーティションキー、ソートキーを組み替えてより効率的に検索を行えるようにする方法です。

ローカルセカンダリインデックス
パーティション内でプライマリキーはそのままに、ソートキーを組み替えてより効率的に検索を行えるようにする方法です。

DynamoDBを作ってみる

Partition Keyとしてtimestampを指定する

スクリーンショット 2022-07-04 0.47.52.png

テーブル設定を行う

スクリーンショット 2022-07-04 0.48.24.png

手動で入力してみる

スクリーンショット 2022-07-04 0.50.09.png
スクリーンショット 2022-07-04 0.53.04.png

全部組み合わせてみる(API Gateway + Lambda + DynamoDB)

#1で作ったものも作っていきます。

Lambda関数を修正する

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ロール設定を修正する

スクリーンショット 2022-07-04 1.11.51.png

APIを叩いてみる

テストはうまく行きました。
スクリーンショット 2022-07-04 1.58.11.png
DynamoDBにもきちんと書き込まれています。
スクリーンショット 2022-07-04 1.59.01.png

APIからでも翻訳させることができました!!
スクリーンショット 2022-07-04 2.09.18.png

1
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
1
0