はじめに
aws-cliを使い、DynamoDBに対して複数のデータをPutItemしたい場面がありました。
ただし、batchWriteItemの制限は25件という事で、数百件のpuItemを想定したシェルをChat-GPTと対話しながら作成してみました。
シェル内容
# ループ数 ROOP_COUNT=$1 # DynamoDBテーブル名 TABLE_NAME="dictionary" # # データを格納するJSONファイルのベース名 DATA_FILE_BASE="data" # データファイルの生成 for ((x=1; x<=$ROOP_COUNT; x++)); do DATA_FILE="${DATA_FILE_BASE}_${x}.json" echo "{ \"$TABLE_NAME\": [" > $DATA_FILE # 25件のデータを生成してJSONファイルに書き込む for ((y=((x-1)*25+1); y<=x*25; y++)); do echo " { \"PutRequest\": { \"Item\": { \"id\": {\"N\": \"$y\"}, \"param\": {\"S\": \"value$y\"} } } }," >> $DATA_FILE done # 最後のカンマを削除 sed -i '$ s/,$//' $DATA_FILE # JSONファイルを閉じる echo "] }" >> $DATA_FILE # データの書き込み aws dynamodb batch-write-item \ --request-items file://$DATA_FILE \ --region ap-northeast-1 # 一時ファイルを削除 rm $DATA_FILE done
利用例は以下。
[cloudshell-user@ip-10-132-84-168 ~]$ sh batch-write-item.sh 1 { "UnprocessedItems": {} }
- 25件のループの分、第一引数に数値を渡します。
- 100件のputItemを行いたい場合は
sh batch-write-item.sh 4
となります。