DynamoDBのテーブル内のitemsを全て削除するPythonスクリプト(シェルスクリプトも追記)
こんにちわ
です。
TL;DR(要約)
以下コードで実現できます。
なお、Lambda自身には以下設定ください。
- LambdaにアタッチするIAMロールにはDynamoDBのitemsを削除する権限を付与する
- Lambdaのタイムアウト値は最大値の15分にする
import boto3 TABLE_NAME="dynamodb-table-name" PARTITION_KEY="partiton_key_name" SORT_KEY="sort_key_name" dynamodb = boto3.resource("dynamodb") table = dynamodb.Table(TABLE_NAME) # 全アイテムを取得 response = table.scan(ProjectionExpression=f"{PARTITION_KEY}, {SORT_KEY if SORT_KEY else ''}") # アイテムを削除 for item in response["Items"]: key = {PARTITION_KEY: item[PARTITION_KEY]} if SORT_KEY: key[SORT_KEY] = item[SORT_KEY] table.delete_item(Key=key) if SORT_KEY: print(f"Deleted item with {PARTITION_KEY}={item[PARTITION_KEY]} and {SORT_KEY}={item[SORT_KEY]}") else: print(f"Deleted item with {PARTITION_KEY}={item[PARTITION_KEY]}")
シェルだとこう書きます。
#!/bin/bash TABLE_NAME="dynamodb-table-name" PARTITION_KEY="partiton_key_name" SORT_KEY="sort_key_name" keys=$(aws dynamodb scan --table-name $TABLE_NAME --attributes-to-get $PARTITION_KEY $SORT_KEY --output text | tr "\t" "\n") if [ -n "$SORT_KEY" ]; then while read -r partition_key && read -r sort_key; do aws dynamodb delete-item --table-name $TABLE_NAME --key "{\"$PARTITION_KEY\": {\"S\":\"$partition_key\"}, \"$SORT_KEY\": {\"S\":\"$sort_key\"}}" done <<< "$keys" else for partition_key in $keys; do aws dynamodb delete-item --table-name $TABLE_NAME --key "{\"$PARTITION_KEY\": {\"S\":\"$partition_key\"}}" done fi