はじめに
DX技術本部の yu-yama です。
AWSで sandbox
アカウントを作り検証を続けていると、知らず知らずのうちにセキュリティグループ、スナップショット、IAMロールなどが増えていて心をざわざわさせられませんか。
いつかは整理したいと思いつつ先延ばしに...
そんなあなたに aws-nuke
。リソースを消せるだけ消して心をスッキリ軽くしてみましょう。
aws-nuke とは
AWSのリソースを削除するツールで、
機能として
- リージョンの指定
- 削除するリソースタイプの指定
- 削除しないリソースタイプの指定(除外指定)
- リソースのフィルタリング
- 削除するリソースタイプのうち、特定のリソースのみ削除させたくない場合などに使用
があります。
早速 nuke
してみましょう!
事前準備
削除されるアカウントのAWSクレデンシャル1
削除されるアカウントにエイリアスを設定
インストール
GitHubから使いたい環境にあった最新リリースをダウンロードします。
今回は削除されるアカウントとは別で立てたEC2(Amazon Linux)からaws-nuke-v2.15.0-linux-amd64.tar.gz
のバイナリを使用して実行します。
バイナリダウンロード
$ wget https://github.com/rebuy-de/aws-nuke/releases/download/v2.15.0/aws-nuke-v2.15.0-linux-amd64.tar.gz
解凍
$ tar -zxvf aws-nuke-v2.15.0-linux-amd64.tar.gz
確認
$ ./aws-nuke-v2.15.0-linux-amd64 -h
設定ファイル作成
aws-nuke
の設定ファイルを作成します。
regions:
- eu-west-1 # 消したいリージョン
- global # グローバルサービスも消したい場合
account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま
accounts:
"000000000000": {} # 消したいAWSアカウント
今回はバージニア北部(us-east-1)のリソースを削除してみます。IAMUserはglobalリソースのため、バージニア北部リージョンのみ指定だと消えないですが念のため除外リソースとして指定します。2
regions:
- us-east-1 # 消したいリージョン
account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま
resource-types:
# IAMユーザは消したくない
excludes:
- IAMUser
accounts:
"123456789012": {} # 消したいAWSアカウント
dry-run
削除されるリソースを確認します。
$ ./aws-nuke-v2.15.0-linux-amd64 -c ./nuke-config.yml --access-key-id <access-key> --secret-access-key <secret-key>
コマンド実行後、削除対象のアカウントが本当に正しいかアカウントエイリアスの入力を求められるので入力します。
no-dry-run
削除されるリソースを確認し、よければオプションno-dry-run
を付けて実行します。
$ ./aws-nuke-v2.15.0-linux-amd64 -c ./nuke-config.yml --access-key-id <access-key> --secret-access-key <secret-key> --no-dry-run
コマンド実行後、削除対象のアカウントが本当に正しいかアカウントエイリアスの入力を求められるので入力します。**本当に?本当にいいの?**と2回聞かれます。
感想
まあまあスッキリ。
設定ファイルを以下のようにすると
regions:
- global # globalを指定
account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま
resource-types:
targets:
- IAMRole
accounts:
"123456789012": {} # 消したいAWSアカウント
IAMRoleを削除できるのですが、事前にIAMロールからポリシーをデタッチしておかないと失敗します。この部分は手間なので惜しいところ。
また、IAMユーザ以外は全て消すぞと指定すると
regions:
- global # globalを指定
account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま
resource-types:
# IAMユーザは消したくない
excludes:
- IAMUser
accounts:
"123456789012": {} # 消したいAWSアカウント
IAMユーザーは残るのですが、中の認証情報やIAMグループの情報も全て消えてしまう3ので注意しましょう。
使い方としてはリージョン指定で定期的に実行すると、いい感じで消してくれてスッキリできると思います。
では。
参考リンク