dockerを使用し mac のローカル環境にDynamoDBを構築します。
今回の説明範囲は、ローカル環境のdockerを使用したLambdaから、DynamoDBを操作できるように準備するところまでとなります。
なお、ローカル環境のLambdaの作成は以下を参考にして下さい。
プログラミング言語はNode.jsを使用します。
ディレクトリ構成
以下のようなディレクトリ構成とします。
02_sample_app
-- index.js
-- DynamoDbSetter.js
03_platform
-- docker-compose.yml
今回はindex.jsの説明は行いません。
DynamoDbSetter.js、docker-compose.ymlを使用します。
DynamoDBの作成
docker-composeを使用してDynamoDBを作成します。
合わせてLambdaも作成します。
内容は以下の通りです。
version: '3.5'
services:
dynamodb_local:
image: amazon/dynamodb-local:latest
container_name: dynamodb_local
user: root
command: -jar DynamoDBLocal.jar -sharedDb -dbPath /data
volumes:
- ./data:/data
ports:
- 8000:8000
networks:
- dynamodb_network
dynamodb_lambda:
container_name: dynamodb_lambda
image: lambci/lambda:nodejs12.x
tty: true
volumes:
- ../02_sample_app:/var/task
- ./opt:/opt
ports:
- 9001:9001
environment:
DOCKER_LAMBDA_STAY_OPEN: 1
DOCKER_LAMBDA_WATCH: 1
DOCKER_LAMBDA_DEBUG: 1
TZ: 'Asia/Tokyo'
REGION: 'ap-northeast-1'
END_POINT: 'http://dynamodb_local:8000'
command: index.handler
depends_on:
- dynamodb_local
networks:
- dynamodb_network
networks:
dynamodb_network:
driver: bridge
今回はローカルのLambdaからDynamoDBを操作する為、”dynamodb_network” という名前のネットワークを作成しています。
dynamoDBコンテナのポート番号は任意で大丈夫です。
docker image はamazonが提供するイメージになります。
Lambda環境を構築する内容の説明は以下を参考にして下さい。
なお、DynamoDBに接続する為の情報として、AWSリージョンとDynamoDBのエンドポイントが必要になります。
今回は環境変数から取得できるようにREGION、END_POINTを指定しています。
REGIONは任意で構いません。何かを指定すれば大丈夫です。
END_POINTはDynamoDBのコンテナ名を指定して下さい。今回はDynamoDBコンテナ名を dynamodb_local としています。またポート番号も指定して下さい。
必ずしもLambdaの環境変数にREGION、END_POINTを指定する必要はありません。
DynamoDB接続設定
DynamoDBへ接続するプログラムは以下の通りです。
DynamoDbSetter.jsとします。
const AWS = require("aws-sdk");
const REGION = process.env["REGION"];
const END_POINT = process.env["END_POINT"];
module.exports = class DynamoDbSetter {
constructor() {
// dynamoDBセットアップ
let config = {
accessKeyId: 'xxxxxxxxxxxxxxxxxxxx',
secretAccessKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
region: REGION,
endpoint: END_POINT
};
AWS.config.update(config);
this.dynamodb = new AWS.DynamoDB();
}
}
リージョン、エンドポイント、AWSアカウントのクレデンシャルの指定が必要です。
Lambdaの環境変数で指定したREGIONとEND_POINTを使用します。
クレデンシャルは適当に指定して下さい。任意の文字列ならなんでも大丈夫です。
AWS SDKを利用しています。
最後に
今回は設定のみで実際にDynamoDBに繋がるか確認ができません。
そこで、次回は今回のDynamoDBへの接続が成功するかの確認の為、DynamoDBへ簡単なテーブルを作成してみます。