AWS-nukeによるリソース一括削除手順(フォーク後版)

## aws-nukeとは
aws-nukeは、AWSアカウント内のリソースを一括で削除するオープンソースツールです。
AWSの環境をクリーンアップする際に役立ちます。
名前の「Nuke（核）」が示すように、強力で破壊的なツールなので慎重な扱いが必要です

今回使用するレポジトリ
https://github.com/ekristen/aws-nuke
2025年4月時点の最新版であるv3.51.1で確認していきます。


## 利用用途
aws-nukeは以下の用途で主に活用していきます。
- テスト環境のクリーンアップ
開発や検証で作成したリソース（EC2、S3、IAMロールなど）が不要になり、まとめて削除したいとき。放置するとコストが発生するので、定期的な整理に便利です。

- アカウント閉鎖前の準備
AWSアカウントを解約する際、リソースが残っていると料金が発生し続ける可能性があります。AWS Nukeでリソースを全削除することで、安心してアカウントを閉鎖できます。

- コスト削減
使っていないリソースが原因で月々のAWS料金が増えることがあります。AWS Nukeを使って不要なリソースを一掃し、コストを最適化できます。

## 注意点
rebuy.deにより開発されていたaws-nuke のリポジトリは2024年10月15日にアーカイブされています。
**旧レポジトリ**
https://github.com/rebuy-de/aws-nuke
こちらのレポジトリからaws-nukeを利用している場合、今後メンテナンスは行われないため、注意が必要です。
アーカイブの背景についてはこちらの記事に詳しく記載がありますのでリンクを記載します。</br>
https://qiita.com/hayao_k/items/5c9e7b6412f870e2cf33


本記事では、フォーク先であるekristen/aws-nukeのレポジトリを使用した新規設定を行います。
主要な機能はフォーク前後で変わりないですが、バージョンによって機能差異があります。

## 事前準備

### アカウントエイリアスの設定
事前準備としてAWSアカウントにアカウントエイリアスを設定する必要があります。

`aws iam create-account-alias --account-alias {エイリアス名}`

## 使用手順
それでは本題に入っていきます。

### 1.aws-nukeのダウンロード
CloudShellから以下のコマンドを実行し、aws-nukeのダウンロードと解凍を行います。
バージョンが異なる場合は必要に応じてバージョンを読み替えてください。

```
wget https://github.com/ekristen/aws-nuke/releases/download/v3.51.1/aws-nuke-v3.51.1-linux-amd64.tar.gz

tar -xzvf aws-nuke-v3.51.1-linux-amd64.tar.gz
```

#### 最新バージョンの確認方法
aws-nukeの最新版は以下で確認できます。
最新バージョンが一番上にありますが、特定バージョンを使用したい場合は必要に応じて対象のパッケージをダウンロードしてください。
https://github.com/ekristen/aws-nuke/releases
こちらから対象のバージョンを選択可能です。

### 2.設定ファイルの作成
AWS Nukeはnuke-config.ymlという設定ファイルで動作を制御します。
そのため、nuke-config.ymlを作成します。

```
vi nuke-config.yml
```
例
今回はソウルリージョン(ap-northeast-2)で動作確認を行います。


```yaml:nuke-config.yml
blocklist:
  1234567890

regions:
  ap-northeast-2
accounts:
  XXXXXX: {}
```

CloudShellへのコピペは:set pasteでやりやすくなります。

検証用のため最小の記載で行っています。
nuke-config.ymlでの必要な設定項目派に以下に記載があります。
https://github.com/ekristen/aws-nuke/blob/main/docs/config.md
今回は使用中のアカウントのため削除範囲を絞っていますが、特定のリソースを除外することやブロックワードの設定なども行えます。
accountsには自分のアカウントIDを記載します。

### 3.ドライランで確認
まず、削除対象のリソースを確認するためにドライランを実行します。
オプション指定なしで実行した場合はドライランで実行され、ドライランで実行しない場合は明示的にオプションを追加が必要です。
```
./aws-nuke nuke -c nuke-config.yml
```
アカウントエイリアスの確認が行われるため、アカウントエイリアスを入力後スキャンが開始されます。
```
Do you really want to nuke the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example

```
このコマンドは削除を実行せず、対象リソースを一覧表示。削除予定のリソースに「would remove」と表示されるので、意図しない削除がないか確認するものです。



リソースが多いと確認が大変なため以下のように結果をテキスト形式で出力させて、CloudShellからresult.txtをダウンロードして確認などすると想定外のリソース削除が起きにくくなると思います。

```
./aws-nuke nuke -c nuke-config.yml --force > result.txt
```

今回は動作確認用のtest-vpcリソースを作成しているため、確認用のリソースがスキャンされていることを確認します。

```
ap-northeast-2 - EC2VPC - vpc-xxxxx - [ID: "vpc-xxxxx", IsDefault: "false", OwnerID: "xxxxxxxxx", tag:Name: "test-vpc"] - would remove
```


### 4.実際の削除
問題なければ、以下のコマンドでリソースを削除します。

```
./aws-nuke nuke -c nuke-config.yml --no-dry-run
```
処理の流れとしては最初にドライランと同様にリソースのスキャン、その後、再度アカウントエイリアスを入力したのちに削除が実行されます。
aws-nuke は、指定されたリソースがすべて削除されるか、エラーのあるリソースだけが残るまで、すべてのリソースの削除を再試行します。

```
ap-northeast-2 - EC2VPC - vpc-xxxxx- [ID: "vpc-xxxxx", IsDefault: "false", OwnerID: "xxxxxxxxx", tag:Name: "test-vpc"] - removed
```
確認用のリソースも削除されたことが確認できました。


### まとめ

以上、aws-nukeの使い方でした。
単発での実行の流れを記載しました。
フォーク前後で大きな手順の変更はありませんが、フォーク後の記事はまだ少なかったので今後、利用を考えている方の参考になれば幸いです。