LoginSignup
1
1

More than 1 year has passed since last update.

DynamoDB ローカル環境(LocalStack)起動時にテーブルを作成する

Posted at

先日の記事で紹介した LocalStack Docker コンテナを利用したローカル AWS 環境に DynamoDB サービスを追加して
コンテナ起動時にテーブルを自動作成するようにする方法です

Docker の設定

docker-compose.yml
version: '3.8'

services:
  localstack:
    container_name: localstack
    image: localstack/localstack:0.13.3
    environment:
      SERVICES: dynamodb
      INIT_SCRIPTS_PATH: /docker-entrypoint-initaws.d
      DEFAULT_REGION: 'ap-northeast-1'
    ports:
      - '4566:4566'
    volumes:
      - ./init:/docker-entrypoint-initaws.d
      - ./json:/json
  • 環境変数(environment)
    • SERVICESdynamodb を追加
    • INIT_SCRIPTS_PATH はコンテナ起動時に自動的に実行されるシェルスクリプトのディレクトリを指定します
  • volumes
    • ホスト側の init ディレクトリをコンテナの /docker-entrypoint-initaws.d (環境変数INIT_SCRIPTS_PATHで指定したパス)にマウントしています
    • ホスト側の json ディレクトリをコンテナの /json にマウントしています

テーブル定義 JSON

テーブル定義 JSON ファイルを作成し、json ディレクトリに保存

json/todo.json
{
    "TableName": "todo",
    "AttributeDefinitions": [
        {
            "AttributeName": "id",
            "AttributeType": "S"
        }
    ],
    "KeySchema": [
        {
            "AttributeName": "id",
            "KeyType": "HASH"
        }
    ],
    "ProvisionedThroughput": {
        "WriteCapacityUnits": 5,
        "ReadCapacityUnits": 10
    }
}

以下のコマンドで JSON ファイルのスケルトンを生成することができます

aws dynamodb create-table --generate-cli-skeleton

テーブルを作成する初期化スクリプト

cli-input-json オプションでテーブル定義 JSON ファイルを指定して
create-table を実行するスクリプトを作成し init ディレクトリに保存

init/create-dynamodb-table.sh
#!/bin/bash

# テーブルを作成
awslocal dynamodb create-table --cli-input-json file:///json/todo.json

# テーブル一覧を表示
awslocal dynamodb list-tables

コンテナ起動

docker compose up -d

CLI でアイテムを登録・取得してみる

localstack コンテナ内で実行

# コンテナ内のシェルを実行
docker compose exec localstack bash
# アイテムを登録
awslocal dynamodb put-item --table-name todo --item '{"id":{"S":"0001"},"title":{"S":"Qiita記事を書く"}}'

# アイテムを取得
awslocal dynamodb get-item --table-name todo --key '{"id":{"S":"0001"}}'
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1