📙

DynamoDB on LoclStackでテーブル作成

2022/08/24に公開

Localstackを使用するとAWSのリソースをローカルでテストするときにめちゃめちゃ便利なので大好きなので広めたい.
ついでにjsonファイルにテーブルを定義してコマンド実行時に読み込んで作成する方法を試してみる

※LocalStackをローカルにインストールして使用する方法もあるが自分はドッカーイメージを使用する

DynamoDBをlocalstack上で立ち上げる

このようにdocker-compose.yamlを記述した後, docker compose upなどで立ち上げれば4566ポートからアクセスが可能になる

docker-compose.yaml

version: '3.8'

services:
  localstack:
    container_name: localstack
    image: localstack/localstack:0.13.3
    environment:
      SERVICES: dynamodb
      EDGE_PORT: 4566
    ports:
      - '4566:4566'

テーブル作成 with command

そんでもってaws cliコマンドを使用してUserSampleテーブルを作成することができる
ここでLocalStackではエンドポイントをちょちょいと下のようにローカルの4566ポートを指定している
--endpoint-url=http://localhost:4566

aws --endpoint-url=http://localhost:4566 dynamodb create-table \
    --table-name UserSample \          
    --attribute-definitions \
        AttributeName=name,AttributeType=S \
        AttributeName=id,AttributeType=S \
    --key-schema AttributeName=name,KeyType=HASH AttributeName=id,KeyType=RANGE \
    --billing-mode PAY_PER_REQUEST

ここで使用するのは
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-usage-skeleton.html

テーブル作成 with JSONファイル読み込み

jsonディテクトリを作成した後, sample.jsonを作成する

sample.jsonの中にテーブルを定義していく

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

jsonファイルにてテーブル定義ができたので以下のコマンドでローカルスタック上でテーブルを作成する

aws dynamodbcreatbe-table -cli-input-json file://json/sample.json --endpoint-url=http://localhost:4566

テーブルの一覧を確認

これでテーブルの一覧を取得できる

aws dynamodb list-tables --endpoint-url=http://localhost:4566

アイテム挿入

aws dynamodb put-item --table-name $TABLE --item '{ "id": { "S": "abc-dd" }, "name": { "S": "OK-BOY" } }' --endpoint-url=http://localhost:4566

これをいちいちコマンドで追加するのがめんどくさいのでシェルファイルを作成してその中でまとめて追加しちゃおう

TABLE='sample'
aws dynamodb put-item --table-name sample --item '{ "id": { "S": "abc-dd" }, "name": { "S": "OK-BOY" } }' --endpoint-url=http://localhost:4566
#
aws dynamodb put-item --table-name $TABLE --item '{ "id": { "S": "efg-hh" }, "name": { "S": "THANKYOU-GIRL" } }' --endpoint-url=http://localhost:4566
#
aws dynamodb put-item --table-name $TABLE --item '{ "id": { "S": "ijk-ll" }, "name": { "S": "QUERY-PAPA" } }' --endpoint-url=http://localhost:4566
#

aws dynamodb scan --table-name $TABLE --endpoint-url=http://localhost:4566

こんな感じでまとめちゃえば楽だね

終わり

これでLoclStackでのDynamoDBのセットアップが終わったのであとは自由にテーブル, アイテムを追加していけば自由に開発していける

この記事のために作ったわけではないがlocalstackを使っているリポジトリはこんな感じ
https://github.com/takacube/blog-handler

Discussion