LambdaからLocalStackを使用してローカル環境でDynamoDBのテストをしたので、備忘録として。
エンジニア歴1ヶ月のベビーエンジニアがこれを書いているので、間違いやぬけ、勘違いがあれば指摘いただければありがたいです。
###LocalStackの準備
すでにLambdaは用意済みなので、LocalStackを用意するところから。
が、その前にLambdaとLocalStackを同じネットワーク内に用意しておかないといけないので、dockerのlocalnetworkを構築します。
$ docker network create -d bridge 任意のネットワーク名
dockerのlocalnetworkを用意したら、localstackを起動します。
$ docker run -it --network ネットワーク名 --name=localstack -p 4563-4593:4563-4593 -p 8080:8080 -e LOCALSTACK_SERVICES=dynamodb localstack/localstack
これでLocalStackでDynamoDBのモックが用意できました。
###LocalStack内DynamoDBにTableを作成
次は、DynamoDB内にTableを用意します。
$ aws --endpoint-url=http://localhost:4569 dynamodb create-table \
--table-name YOUR_TABLE_NAME --attribute-definitions AttributeName=YOUR_ATTRIBUTE_NAME1,AttributeType=S --key-schema AttributeName=YOUR_ATTRIBUTE_NAME2,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
最後のReadCapacityUnitesとWriteCapacityUbitsはオプションなので、ここでは1にしていますがアプリに合わせて変更が必要です。
これでLocalStackとLambdaの連携が完了です!
あとはLambda側の関数でput_itemやget_item等のメソッドを記述すれば、LocalStackのDynamoDBにストアしたデータを取ってくることができます。
##まとめ
LambdaとLocalStackのDynamoDBを同じdocker network内に配置し、(仮)DynamoDBのテストができるまでの流れでした。