こんにちわ
です。
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