AWSアカウントのクリーンアップに役立つcloud-nukeのご紹介
AWSアカウントのクリーンアップツールとして、aws-nukeが有名です。
同じ用途のツールとして、cloud-nukeというツールがあることを知りました。
今回はこちらのツールを試してみたいと思います。
cloud-nukeとは
AWSアカウント内のリソースを削除することができるツールです。
Terragruntで有名なGruntwork社が作っています。
名前からAWS以外のクラウドも対応していそうですが、現状はAWSのみです。
削除に対応しているリソースはGitHub上で確認可能です。主要なサービスはカバーしている印象です。
CLIツールとして利用する以外にも、プログラムからライブラリとして呼び出してリソースの検査やカウントすることもできます。
cloud-nukeのインストール
いくつか方法はありますが、パッケージマネージャー経由でインストールします。
brew install cloud-nuke
cloud-nukeはデフォルトではGruntworkにテレメトリデータを送信します。
データを送信したくない場合は、以下の環境変数をセットします。
export DISABLE_TELEMETRY=true
リソースタイプの確認
cloud-nukeはデフォルトで対応している全てのリソースを削除の対象とします。
実行に時間がかかるため、今回はリソースを指定して実行していきます。
対応しているリソースタイプは以下のコマンドで確認できます。
cloud-nuke inspect-aws --list-resource-types
# AWS Resource Types
# AWS Resource Types
• accessanalyzer
• acm
• acmpca
• ami
• apigateway
• apigatewayv2
• app-runner-service
• asg
• backup-vault
• cloudtrail
• cloudwatch-alarm
• cloudwatch-dashboard
• cloudwatch-loggroup
• codedeploy-application
• config-recorders
• config-rules
• data-sync-location
• data-sync-task
• dynamodb
• ebs
• ec2
# 省略
リソースの検査
サブコマンドinspect-awsを指定すると、リソースを破壊せずに検査することが可能です。
削除前に実行して、対象を確認するのに役立ちます。
任意の方法で、AWS認証情報をセットします。
export AWS_ACCESS_KEY_ID=hoge
export AWS_SECRET_ACCESS_KEY=hoge
export AWS_SESSION_TOKEN=hoge
--resource-typeで対象のリソースを絞ることができます。今回はec2を対象としています。
cloud-nuke inspect-aws --resource-type ec2
リージョン指定なしの場合は、全リージョンが対象となります。
削除可能なリソースが出力されました。
# AWS Resource Query Parameters
┌─────────────────────────────────────────────────────────────┐
| Query Parameter | Value |
| ----------------------------------------------------------- |
| Target Regions | 18 regions (too many to list all) |
| Target Resource Types | ec2 |
| List Unaliased KMS Keys | false |
└─────────────────────────────────────────────────────────────┘
INFO Found 1 ec2 resources in ap-northeast-1
INFO Done searching for resources
INFO Found total of 1 resources
# Found AWS Resources
┌────────────────────────────────────────────────────────────────┐
| Resource Type | Region | Identifier | Nukable |
| -------------------------------------------------------------- |
| ec2 | ap-northeast-1 | i-XXXXXXXXXXXXXXXXX | - |
└────────────────────────────────────────────────────────────────┘
i-XXXXXXXXXXXXXXXXXのEC2が検出されていますね。
リソースの削除
削除の実行には、awsサブコマンドを指定します。--dry-runオプションを付けることでDry Runを行っています。
--region指定は必須ではないです。
削除対象リソースのリージョンが前のコマンドで分かったので、実行時間短縮のためにリージョンを指定しています。
cloud-nuke aws --resource-type ec2 --dry-run --region ap-northeast-1
結果問題なければ、--dry-runオプションを外して実行します。
cloud-nuke aws --resource-type ec2 --region ap-northeast-1
削除の確認メッセージが出てきます。問題なければ、nukeと入力します。
WARNING THE NEXT STEPS ARE DESTRUCTIVE AND COMPLETELY IRREVERSIBLE, PROCEED WITH CAUTION!!!
Are you sure you want to nuke all listed resources? Enter 'nuke' to confirm (or exit with ^C) :
しばらく待つと、リソースの削除が完了したことが分かります。
Nuking batch of 1 ec2 resource(s) in ap-northeast-1 [1/1] ███████████ 100% | 36s
INFO No resources touched in this run.
削除対象リソースからの除外
オプションを使って、リソースタイプやリージョンレベルで削除対象からの除外が可能です。
--exclude-resource-type- リソースタイプ--exclude-region- リージョン
リソースレベルの除外には設定ファイルが必要になります。
以下のファイルを用意します。
EC2:
exclude:
names_regex:
- cloud-nuke-test
設定ファイルなしで、削除対象になることを確認します。
cloud-nuke aws --resource-type ec2 --region ap-northeast-1 --dry-run
削除対象にリソースが表示されています。
# AWS Resource Query Parameters
┌──────────────────────────────────────────┐
| Query Parameter | Value |
| ---------------------------------------- |
| Target Regions | ap-northeast-1 |
| Target Resource Types | ec2 |
| List Unaliased KMS Keys | false |
└──────────────────────────────────────────┘
INFO Found 1 ec2 resources in ap-northeast-1
INFO Done searching for resources
INFO Found total of 1 resources
# Found AWS Resources
┌────────────────────────────────────────────────────────────────┐
| Resource Type | Region | Identifier | Nukable |
| -------------------------------------------------------------- |
| ec2 | ap-northeast-1 | i-XXXXXXXXXXXXXXXXX | - |
└────────────────────────────────────────────────────────────────┘
次に設定ファイルありで試してみます。
cloud-nuke aws --resource-type ec2 --region ap-northeast-1 --config ec2-exclude-test.yaml --dry-run
指定したEC2が削除対象に表示されないことを確認できました。
# AWS Resource Query Parameters
┌──────────────────────────────────────────┐
| Query Parameter | Value |
| ---------------------------------------- |
| Target Regions | ap-northeast-1 |
| Target Resource Types | ec2 |
| List Unaliased KMS Keys | false |
└──────────────────────────────────────────┘
INFO Done searching for resources
INFO Found total of 0 resources
# Found AWS Resources
┌───────────────────────────────────────────────┐
| Resource Type | Region | Identifier | Nukable |
| --------------------------------------------- |
└───────────────────────────────────────────────┘
INFO Nothing to nuke, you're all good!
おわりに
cloud-nukeの基本的な機能について紹介しました。
この他にも、特定の期間より前に作成されたリソースの削除やタグを使った削除タイミングのコントロールなど便利そうな機能があります。
そのうち、aws-nukeとの比較もやってみたいと思います。
興味がある方はぜひ試してみてください。










