S3バケットをインタラクティブに簡単に削除する


はじめに

オブジェクトの入ったS3バケットをAWSCLIを使って、インタラクティブに削除する方法です。

S3の削除コマンドって、、

意外と検討段階だったり、AWSサービス使ってると自動的に作られて、あー、消したいなぁって思うことがあります。ありますよね。
で、さすがにGUIはめんどくさいので、CLIで打つんだけど、何が面倒くさいって、バケットの名前って一意にしないといけないので、とても長ったらしくて、コマンド打つのがめんどくさい。ていうかよく間違えて、そんなバケット無いよ、って言われてイライラする。

# バケットを探す
aws s3 ls

# バケットを消す
aws s3 rb aaaabbbbccccdddd-backet --force

あー、backetじゃなくて、bucketだったーみたいな。

解決法

インタラクティブに消せたらいいよね。
ということで、こちらを使わせて頂く。

下準備として、sentakuをインストール。

brew tap rcmdnk/rcmdnkpac
brew install sentaku

下記スクリプトを準備。
個人的にはこういうオレオレスクリプトをどこかにまとめて作っておいて、環境変数のPATHに追加しておくといつでも使えて便利なのでそれをオススメする。やっていることはシンプルで、s3のリストを取得して、選んだバケットをごそっと消しちゃうというもの。(消えるので使い方には注意を・・責任は負いません。)

rm_bucket
#!/bin/bash

STR=`aws s3 ls | sentaku -s $'\n'`
ARR=(${STR// / })
BUCKET=${ARR[2]}
BUCKET=`echo ${BUCKET} | tr -d '\n'`

if [ -z ${BUCKET} ]; then
    echo "Error: Cannot find bucket name."
    exit
fi

read -p "delete ${BUCKET}? (y/N): " yn
if [[ $yn = [yY] ]]; then
    echo "s3://${BUCKET}"
    aws s3 rb s3://${BUCKET} --force
else
    echo "Abort."
fi

使ってみる

こんなふうに使えます。

$ rm_bucket

実行すると、下記のようなS3バケットのリストが表示されます。

バケットを選択してエンターを押すと確認メッセージが表示されて、yを打てば、そのまま強制的に消せます。

delete example-example-2? (y/N): y
s3://example-example-2
remove_bucket: example-example-2

 まとめ

快適!快適だ!
でも--forceで消してるので、気をつけて使ってください。

(既存バケット名をIntelisenseとか出来るなら、そのほうが快適な気がする・・)