[小ネタ] aws-nukeのconfigファイルの重複箇所をFileter Presetsを使ってスッキリさせてみる

2022.09.26

「複数アカウントでaws-nuke使うとconfigファイルの重複箇所が多くて辛い」

aws-nuke複数アカウントで使うと、同じ箇所をfileterで除外したいことがあります。 例えば、全てのAWSアカウントで特定のIAMロールは削除したくないなど。

普通に書くと重複した記述になるのですが、presetsに書けばスッキリかけます。

rebuy-de/aws-nuke: Nuke a whole AWS account and delete all its resources.

小ネタですが、便利だと思ったのでブログにします。

やってみた

普通に書く

以下では、AWS CDKでcdk bootstrapを実行する際に自動で生成されるリソースを除外しています。

nuke-config.yml

regions:
  - ap-northeast-1
  - global
account-blocklist:
- 123456789012
accounts:
  "111122223333":
    filters:
      IAMRolePolicy:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
          value: "*"
      IAMRole:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
      IAMRolePolicyAttachment:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
      S3Bucket:
        - type: exact
          property: tag:aws:cloudformation:stack-name
          value: "CDKToolkit"
      CloudFormationStack:
        - type: exact
          property: Name
          value: "CDKToolkit"
      ECRRepository:
        - type: glob
          value: "*cdk-*-container-assets-*"
      SSMParameter:
        - type: glob
          property: tag:aws:cloudformation:stack-name
          value: "CDKToolkit"
  "222233334444"
    filters:
      IAMRolePolicy:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
          value: "*"
      IAMRole:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
      IAMRolePolicyAttachment:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
      S3Bucket:
        - type: exact
          property: tag:aws:cloudformation:stack-name
          value: "CDKToolkit"
      CloudFormationStack:
        - type: exact
          property: Name
          value: "CDKToolkit"
      ECRRepository:
        - type: glob
          value: "*cdk-*-container-assets-*"
      SSMParameter:
        - type: glob
          property: tag:aws:cloudformation:stack-name
          value: "CDKToolkit"

結構長いですね。 2アカウントならまだ見れるかもですが、10アカウントとかになったら恐ろしいですね。

Fileter Presetsで重複箇所をまとめる

presetsブロックに、重複箇所をまとめることができます。

regions:
  - ap-northeast-1
  - global
account-blocklist:
- 123456789012
accounts:
  "111122223333":
    presets:
      - "cdk"
  "222233334444"
    presets:
      - "cdk"
presets:
  cdk:
    filters:
      IAMRolePolicy:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
          value: "*"
      IAMRole:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
      IAMRolePolicyAttachment:
        - type: glob
          property: tag:role:aws-cdk:bootstrap-role
      S3Bucket:
        - type: exact
          property: tag:aws:cloudformation:stack-name
          value: "CDKToolkit"
      CloudFormationStack:
        - type: exact
          property: Name
          value: "CDKToolkit"
      ECRRepository:
        - type: glob
          value: "*cdk-*-container-assets-*"
      SSMParameter:
        - type: glob
          property: tag:aws:cloudformation:stack-name
          value: "CDKToolkit"

もちろん、presetsと通常のfiltersを併用することも可能です。

# 省略
  "111122223333"
    presets:
      - "cdk"
    filters:
      IAMRole:
      - "test"
# 省略

おわりに

aws-nukeのconfigファイルの小ネタでした。

configファイルが長くなって読みづらいなど感じた方は、試してみるといいかもしれません。

以上、AWS事業本部の佐藤(@chari7311)でした。