ここでは Docker をlocalhost:8000
で動かし、それを対象に見ていきます。DynamoDB を Docker で動かすには以下のコマンドを実行します。
docker run \
--detach \ # バックグランドで、
--name DynamoDB \ # 名前は'DynamoDB'で、
--publish 8000:8000 \ # `localhost:8000`で、
amazon/dynamodb-local # `amazon/dynamodb-local`を起動
AWS CLI の DynamoDB を扱う為のコマンドはaws dynamodb
です。これのサブコマンドに--endpoint-url http://localhost:8000
オプションを付けることでローカルの DynamoDB に対して命令することができます。
テーブル一覧
list-tables
サブコマンドを使います。まだ何も無いので空です。
aws dynamodb list-tables \
--endpoint-url http://localhost:8000
# {
# "TableNames": []
# }
テーブル作成
create-table
サブコマンドを使います。まだ何も無いので空です。
aws dynamodb create-table \
# 'MusicCollection'というテーブル名で、 \
--table-name MusicCollection \
# 文字列の'Artist'と'SongTitle'値を持ち、 \
--attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
# 'Artist'をパーティションキー、'SongTitle'をソートキーとします \
--key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
# 1秒間に5回の読み込みと書き込みができます(デフォルト) \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--endpoint-url http://localhost:8000
# {
# "Table": {
# "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/MusicCollection",
# "AttributeDefinitions": [
# {
# "AttributeName": "Artist",
# "AttributeType": "S"
# },
# {
# "AttributeName": "SongTitle",
# "AttributeType": "S"
# }
# ],
# "ProvisionedThroughput": {
# "NumberOfDecreasesToday": 0,
# "WriteCapacityUnits": 5,
# "LastIncreaseDateTime": 0.0,
# "ReadCapacityUnits": 5,
# "LastDecreaseDateTime": 0.0
# },
# "TableSizeBytes": 0,
# "TableName": "MusicCollection",
# "BillingModeSummary": {
# "LastUpdateToPayPerRequestDateTime": 0.0,
# "BillingMode": "PROVISIONED"
# },
# "TableStatus": "ACTIVE",
# "KeySchema": [
# {
# "KeyType": "HASH",
# "AttributeName": "Artist"
# },
# {
# "KeyType": "RANGE",
# "AttributeName": "SongTitle"
# }
# ],
# "ItemCount": 0,
# "CreationDateTime": 1558979217.277
# }
# }
テーブル詳細の取得
describe-table
サブコマンドを使います。
aws dynamodb describe-table \
# 'MusicCollection'というテーブル名を取得 \
--table-name MusicCollection \
--endpoint-url http://localhost:8000
# ...結果は`create-table`のものと同じ
データの挿入
put-item
サブコマンドを使います。
aws dynamodb put-item \
# 'MusicCollection'というテーブルに新しいデータを \
--table-name MusicCollection \
# パーティションは'藤山一郎'、ソートキーは'夢淡き東京'という内容で入れます \
--item '{
"Artist": {"S": "藤山一郎"},
"SongTitle": {"S": "夢淡き東京"},
"Youtube": {"M": {
"url": {"S": "https://www.youtube.com/watch?v=M9UZw7Q5hBc&loop=0"}
}}
}' \
--endpoint-url http://localhost:8000
# ...出力はなし
データ一覧取得
scan
サブコマンドを使います。
aws dynamodb scan \
# 'MusicCollection'テーブルのデータを取得 \
--table-name MusicCollection \
# (以下は無くてもいいけど、使ってみる) \
# 'Artist'が'藤山一郎'のもので絞り込む
--expression-attribute-names '{"#name": "Artist"}' \
--expression-attribute-values '{":hujiyama": {"S": "藤山一郎"}}' \
--filter-expression '#name = :hujiyama' \
--endpoint-url http://localhost:8000
# {
# "Count": 1,
# "Items": [
# {
# "Youtube": {
# "M": {
# "url": {
# "S": "https://www.youtube.com/watch?v=M9UZw7Q5hBc&loop=0"
# }
# }
# },
# "SongTitle": {
# "S": "夢淡き東京"
# },
# "Artist": {
# "S": "藤山一郎"
# }
# }
# ],
# "ScannedCount": 1,
# "ConsumedCapacity": null
# }
query
でも取得できます。
aws dynamodb query \
# 'MusicCollection'テーブルのデータを取得 \
--table-name MusicCollection \
--expression-attribute-names '{"#name": "Artist", "#title": "SongTitle"}' \
--expression-attribute-values '{":hujiyama": {"S": "藤山一郎"}, ":yumeawaki_tokyo": {"S": "夢淡き東京"}}' \
--key-condition-expression '#name=:hujiyama AND #title=:yumeawaki_tokyo' \
--endpoint-url http://localhost:8000
# ...`scan`結果と同じ
データの取得
get-item
サブコマンドを使います。
aws dynamodb get-item \
# 'MusicCollection'テーブルから \
--table-name MusicCollection \
# '藤山一郎'なデータを取得します \
--key '{"Artist": {"S": "藤山一郎"}, "SongTitle": {"S": "夢淡き東京"}}' \
--endpoint-url http://localhost:8000
# {
# "Item": {
# "Youtube": {
# "M": {
# "url": {
# "S": "https://www.youtube.com/watch?v=M9UZw7Q5hBc&loop=0"
# }
# }
# },
# "SongTitle": {
# "S": "夢淡き東京"
# },
# "Artist": {
# "S": "藤山一郎"
# }
# }
# }
データの更新
update-item
サブコマンドを使います。
aws dynamodb update-item \
# 'MusicCollection'テーブルの対象の行に、 \
--table-name MusicCollection \
--key '{"Artist": {"S": "藤山一郎"}, "SongTitle": {"S": "夢淡き東京"}}' \
# 以下の値で追加・’更新する \
--update-expression 'SET newAttributeName = :newAttributeValue' \
--expression-attribute-values '{":newAttributeValue": {"S": "value"}}' \
# そして、更新したデータだけ返す \
--return-values UPDATED_NEW \
--endpoint-url http://localhost:8000
# {
# "Attributes": {
# "newAttribute": {
# "S": "value"
# }
# }
# }
データの削除
delete-item
サブコマンドを使います。
aws dynamodb delete-item \
# 'MusicCollection'テーブルから \
--table-name MusicCollection \
# '藤山一郎'パーティションから'夢淡き東京'という曲を削除します \
--key '{"Artist": {"S": "藤山一郎"}, "SongTitle": {"S": "夢淡き東京"}}' \
--endpoint-url http://localhost:8000
# ...出力はなし
バックアップ作成
create-backup
サブコマンドを使います。
aws dynamodb create-backup \
--table-name MusicCollection \
--backup-name MusicCollectionBackup
このようなコマンドを実行すると以下のようなログが出力されます。(n
は数値です)CREATING
というステータスが表示されていますが、これがAVAILABLE
になるとバックアップ完了です。
{
"BackupDetails": {
"BackupCreationDateTime": nnnnnnnnn.nnn,
"BackupName": "MusicCollectionBackup",
"BackupStatus": "CREATING",
"BackupType": "USER",
"BackupSizeBytes": nnn,
"BackupArn": "arn:aws:dynamodb:ap-northeast-1:nnnnnnnnnnn:table/MusicCollection/backup/nnnnnnnnnnnnnn-nnnnnnnnn"
}
}
バックアップ一覧
list-backups
を実行するだけです。
aws dynamodb list-backups
# [
# {
# "BackupDetails": {
# "BackupCreationDateTime": nnnnnnnnn.nnn,
# "BackupName": "MusicCollectionBackup",
# "BackupStatus": "AVAILABLE",
# "BackupType": "USER",
# "BackupSizeBytes": nnn,
# "BackupArn": "arn:aws:dynamodb:ap-northeast-1:nnnnnnnnnnn:table/MusicCollection/backup/nnnnnnnnnnnnnn-nnnnnnnnn"
# }
# }
# ]
バックアップの削除
delete-backup
サブコマンドを使います。--backup-arn
が必須でこれはlist-backups
のBackupArn
から取得します。
aws dynamodb delete-backup \
--backup-arn 'arn:aws:dynamodb:ap-northeast-1:nnnnnnnnnnn:table/MusicCollection/backup/nnnnnnnnnnnnnn-nnnnnnnnn'
バックアップの適用
restore-table-from-backup
サブコマンドを使います。
aws dynamodb restore-table-from-backup \
--target-table-name MusicCollection
--backup-arn 'arn:aws:dynamodb:ap-northeast-1:nnnnnnnnnnn:table/MusicCollection/backup/nnnnnnnnnnnnnn-nnnnnnnnn'