AWS CLI DynamoDB Query コマンド

AWS CLIを使った DynamoDB Queryコマンドを使った テーブルデータ取得方法です。

テーブル名 = table1として Partition Key = ID ソートキーなしの場合

aws dynamodb query \
  --table-name table1 \
  --key-condition-expression "ID = :U" \
  --expression-attribute-values  '{":U":{"S":"検索したい文字"}}' \
  --profile あれば --region ap-northeast-1 > out.json

–profileや–region指定なければ入れなくてOKです。例では最後にout.jsonファイルに出力されます。ソートキーが無い場合Queryはあまり意味が無いかもです

上記 table1テーブルにPartition KeyとSort Keyがある場合(Sort Key = SORT1)

aws dynamodb query \
  --table-name table1 \
  --key-condition-expression "ID = :U and begins_with(SORT1, :S)" \
  --expression-attribute-values  '{":U":{"S":"検索したい文字"}, ":S":{"S":"検索したいソート名"}}' \
  --profile あれば --region ap-northeast-1 > out.json

–key-condition-expressionにbegins_with()が入っていますが この場合前方一致の文字列検索が可能です。

DynamoDBのテーブル定義を取得して別リージョンにコピーを作成する

DynamoDBのテーブル定義を取得して別リージョンにコピーを作成する

AWS DynamoDBでシステムを組むとテーブルは当然1つ2つでは済まず、システムとしてたくさんのテーブルを作ることになります。システムをテスト用や本番環境などで別リージョンにコピーを作らないといけないこともあり、ボタンひとつで簡単にコピーできればいいのですがそういったツールもなく手作業になっています。AWSCLIコマンドを組み合わせればある程度テーブル定義の取得から別リージョンに新たにテーブル作成することができます。

テーブル一覧を取得

aws dynamodb list-tables

テーブル定義を取得

aws dynamodb describe-table --table-name テーブル名 > 出力ファイル名.json

テーブルリストが取得できるので上記のdescribe-tableで定義を取得しJSONファイルを保存します。このdescribe-table情報はテーブル作成で要らない情報も入っていますのでそれを編集します。下記のElementを削除します。

['TableStatus', 'TableSizeBytes','TableId','TableArn', 'ItemCount','CreationDateTime', 'NumberOfDecreasesToday','IndexStatus','IndexSizeBytes','IndexArn']

テーブル作成

describe-tableのJSONが綺麗に修正できたらcreate-tableを実行します。

aws dynamodb create-table --table-name テーブル名 --cli-input-json file://テーブル定義.json

この手順で別リージョンにコピーできるのですがdescribe-tableの編集が面倒です。なのでわたしの場合Node.jsで組んで簡単に引越しできるようにしました。

https://github.com/mojeld/copyDynamoDBTabledefinitionToAnotherRegion

node index.js ap-northeast-1 us-west-2

上記のようにソースリージョンとコピー先リージョンを指定するとコピーできます。

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED