aws-nuke 触ってみた

はじめに

皆さんこんにちは、技術本部インフラDivでオンプレ・クラウドの構築、運用、保守、改善などの業務を担当している中嶋です。
最近、急に寒くなって秋を通り越して冬の到来を感じてビビりまくってます・・・
流行り病や喉の病気が流行っていて、体調不良の方が増えてるので皆さんも手洗いうがい、暖かくして過ごすを徹底しましょうね。

さて、本日ですが、AWSアカウントの管理にaws-nukeを利用できないか触ってみたのでそのお話となります。
この記事を読んでいただく方の対象としては、AWSアカウント管理者・クラウド管理者の方を対象としております。

背景

AWSアカウント解約時にリソースが残ったままになっていると、解約後もそのまま料金が請求されてしまう可能性があります。
参考:https://repost.aws/ja/knowledge-center/terminate-resources-account-closure

運用ルールとして、AWSアカウントの利用部署にも解約申請時にリソースの削除対応は行ってもらっていますが、インフラでも前月の請求情報とリソースを見比べて消し忘れが無いか1つ1つ目視で確認しております。 リソースが削除され、次月以降に請求が0円になったらAWSアカウント削除を行っています。

このインフラでの確認・削除対応が意外と時間と手間がかかってしまうため、自動化して作業効率を上げることを目的にリソースを一括で削除できるaws-nukeの検証を実施しました。

結論

  • aws-nukeを利用してAWSアカウント解約時のリソース一括削除が簡単にできることがわかった
  • 削除したくないリソースを指定することはできたが、削除したいリソースを指定して削除することはできなかった
    ※全てのリソースを指定した上で特定のリソースのみ指定しないことで実現は可能

実際にやったこと

aws-nukeのインストール・実行

ダウンロード

$ cd /tmp/
$ wget https://github.com/rebuy-de/aws-nuke/releases/download/v2.23.0/aws-nuke-v2.23.0-linux-amd64.tar.gz
https://github.com/rebuy-de/aws-nuke/releases/download/v2.23.0/aws-nuke-v2.23.0-linux-amd64.tar.gz

~~~省略~~~

Saving to: ‘aws-nuke-v2.23.0-linux-amd64.tar.gz’

100%[==========================================================================================>] 30,708,425  25.0MB/s   in 1.2s

 (25.0 MB/s) - ‘aws-nuke-v2.23.0-linux-amd64.tar.gz’ saved [30708425/30708425]

解凍&移動

$ tar -zxvf aws-nuke-v2.23.0-linux-amd64.tar.gz
aws-nuke-v2.23.0-linux-amd64

$ cd ~/work_dir
$ mkdir aws-nuke
$ cd aws-nuke
$ mv /tmp/aws-nuke-v2.23.0-linux-amd64 ./

configファイル作成

$ vim nuke-config.yml

nuke-config.yml

regions:
- global
- us-east-1
- us-east-2
- us-west-1
- us-west-2
- us-gov-west-1
- ca-central-1
- eu-central-1
- eu-north-1
- eu-west-1
- eu-west-2
- eu-south-1
- eu-west-3
- ap-northeast-1
- ap-northeast-2
- ap-northeast-3
- ap-southeast-1
- ap-southeast-2
- ap-south-1
- ap-east-1
- af-south-1
- cn-north-1
- cn-northwest-1
- me-south-1
- sa-east-1

# 消したくないAWSアカウント
account-blocklist:
- "yyyyyyyyyyyy"

# IAMユーザは消したくない
resource-types:
  excludes:
  - IAMUser

# 消したいAWSアカウント
accounts:
  "xxxxxxxxxxxx": {}

shell作成

vim aws-nuke.sh

aws-nuke.sh

#リソースの一括削除したいアカウントの指定
export AWS_PROFILE=xxx@yyy.zzz

./aws-nuke-v2.23.0-linux-amd64 -c ./nuke-config.yml

削除実行

エイリアス名が表示されるので、入力画面にエイリアス名を入力してエンターを押すと一括削除が実行される

$ ./aws-nuke.sh

aws-nuke version v2.23.0 - xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Do you really want to nuke the account with the ID xxxxxxxxxxxx and the alias 'alias-name'?
Do you want to continue? Enter account alias to continue.
> alias-name

大変だったこと、苦労したこと

インストールから実行までスムーズにできたので大変だったことはあまりないです。 使い方を記事にしてくれている方もいたので、設定などもすんなりできました。

困ったことといえば、インフラが使えるアカウントで、「リソースをすべて削除していいアカウント」というものが存在しなかったことです。
弊社の運用ルール上、検証用のアカウントを作成するには、時間がかかってしまうため、 今回は、全リソースを削除しても問題ない個人のアカウントを利用して検証を行いました。 aws-nukeは、基本的にすべてのリソースを削除になるため、全リソースを削除して良いアカウントが無い方は新しくアカウントを作成することをお勧めします・・!

また、課題という面でいうと、aws-nuke自体が一括でリソースの削除を実行することが目的のツールであるため、「削除したいリソースを指定して削除することはできない」ので、自動削除で利用している他のスクリプトに流用することができないことです。 これができるのであれば、過去に記事にもしたテスト環境の定期自動削除にも取り入れようと考えていたため、少し残念でした。
過去記事はこちら→https://blog.engineer.adways.net/entry/2021/12/03/120000

まとめ

今回はaws-nukeを触ってみた結果として簡単に一括削除をしたいという要望がかなえられるという話でした。 あまり意識せずに削除対応されている方はぜひaws-nukeの検討をしてみてはいかがでしょうか?