
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との比較もやってみたいと思います。
興味がある方はぜひ試してみてください。