DynamoDB Local で pythonを使っての採番処理の作成 準備編


概要

pythonの採番処理を作成するときにDynamoDBを使うときに開発中に実際のDynamoDBを使うのは・・・という場合DynamoDB Local を使っての開発すると思うのでその方法をまとめていきます。
まずは準備としてdockerのコンテナを作ってテーブルの作成まで行います。

事前準備

  • dockerをまず導入します。windows Homeの場合は Docker Quickstart Terminal を使います。
  • aws cli もインストールします。
    • aws cli インストール後 aws config で設定を行います。region , aws_access_key_id は設定してください。後続の処理でコマンドが実行できないため。値は適当でも大丈夫です。

docker fileの設定

  • データを永続化させるため こちらを参考にdocker-compose.yml,Dockerfile を作成します。実際に使ったのは以下のものです。

  • docker-compose.yml

version: '3.7'

services:
  dynamodb:
    build: ./dynamodb
    volumes:
      - dynamodb_data:/home/dynamodblocal/data
    ports:
      - 8000:8000
    command: -jar DynamoDBLocal.jar -dbPath ./data

volumes:
  dynamodb_data:

  • Dockerfile
FROM amazon/dynamodb-local

WORKDIR /home/dynamodblocal

# UID=1000 → DynamoDB Local の実行ユーザ
RUN mkdir data && chown -R 1000 data
  • docker-compose up のコマンドを使うとコンテナが起動します。

テーブルの作成

  • こちらを参照にまずスケルトンJSONを作成します。以下のコマンドを実行します。
    • aws dynamodb create-table --generate-cli-skeleton > skel_dynamodb_create-table.json
  • jsonファイルにテーブル定義を作成します以下のように作成しました。
{
    "AttributeDefinitions": [
        {
            "AttributeName": "sequence_key",
            "AttributeType": "S"
        }
    ],
    "TableName": "sequences",
    "KeySchema": [
        {
            "AttributeName": "sequence_key",
            "KeyType": "HASH"
        }
    ],
    "BillingMode": "PROVISIONED",
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 1,
        "WriteCapacityUnits": 1
    }
}
  • 以下のコマンドでテーブルを作成します。

    • aws dynamodb create-table --cli-input-json file://skel_dynamodb_create-table.json --endpoint-url http://localhost:8000
      • Docker Quickstart Terminal の場合はlocalhostをIPに変えてください。
  • コンテナのほうでアクセス権がない場合は以下のようなエラーログが出るので注意

  • テーブルが作成されたかの確認は DynamoDB shell から行えます。

  • http://localhost:8000/shell/ にアクセスすることでブラウザ上で確認ができます。

    • Docker Quickstart Terminal の場合はlocalhostをIPに変えてください。
    • CTRL+スペースキーで補完ができるので適当にやってみるといいかも
  • 下記のコマンドで作成されているテーブルの確認ができます。テーブルを作成したときのリージョンとAWS Access key を合わせないとみることができないので設定を忘れずに。

    • リージョンを ap-northeast-1 に設定していますがこちらはawsconfigでの設定値に合わせてください。
    • 右上の方の歯車のアイコンでaws_access_key_id を設定してください。
dynamodb.config.update({
 region: "ap-northeast-1"
})
dynamodb.listTables().eachPage(function(err, data) {
    if (err) {
        ppJson(err); // an error occurred
    } else if (data) {
        ppJson(data);
    }
});