
またAWS認定専門知識受けようと思ってます。
今回は「Database Specialty」です。
RDS、Auroraは業務で使ってるものの、やっぱりエンジンごとの細かいパラメータとかまで突っ込まれるのでなかなか難しい。
今回は初心に帰ってDynamoDBのハンズオンを行いました。
ただ、GUIだと瞬殺なんですがCLIだとどうなんだ?というところが疑問に思ってやってみたら意外とつまりました。
せっかくなのでブログ化しておきます。
参考URL
https://aws.amazon.com/jp/getting-started/hands-on/create-nosql-table/?nc1=h_ls
検索だと何故か意外と引っ掛からなかったですね。
CLIコマンド
DB作成
プロビジョンじゃなくてオンデマンドで作ってます。
オプション名が名称と違うのややこしいですね…
aws dynamodb create-table \
--attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
--table-name 'Music' \
--key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
--billing-mode "PAY_PER_REQUEST" \
--table-class "STANDARD"
Item作成
せっかくなので一括処理。
JSONの階層が若干深いので少しみづらい。
{
"Music": [
{
"PutRequest": {
"Item": {
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "Call Me Today"
}
}
}
},
{
"PutRequest": {
"Item": {
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "My Dog Spot"
}
}
}
},
{
"PutRequest": {
"Item": {
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "Somewhere Down The Road"
}
}
}
},
{
"PutRequest": {
"Item": {
"Artist": {
"S": "The Acme Band"
},
"SongTitle": {
"S": "Still in Love"
}
}
}
},
{
"PutRequest": {
"Item": {
"Artist": {
"S": "The Acme Band"
},
"SongTitle": {
"S": "Look Out, World"
}
}
}
}
]
}
クエリ1
一旦パーティションキーを基にした単純なクエリ。
CLIだとこういう書き方しないといけないんですね。
aws dynamodb query \
--table-name "Music" \
--key-condition-expression "Artist = :v1)" \
--expression-attribute-values file://test.json
{
":v1": {"S": "The Acme Band"}
}
クエリ2
パーティションキーを指定しつつ、ソートキーを基に頭文字でソート。
複数条件書けることに気づかず、filterとかかけようとしてだいぶ苦戦しました。。
でもこれはやっといてよかった。
aws dynamodb query \
--table-name "Music" \
--key-condition-expression "Artist = :v1 AND begins_with ( SongTitle, :v2 )" \
--expression-attribute-values file://test.json
{
":v1": {"S": "The Acme Band"},
":v2": {"S": "S"}
}
まとめ
意外とCLIに関する記事はWebでもなかったので、どなたかの参考になれば幸いです。
まあ、業務で使うならCLIだと制約多いので素直にSDK使ったほうが良さそうだなと思いました。