AWS CLIを使って一括でAWS Backup復旧ポイントの削除と既存のAWS Backup復旧ポイントの保持期間の変更を行う

2024.05.20

前提

AWS Backupのバックアップルールで保持期間を変更しても、該当ルールで作成された既存の復旧ポイントの保持期間は変更されません。(新規に作成される復旧ポイントは変更後の保持期間が設定される)

古い復旧ポイントが残り続けるのを許容できない場合、既存の復旧ポイントに対して作業を行う必要があります。

具体的には、以下です。

  1. 古い復旧ポイントを削除
  2. 既存復旧ポイントの保持期間を変更

「2.」だけでも、保持期間を過ぎたら削除されるため、最終的な復旧ポイントの状態は同じです。

しかし、「2.」だけだと特定条件下でAWS Configの記録が余分に発生し課金増につながります。

以下の条件にあてはまる場合、「1.」も実施したほうが良いです。

  • AWS Configの記録対象にAWS Backup 復旧ポイントが含まれている
  • 変更後の保持期間を過ぎている復旧ポイントが大量に存在する

「1.」であれば、「変更後の保持期間を過ぎている復旧ポイント」に対しては、「復旧ポイント削除」の1回分の記録が発生します。

しかし、「2.」のみでは「変更後の保持期間を過ぎている復旧ポイント」に対して、「復旧ポイントの保持期間の変更」「復旧ポイントの削除」の2回分の記録が発生します。

コスト試算の例

  • 前提
    • 保持期間変更対象の復旧ポイントの数: 50,000
    • 上記の内 すでに保持期間を過ぎている復旧ポイントの数: 25,000
    • AWS Config東京リージョンで連続的な記録: 0.003USD/設定項目あたり
  • コスト
    • 「1.」「2.」実施時のAWS Config設定項目コスト: 150USD
      • 古い復旧ポイントの削除: 75 USD = 25,000 * 0.003
      • 既存の復旧ポイントの保持期間設定: 75 USD = (50,000 - 25,000) * 0.003
    • 「2.」のみ実施時のAWS Config設定項目コスト: 225USD
      • 既存の復旧ポイントの保持期間設定: 150 USD = 50,000 * 0.003
      • 保持期間超過による古い復旧ポイントの自動削除:75 USD = 25,000 * 0.003

やってみた

マネジメントコンソールから復旧ポイントを複数選択して削除することは可能です。

1度に表示可能な復旧ポイントは100までとなっており、10,000件等大量に削除したい場合は辛いものがあります。

そのため、このブログではAWS CLIを使用した手順を紹介します。

1.古い復旧ポイントを削除する

まずは対象の復旧ポイントが何個あるか確認します。

リソースタイプDynamoDBの180日以上前の復旧ポイントを対象にします。必要に応じて、--by-resource-type--by-created-beforeを書き換えてください。

$ aws backup list-recovery-points-by-backup-vault \
    --backup-vault-name <vault名> \
    --by-resource-type "DynamoDB" \ # 
    --by-created-before $(date -d "-180 days" +%Y-%m-%d) \ # Macだったら、「-d "-180 days"」の部分を「-v-180d」に変更
    --query "length(RecoveryPoints[].RecoveryPointArn)"

MacとLinuxでdateコマンドに差異があるため、環境に応じて該当箇所を変更してください。

【備忘録】LinuxとMacでのdateコマンドの差異について #Linux - Qiita

削除を行います。以下のスクリプトを用意して、実行します。

delete_recovery_point.sh

#!/bin/bash

vault_name=aft-controltower-backup-vault
recovery_point_arns=$(aws backup list-recovery-points-by-backup-vault \
    --backup-vault-name $vault_name \
    --by-resource-type "DynamoDB" \
    --by-created-before $(date -d "-180 days" +%Y-%m-%d) \ # Macだったら、「-d "-180 days"」の部分を「-v-180d」に変更
    --query "RecoveryPoints[].RecoveryPointArn" --output text

count=0

for recovery_point_arn in $recovery_point_arns; do
    COUNT=$((COUNT + 1))
    echo "Deleting recovery point $COUNT: $recovery_point_arn"
    aws backup delete-recovery-point --backup-vault-name $vault_name --recovery-point-arn $recovery_point_arn
done

実行結果は以下です。

$ ./delete_recovery_point.sh
Deleting recovery point 1: <AWS Backup復旧ポイントARN>
Deleting recovery point 2: <AWS Backup復旧ポイントARN>
Deleting recovery point 3: <AWS Backup復旧ポイントARN>

2.既存復旧ポイントの保持期間を変更する

保持期間が永続の復旧ポイントを対象とします。

以下のコマンドで、対象の復旧ポイントが何個あるか確認できます。

aws backup list-recovery-points-by-backup-vault \
  --backup-vault-name  <vault名> \
  --query "length(RecoveryPoints[?Lifecycle.DeleteAfterDays==null].RecoveryPointArn)"

保持期間の変更は以下のスクリプトを使用します。

update_lifecycle_recovery_point.sh

#!/bin/bash
vault_name=<vault名>
recovery_point_arns=$(aws backup list-recovery-points-by-backup-vault \
    --backup-vault-name $vault_name \
    --query "RecoveryPoints[?Lifecycle.DeleteAfterDays==null].RecoveryPointArn" \
    --output text)

count=0

for recovery_point_arn in $recovery_point_arns; do
    COUNT=$((COUNT + 1))
    echo "Update recovery point $COUNT: $recovery_point_arn"
    aws backup update-recovery-point-lifecycle --backup-vault-name $vault_name --recovery-point-arn $recovery_point_arn --lifecycle "DeleteAfterDays=180" > /dev/null
done

実行結果は以下です。

$ ./update_lifecycle_recovery_point.sh
Update recovery point lifecycle 1: <AWS Backup復旧ポイントARN>
Update recovery point lifecycle 2: <AWS Backup復旧ポイントARN>
Update recovery point lifecycle 3: <AWS Backup復旧ポイントARN>

おわりに

AWS CLIを使って、一括で復旧ポイントの削除や保持期間を変更する方法でした。

大量の復旧ポイントに対して、操作が必要な際に活用いただければと思います。

AWS ConfigでAWS Backup復旧ポイントを記録対象としていると、今回の操作時に操作対象の復旧ポイントが多い場合、それなりに課金が発生することがあるので気をつけてください。

以上、AWS事業本部の佐藤(@chari7311)でした。