こんにちは。
クラウドソリューション事業部の和田です。
今回はAWS configを使ったときに発生した、「大量に出来た全リージョン分のS3バケットをポチッと一括で削除したい!しかも東京リージョン以外のやつだけ!」を実行できるスクリプトを作ってみたのでまとめてみました。
こちらの記事を参考に作成させていただきました。
[一撃]正規表現で一致したS3バケットを削除するシェルスクリプトを書いてみた
S3バケット削除の方法
S3バケットの削除はコンソール画面からポチポチする方法とCLIを使う方法の2つの手段があります。
コンソール画面からの削除は、対象バケットを一旦空にしてからでないと削除できません。またこれはCLIも同様ですが複数バケットを一括で削除することは出来ないため、一つ一つ空にしてから削除する必要があり非常に手間です。
一方CLIでの削除は一度に複数バケットを指定することは出来ないものの、バケット内諸々全部とバケット自体を削除してくれる--force オプションを使えば中身が空でなくてもバケットを削除できます。
東京リージョンだけ除外して一括削除
と言うことでCLIで今回は東京リージョンのバケットだけを除外して一括でバケット削除を行うスクリプトが以下です。
このスクリプトを削除したいAWSアカウントのcloudshellを使って設置し、実行すればOKです。
1#!/usr/bin/bash
2
3
4backet_list=`aws s3api list-buckets | jq -r ".Buckets[].Name"`
5
6echo "delete bucket check"
7
8#削除対象のバケット一覧表示
9echo "${backet_list}" | while read backet_name
10do
11 region_list=`aws s3api get-bucket-location --bucket $backet_name | jq -r '.LocationConstraint'`
12 if [ "${region_list}" != "ap-northeast-1" ]; then
13 echo "$backet_name : $region_list "
14 fi
15done
16
17#削除実施の確認
18while true; do
19 read -p "Do you want to delete this buckets? (y/n)" yn
20 case $yn in
21 [Yy]* ) break;;
22 [Nn]* ) exit 0;;
23 * ) echo "Please answer yes or no.";;
24 esac
25done
26
27#バケット削除
28echo "${backet_list}" | while read backet_name
29do
30 region_list=`aws s3api get-bucket-location --bucket $backet_name | jq -r '.LocationConstraint'`
31 if [ "${region_list}" != "ap-northeast-1" ]; then
32 aws s3 rb s3://$backet_name --force
33 fi
34done
35echo "done"
36
いきなり消すのはやはり怖いので、一度削除対象になるバケット名とそのリージョンの一覧を表示し、確認ができた上で削除するようにしています。
また、今回は東京リージョン以外を消すためだけに作ったので、スクリプトに直接リージョンを記載していますが、この辺りも少し変えれば実行タイミングでリージョンを指定したり、複数リージョンを除外させたりもできそうです。
最後に
1つや2つ消すだけならそこまでの手間ではないですが、今回は全リージョン分×子アカウント分あり、バケットを一つ一つ…となるとめちゃめちゃ手間がかかるので、やっぱりスクリプト作ると色々便利になるなぁと改めて感じました。
今回のケース以外にもリージョン単位でバケットを一括削除したい!と言う状況で参考になればと思います!
参考サイト
[一撃]正規表現で一致したS3バケットを削除するシェルスクリプトを書いてみた