#概要
大分前にテストしていたAWS BackupでDefault vaultに大量のAMIとSnapshotがあり、
邪魔だったので消そうとしたところ、EC2のコンパネからはまとめて削除ができない。
AWS Backupのコンパネからだと1個ずつしか消せず、vaultごと削除しようとしたところ
Defaultのvaultは削除できないことが判明。
引用元:
[AWS Backupを使い始める前に覚えておきたいこと]
(https://qiita.com/hayao_k/items/a4f18d030e0e58063f64)
#解決策
50個程度のAMIとSnapshotなら1個1個手で消してもいいかもしれないが、どうせ同じ時間をかけるならまとめて削除できる方法を考えたい。
じゃあAWS CLIで一気にやってしまおう。
#環境
Amazon Linux2
aws-cli/1.16.300 Python/2.7.16 Linux/4.14.171-136.231.amzn2.x86_64 botocore/1.13.36
#組んだshell
#!/bin/bash
##一覧作成CLI用変数
LIST="list-recovery-points-by-backup-vault --backup-vault-name"
##AWSBackupにやらせたいCLI用変数
CMD="delete-recovery-point --backup-vault-name"
##引数省略用
RPA="--recovery-point-arn"
##引っ張ってくる値
VAL="RecoveryPointArn"
##VAULTからリカバリーポイント一覧を取得&整理
aws backup $LIST $1 | grep $VAL | sed -e "s/[\"]//g" | awk '{print $2}' | awk -F ',' '{print $1}' | cat > vault.txt
##出力したファイルから一行ずつコマンド処理
while read line
do
aws backup $CMD $1 $RPA $line
done < ./vault.txt
##立つ鳥跡を濁さず
rm -f vault.txt
#結果
. budel.sh <vault名>で叩いてあげると、そのvault内にあるリカバリーポイント(EC2ならAMIとSnapshot)が全て消える。
※間違って他のvaultで削除しないように
CMDをlist-recovery-points-by-resource --resource-arnにして、
VALをResourceArnとかにすると、ResourceArn毎のリカバリーポイントの値を
リストで出してくれるので、そっちから試した方が良い(自分はそうした)
まだ全部見てないけど、CLIによっては他にもっと便利な動きしてくれるかな。
AWS Backup CLI一覧
#悩み事(解決_20200319)
あと、vault一覧取得のところでどうしても以下じゃないと出力が出来なくて、
awkを二回挟んでるんだけど、どうにかならんものか。
awk '{print $2}' | awk -F ',' '{print $1}'
こうすると何も出力されない。
awk -F ',' '{print $2}'
有志により、grep後のsedを以下に変更すると良いとのこと。
sed -r "s/\"|,//g
さらに出力したものを一回一回ファイルにしていたのを、変数に入れて処理するように変更。
(変数lines=の後に半角スペースが入っていると上手く動かず若干ハマる)
#修正したshell
#!/bin/bash
##一覧作成用変数
LIST="list-recovery-points-by-backup-vault --backup-vault-name"
##AWSBackupにやらせたいこと用変数
CMD="delete-recovery-point --backup-vault-name"
##引数省略用
RPA="--recovery-point-arn"
##引っ張ってくる値
VAL="RecoveryPointArn"
##VAULT一覧を取得&整理し、変数に格納
lines=`aws backup $LIST $1 | grep $VAL | sed -r "s/\"|,//g" | awk '{print $2}'`
##出力した結果から一行ずつコマンド処理
for line in $lines
do
aws backup $CMD $1 $RPA $line
done
very smart!!