はじめに
勉強していることをなんとなくメモっていきます。
行うこと
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つに書きこみが集中してしまわないように設計を行います。
ソートキー
パーティション内でどの位置に保存するかを決めるためのキーです。同じソートキーを持つデータは、物理的に近い位置に保存されます。
プライマリキー
パーティションキー、もしくはパーティションキー + ソートキーのことを指します。
グローバルセカンダリインデックス
パーティションキー、ソートキーを組み替えてより効率的に検索を行えるようにする方法です。
ローカルセカンダリインデックス
パーティション内でプライマリキーはそのままに、ソートキーを組み替えてより効率的に検索を行えるようにする方法です。
DynamoDBを作ってみる
Partition Keyとしてtimestampを指定する
テーブル設定を行う
手動で入力してみる
全部組み合わせてみる(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': {}
}