概要
AWS DynamoDB/DocumentDBをローカルで確認する手順
環境
Microsoft Windows [Version 10.0.19041.388]
Docker version 19.03.8, build afacb8b
SAM CLI, version 0.53.0
aws-sdk@2.727.1
DynamoDB Local
DynamoDB ローカル セットアップ
DynamoDB ローカル (ダウンロード可能バージョン) のセットアップ
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html
に手順がある
DynamoDB Docker イメージをインストールする
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.Docker.html
を実施
version: '3.7'
services:
dynamodb-local:
image: amazon/dynamodb-local:latest
container_name: dynamodb-local
ports:
- "8000:8000"
コンソール出力
>docker-compose up
Creating network "sample-sam-node_default" with the default driver Pulling dynamodb-local (amazon/dynamodb-local:latest)...
latest: Pulling from amazon/dynamodb-local
638b75f800bf: Pull complete
a455ee0c5c58: Pull complete
c7e215ba3460: Pull complete
Digest: sha256:c8aeb014edfff8b93d7f14054cb9d2a1be214d62b7c5b61eb7fb40893a8404bb
Status: Downloaded newer image for amazon/dynamodb-local:latest
Creating dynamodb-local ... done
Attaching to dynamodb-local
dynamodb-local | Initializing DynamoDB Local with the following configuration:
dynamodb-local | Port: 8000
dynamodb-local | InMemory: true
dynamodb-local | DbPath: null
dynamodb-local | SharedDb: false
dynamodb-local | shouldDelayTransientStatuses: false
dynamodb-local | CorsParams: *
GUIツールからの操作
dynamodb-admin
https://github.com/aaronshaf/dynamodb-admin
npm install -g dynamodb-admin
set DYNAMO_ENDPOINT=http://localhost:8000
dynamodb-admin
コンソール
>dynamodb-admin
database endpoint: http://localhost:8000
region: ap-northeast-1
accessKey: xxx
dynamodb-admin listening on http://localhost:8001 (alternatively http://0.0.0.0:8001)
以下読み替え
ハッシュキー(Hash Attribute Name) → パーティションキー
レンジキー(Range Attribute Name (Optional)) → ソートキー
VSCodeからのデバッグ
- VS CodeにAWS Toolkitをインストール
- Code Lensから「Add Debug Configuration」をクリック
"launch": {
"configurations": [
{
"type": "aws-sam",
"request": "direct-invoke",
"name": "sample-sam-node:app.lambdaHandler (nodejs10.x)",
"invokeTarget": {
"target": "code",
"projectRoot": "hello-world",
"lambdaHandler": "app.lambdaHandler"
},
"lambda": {
"runtime": "nodejs10.x",
"payload": {},
"environmentVariables": {}
}
}
]
}
コード編集後、VSCodeのDebugボタンを押すとsam build/invokeを呼び出してくれる
以下でdynamodb localへのアクセスを確認
let response;
var dynamoOpt = {
apiVersion: '2012-08-10',
endpoint: "http://192.168.1.X:8000"
};
var documentClient = new AWS.DynamoDB.DocumentClient(dynamoOpt);
exports.lambdaHandler = async (event, context) => {
try {
scanItems = await documentClient.scan({TableName: "sample_table"}).promise();
response = {
"statusCode": 200,
"body": JSON.stringify(scanItems)
};
} catch (err) {
console.log(err);
return err;
}
return response
};
Mongo DB (Document DB)
Document DBがMongo DB互換なのでMongo DBを設置すればよい
Node.jsからの接続はMongoDB NodeJS Driverを利用し、接続先はローカルのIPアドレス
docker pull mongo
docker run --it --name sample-mongo mongo