AWS

【DynamoDB】dockerを使用したDynamoDB構築

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へ簡単なテーブルを作成してみます。

© DeNnie.Lab All Rights Reserved.