先日の記事で紹介した 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)
-
SERVICES
にdynamodb
を追加 -
INIT_SCRIPTS_PATH
はコンテナ起動時に自動的に実行されるシェルスクリプトのディレクトリを指定します
-
- volumes
- ホスト側の init ディレクトリをコンテナの /docker-entrypoint-initaws.d (環境変数
INIT_SCRIPTS_PATH
で指定したパス)にマウントしています - ホスト側の json ディレクトリをコンテナの /json にマウントしています
- ホスト側の init ディレクトリをコンテナの /docker-entrypoint-initaws.d (環境変数
テーブル定義 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"}}'