がじぇ

お金と家電とプログラミングのブログ

DynamoDBのテーブル内のitemsを全て削除するPythonスクリプト(シェルスクリプトも追記)

こんにちわ

Twitter

です。

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