💣
aws-nukeでクラウドを破壊しよう
terratestで残ったリソースを削除したい人向けかも。
aws-nuke概要
rebuy-de/aws-nuke(Public archive)のフォークプロジェクトです。
ドキュメントはここ
- awsリソースを削除するCLIで、デフォルトで
dry-run
に加え、configで保護対象のアカウントを設定可能 - サポートしているリソースが多い
- 今の所ちゃんとメンテされてる
-
--no-dry-run
を付けないと削除は実行されない - awsアカウントIDにエイリアスが必要
ユースケース
例えば、terratest採用していてDestroy
でこけた時にリソースが残ってしまいます。
それを自動で削除したい時とかに使えると思っています。
terratestの開発元であるgruntworkは、テスト内で確実に削除するのではなく残ってしまったリソースを定期削除しています。
gruntworkはcloud-nukeというツールを使っていますが、サポートしているリソースが少ないです。
config作る時にやったこと
# 削除は実行せず、削除候補と除外対象を出す
aws-nuke nuke --no-alias-check --no-prompt --config config.yaml
# 削除候補のみ見たい
aws-nuke nuke --no-alias-check --no-prompt --config config.yaml |grep 'would remove'
除外リソースの選定
基本的に全リソースを削除する方向でしたが、叩けないAPIがあるとタイムアウトまで待たされるのであらかじめ除外しました。
以下はAdministratorAccess
ポリシーで見れなかったリソースです。
resource-types:
excludes:
- BedrockEvaluationJob
- BedrockModelCustomizationJob
- CloudSearchDomain
- CodeStarProject
- ElasticTranscoderPreset
- ElasticTranscoderPipeline
- FMSNotificationChannel
- MachineLearningBranchPrediction
- MachineLearningDataSource
- MachineLearningEvaluation
- MachineLearningMLModel
- OpsWorksApp
- OpsWorksCMServer
- OpsWorksCMServerState
- OpsWorksCMBackup
- OpsWorksLayer
- OpsWorksUserProfile
- OpsWorksInstance
- OSCollection
- RoboMakerRobotApplication
- RoboMakerSimulationJob
- RoboMakerSimulationApplication
- RekognitionProject
- RekognitionDataset
- RedshiftServerlessNamespace
- RedshiftServerlessWorkgroup
- RedshiftServerlessSnapshot
- ServiceCatalogTagOption
- ServiceCatalogTagOptionPortfolioAttachment
- TranscribeLanguageModel
実行ロールの除外
全削除を期待しているので、自分自身のIAMロールも消してしまいます。
こんな感じで特定のリソースにフィルタをかけれます。
# イメージ
accounts:
012345:
filters:
IAMOpenIDConnectProvider:
- "hoge"
IAMRole:
- "hoge"
IAMRolePolicy:
- "hoge"
IAMRolePolicyAttachment:
- "hoge"
最終的なconfig
blocklist:
- 12345 # EDIT ME
accounts:
012345: # EDIT ME
filters:
IAMOpenIDConnectProvider:
- "hoge" # EDIT ME
IAMRole:
- "hoge" # EDIT ME
IAMRolePolicy:
- "hoge" # EDIT ME
IAMRolePolicyAttachment:
- "hoge" # EDIT ME
regions:
- all
resource-types:
excludes:
- BedrockEvaluationJob
- BedrockModelCustomizationJob
- CloudSearchDomain
- CodeStarProject
- ElasticTranscoderPreset
- ElasticTranscoderPipeline
- FMSNotificationChannel
- MachineLearningBranchPrediction
- MachineLearningDataSource
- MachineLearningEvaluation
- MachineLearningMLModel
- OpsWorksApp
- OpsWorksCMServer
- OpsWorksCMServerState
- OpsWorksCMBackup
- OpsWorksLayer
- OpsWorksUserProfile
- OpsWorksInstance
- OSCollection
- RoboMakerRobotApplication
- RoboMakerSimulationJob
- RoboMakerSimulationApplication
- RekognitionProject
- RekognitionDataset
- RedshiftServerlessNamespace
- RedshiftServerlessWorkgroup
- RedshiftServerlessSnapshot
- ServiceCatalogTagOption
- ServiceCatalogTagOptionPortfolioAttachment
- TranscribeLanguageModel
注意点
- terratest専用のアカウントがあると、aws-nukeのconfigを育てる必要がないです
- cloud-nukeを使うなら確認はあるものの、デフォルトで削除する挙動
Discussion