アキタイムズ

イベント参加レポと小ネタを中心に投稿しています。

DynamoDBでbatchWriteItemを使い複数データをPutする

はじめに

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となります。