Home

Awesome

dynamodb-sandbox

dynamodbがなにかざっくり知る

ローカル用のaws configファイルを参照するように設定

# direnvとawscliをインストール
aqua i
# ローカルのaws config/credentialsを参照するように環境変数を設定
cp .envrc.sample .envrc
direnv allow

セットアップ

docker compose up -d
aws dynamodb list-tables

テーブル作成

ステップ 1: テーブルを作成します - Amazon DynamoDB

aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --table-class STANDARD

aws dynamodb list-tables
{
    "TableNames": [
        "Music"
    ]
}

データ投入

ステップ 2: コンソールまたは AWS CLI を使用して、テーブルにデータを書き込みます - Amazon DynamoDB

aws dynamodb put-item \
    --table-name Music  \
    --item \
        '{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "1"}}'

aws dynamodb put-item \
    --table-name Music  \
    --item \
        '{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Howdy"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "2"}}'

aws dynamodb put-item \
    --table-name Music \
    --item \
        '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}, "AlbumTitle": {"S": "Songs About Life"}, "Awards": {"N": "10"}}'

aws dynamodb put-item \
    --table-name Music \
    --item \
        '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "PartiQL Rocks"}, "AlbumTitle": {"S": "Another Album Title"}, "Awards": {"N": "8"}}'

データ取得

ステップ 3: テーブルからデータを読み込みます - Amazon DynamoDB

aws dynamodb get-item --consistent-read \
    --table-name Music \
    --key '{ "Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}'

データ更新

ステップ 4: テーブルのデータを更新します - Amazon DynamoDB

aws dynamodb update-item \
    --table-name Music \
    --key '{ "Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}' \
    --update-expression "SET AlbumTitle = :newval" \
    --expression-attribute-values '{":newval":{"S":"Updated Album Title"}}' \
    --return-values ALL_NEW

クエリ

ステップ 5: テーブルのデータをクエリします - Amazon DynamoDB

aws dynamodb query \
    --table-name Music \
    --key-condition-expression "Artist = :name" \
    --expression-attribute-values  '{":name":{"S":"Acme Band"}}'

aws dynamodb query \
    --table-name Music \
    --key-condition-expression "Artist = :x and begins_with(SongTitle, :name)" \
    --expression-attribute-values  '{":name":{"S":"H"}, ":x": {"S": "Acme Band"}}'

GSI

ステップ 6: グローバルセカンダリインデックスを作成します - Amazon DynamoDB

aws dynamodb update-table \
    --table-name Music \
    --attribute-definitions AttributeName=AlbumTitle,AttributeType=S \
    --global-secondary-index-updates \
        "[{\"Create\":{\"IndexName\": \"AlbumTitle-index\",\"KeySchema\":[{\"AttributeName\":\"AlbumTitle\",\"KeyType\":\"HASH\"}], \
        \"ProvisionedThroughput\": {\"ReadCapacityUnits\": 10, \"WriteCapacityUnits\": 5      },\"Projection\":{\"ProjectionType\":\"ALL\"}}}]"

GSI クエリ

ステップ 7: グローバルセカンダリインデックスをクエリします - Amazon DynamoDB

aws dynamodb query \
    --table-name Music \
    --index-name AlbumTitle-index \
    --key-condition-expression "AlbumTitle = :name" \
    --expression-attribute-values  '{":name":{"S":"Somewhat Famous"}}'

NoSQL Workbench

項目の操作を行う|NoSQL Workbenchで学ぶAmazon DynamoDB

DynamoDB localを動かしながら、connection localを選択する。

設計

dynamolock

dynamolockとは?

Building Distributed Locks with the DynamoDB Lock Client | AWS Database Blog

dynamolockのgo package