おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

AWS CLIからDynamoDBを操作してみる。

はじめに

業務でDynamoDBを利用しているのですがAWS CLIからコマンドを打つ機会があったので忘れずに操作内容をメモしておこうと思います。

事前準備

今回はローカル環境からコマンドを打っているため、AWS CLIを利用するにあたってAWS Configureの設定をする必要があります。

C:\WINDOWS\system32>aws configure
AWS Access Key ID [None]: IAMユーザのアクセスキー
AWS Secret Access Key [None]: IAMユーザのシークレットアクセスキー
Default region name [None]: ap-northeast-1
Default output format [None]: json

DynamoDBの作成

今回はこの「test_dynamoDb」というテーブルを利用して色々と操作をしていこうと思います。 パーティションキーは"TestKey"とします。 test_dynamo0.png

注意

今回、僕はコマンドプロンプトを利用したのですが、一つのハマりポイントとしてJsonの""は前に\を入れる必要がありました。 もしコマンドプロンプトを利用している方は気をつけてくださいね!

テーブルの一覧を取得

テーブルの一覧を取得するにはlist-tablesコマンドを利用します。

awscli.amazonaws.com

aws dynamodb list-tables

test_dynamoDbが取得できました。 list-tables.png

データの挿入

データの挿入にはput-itemコマンドを利用します。

docs.aws.amazon.com

aws dynamodb put-item --table-name test_dynamoDb --item "{\"TestKey\":{\"S\": \"TestKey1\"}, \"item1\": {\"S\": \"テスト1\"}}"

ちゃんと値が入ったことが確認できました! test_dynamo1.png

同じキーを持つ項目がすでにテーブル内にある場合はその値が上書きされます。

aws dynamodb put-item --table-name test_dynamoDb --item "{\"TestKey\":{\"S\": \"TestKey1\"}, \"item1\": {\"S\": \"テスト2\"}}"

先ほど作成した「テスト1」が「テスト2」へ上書きされました。 test_dynamo2.png

キーの値を変更すると新しく挿入されます。

aws dynamodb put-item --table-name test_dynamoDb --item "{\"TestKey\":{\"S\": \"TestKey2\"}, \"item1\": {\"S\": \"テスト3\"}}"

test_dynamo3.png

単一の項目を取得する

キーを指定してデータを取得する場合はget-itemコマンドを利用します。

docs.aws.amazon.com

aws dynamodb get-item --table-name test_dynamoDb --key "{\"TestKey\": {\"S\": \"TestKey2\"}}"

キーがTestKey2の項目が取得できました。 test_dynamo4.png

特定のデータを持つ、特定の項目のみ取得する

特定のデータを持つ、特定の項目を取得する場合はscanコマンドと--filter-expressionオプション、--expression-attribute-valuesオプション、--projection-expressionオプションを利用します。

docs.aws.amazon.com

今回はキー以外のものでフィルターしているためにscanを利用しています。 下記はitem1項目の値が"テスト3"である項目のTestKeyを出力します。

aws dynamodb scan --table-name test_dynamoDb --filter-expression "item1 = :item" --expression-attribute-values "{\":item\": {\"S\": \"テスト3\"}}" --projection-expression "TestKey"

ちゃんと取得できましたね! test_dynamo6.png

おわりに

普段はSQLServerMySQLを触ることが多いのですがDynamoDBのようなNoSQLはクエリ等が全然違うのでしっかり勉強しなきゃですね...(;´∀`) 今回調査していたら「PartiQL エディタ」というものを見つけました。どうやらそれを利用するとSQLでDynamoDBを操作できるっぽいのでここら辺もまた試してみようと思います。