aws-nuke - AWSアカウント全体を削除し、そのすべてのリソースを削除します。

(Nuke a whole AWS account and delete all its resources.)

Created at: 2016-11-27 22:02:22
Language: Go
License: MIT

aws-nuke

ビルドステータス ライセンス GitHubリリース DockerHub

AWSアカウントからすべてのリソースを削除します。

開発ステータス aws-nukeは安定していますが、すべてのAWSリソースがカバーされているわけではない可能性があります。不足しているリソースを追加してプルリクエストを作成するか、問題を作成することをお勧めします。

注意!

aws-nukeは非常に破壊的なツールであるため、使用する際には十分に注意する必要があることに注意してください。そうしないと、本番データが削除される可能性があります。

すべてのリソースを失う余裕がないAWSアカウントでは、このアプリケーションを実行しないことを強くお勧めします。

事故の爆発半径を減らすために、いくつかの安全上の注意があります:

  1. デフォルトでは、 aws-nukeはすべてのnukeableリソースのみを一覧表示します。
    --no-dry-run
    実際にリソースを削除するには、追加する必要があります 。
  2. aws-nukeは、アカウントエイリアスを入力して削除を確認するように2回要求します。1回目は開始直後で、2回目はすべてのnukeableリソースをリストした後です。
  3. 人間が喜んで無視する可能性のあるアカウントIDを表示するだけでは、アカウントのアカウントエイリアスを実際に設定する必要があり ます。それ以外の場合、aws-nukeは中止されます。
  4. アカウントエイリアスに文字列を含めることはできません
    prod
    。この文字列はハードコーディングされているため、実際のすべての本番アカウントに追加することをお勧めします(例
    mycompany-production-ecr
    )。
  5. 構成ファイルには、ブロックリストフィールドが含まれています。削除するアカウントのアカウントIDがこのブロックリストに含まれている場合、aws-nukeは中止されます。このブロックリストにすべての本番アカウントを追加することをお勧めします。
  6. ブロックリスト機能を無視しないようにするには、ブロックリストに少なくとも1つのアカウントIDが含まれている必要があります。
  7. 構成ファイルには、アカウント固有の設定(フィルターなど)が含まれています。削除するアカウントは、そこに明示的にリストされている必要があります。
  8. ランダムなアカウントを誤って削除しないようにするには、構成ファイルを指定する必要があります。構成ファイルを1つだけにして、それを中央リポジトリに追加することをお勧めします。このようにして、アカウントのブロックリストを管理し、最新の状態に保つことがはるかに簡単になります。

安全手順を改善するためのアイデアがあれば、遠慮なく問題を作成してください。

ユースケース

  • Jenkinsを使用してTerraformコードをテストしています。開発中にTerraformの実行が失敗し、アカウントが台無しになることがあります。aws-nukeを使用すると、失敗したアカウントをクリーンアップするだけで、次のビルドで再利用できます。
  • プラットフォーム開発者は独自のAWSアカウントを持っており、テスト目的で独自のKubernetesクラスターを作成できます。aws-nukeを使用すると、1日の終わりにこれらのアカウントをクリーンアップして、コストを低く抑えることが非常に簡単です。

リリース

通常、十分な変更が加えられ、しばらくの間テストされたら、新しいバージョンをリリースします。

Linux、macOS、Windowsのバイナリは リリースページにありますが、コンテナ化されたバージョンはquay.io/rebuy/aws-nukedocker.io/rebuy/aws-nukeでも提供されています。どちらも複数のアーキテクチャ(amd64、arm64、armv7)で使用できます。

使用法

最初に、 aws-nukeの設定ファイルを作成する必要があります。これは最小限のものです:

regions:
- eu-west-1
- global

account-blocklist:
- "999999999999" # production

accounts:
  "000000000000": {} # aws-nuke-example

この設定で、aws-nukeを実行できます:

$ aws-nuke -c config/nuke-config.yml --profile aws-nuke-example
aws-nuke version v1.0.39.gc2f318f - Fri Jul 28 16:26:41 CEST 2017 - c2f318f37b7d2dec0e646da3d4d05ab5296d5bce

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

eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - would remove
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - would remove
eu-west-1 - EC2KeyPair - 'test' - would remove
eu-west-1 - EC2NetworkACL - 'acl-6482a303' - cannot delete default VPC
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - would remove
eu-west-1 - EC2SecurityGroup - 'sg-220e945a' - cannot delete group 'default'
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - would remove
eu-west-1 - EC2Subnet - 'subnet-154d844e' - would remove
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - would remove
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - would remove
eu-west-1 - IAMUserAccessKey - 'my-user -> ABCDEFGHIJKLMNOPQRST' - would remove
eu-west-1 - IAMUserPolicyAttachment - 'my-user -> AdministratorAccess' - [UserName: "my-user", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
eu-west-1 - IAMUser - 'my-user' - would remove
Scan complete: 13 total, 11 nukeable, 2 filtered.

Would delete these resources. Provide --no-dry-run to actually destroy resources.

ご覧のとおり、aws-nukeは、見つかったすべてのリソースと出口のみを一覧表示します。これは、

--no-dry-run
フラグが欠落しているためです。また、管理者を削除したい。このユーザーを使用してアカウントにアクセスするため、これは行いません。したがって、このユーザーを無視するように構成を拡張する必要があります。

regions:
- eu-west-1

account-blocklist:
- "999999999999" # production

accounts:
  "000000000000": # aws-nuke-example
    filters:
      IAMUser:
      - "my-user"
      IAMUserPolicyAttachment:
      - "my-user -> AdministratorAccess"
      IAMUserAccessKey:
      - "my-user -> ABCDEFGHIJKLMNOPQRST"
$ aws-nuke -c config/nuke-config.yml --profile aws-nuke-example --no-dry-run
aws-nuke version v1.0.39.gc2f318f - Fri Jul 28 16:26:41 CEST 2017 - c2f318f37b7d2dec0e646da3d4d05ab5296d5bce

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

eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - would remove
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - would remove
eu-west-1 - EC2KeyPair - 'test' - would remove
eu-west-1 - EC2NetworkACL - 'acl-6482a303' - cannot delete default VPC
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - would remove
eu-west-1 - EC2SecurityGroup - 'sg-220e945a' - cannot delete group 'default'
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - would remove
eu-west-1 - EC2Subnet - 'subnet-154d844e' - would remove
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - would remove
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - would remove
eu-west-1 - IAMUserAccessKey - 'my-user -> ABCDEFGHIJKLMNOPQRST' - filtered by config
eu-west-1 - IAMUserPolicyAttachment - 'my-user -> AdministratorAccess' - [UserName: "my-user", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
eu-west-1 - IAMUser - 'my-user' - filtered by config
Scan complete: 13 total, 8 nukeable, 5 filtered.

Do you really want to nuke these resources on 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

eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - failed
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - triggered remove
eu-west-1 - EC2KeyPair - 'test' - triggered remove
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - failed
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - failed
eu-west-1 - EC2Subnet - 'subnet-154d844e' - failed
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - failed
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - failed
eu-west-1 - S3Object - 's3://rebuy-terraform-state-138758637120/run-terraform.lock' - triggered remove

Removal requested: 2 waiting, 6 failed, 5 skipped, 0 finished

eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - failed
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - waiting
eu-west-1 - EC2KeyPair - 'test' - removed
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - failed
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - failed
eu-west-1 - EC2Subnet - 'subnet-154d844e' - failed
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - failed
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - failed

Removal requested: 1 waiting, 6 failed, 5 skipped, 1 finished

--- truncating long output ---

ご覧のとおり、 aws-nukeは、フィルタリングされていないすべてのリソースを、それらの間の依存関係を気にせずに削除しようとします。これにより、無視できるAPIエラーが発生します。これらのエラーが引き続き表示される場合は、 aws-nukeの実行の最後に表示されます。

aws-nukeは、指定されたすべてのリソースが削除されるまで、またはエラーのあるリソースのみが残るまで、すべてのリソースの削除を再試行します。

AWSクレデンシャル

aws-nukeを認​​証する方法は2つあります。静的な資格情報とプロファイルがあります。後者は、共有クレデンシャルファイル(つまり

~/.aws/credentials
)または共有構成ファイル(つまり)で構成できます
~/.aws/config

静的クレデンシャルを使用するには、コマンドラインフラグ

--access-key-id
--secret-access-key
が必要です。フラグ
--session-token
は一時的なセッションにのみ必要です。

共有プロファイルを使用するには、コマンドラインフラグ

--profile
が必要です。プロファイルは、共有クレデンシャルファイル または引き受けの役割を持つ共有構成ファイルの静的クレデンシャルで定義する必要があります。

カスタムAWSエンドポイントの使用

デフォルト以外のAWSエンドポイントに対して実行するようにaws-nukeを設定することができます。たとえば、S3アプライアンスやStratoscaleクラスターなどのローカルエンドポイントを指す統合テストに使用できます。

カスタムエンドポイントを使用するようにaws-nukeを設定するには、次の例に示すように設定ディレクティブを追加します。

regions:
- demo10

# inspired by https://www.terraform.io/docs/providers/aws/guides/custom-service-endpoints.html
endpoints:
- region: demo10
  tls_insecure_skip_verify: true
  services:
  - service: ec2
    url: https://10.16.145.115/api/v2/aws/ec2
  - service: s3
    url: https://10.16.145.115:1060
  - service: rds
    url: https://10.16.145.115/api/v2/aws/rds
  - service: elbv2
    url: https://10.16.145.115/api/v2/aws/elbv2
  - service: efs
    url: https://10.16.145.115/api/v2/aws/efs
  - service: emr
    url: https://10.16.145.115/api/v2/aws/emr
  - service: autoscaling
    url: https://10.16.145.115/api/v2/aws/autoscaling
  - service: cloudwatch
    url: https://10.16.145.115/api/v2/aws/cloudwatch
  - service: sns
    url: https://10.16.145.115/api/v2/aws/sns
  - service: iam
    url: https://10.16.145.115/api/v2/aws/iam
  - service: acm
    url: https://10.16.145.115/api/v2/aws/acm

account-blocklist:
- "account-id-of-custom-region-prod" # production

accounts:
  "account-id-of-custom-region-demo10":

これは、次のように使用できます。

$ aws-nuke -c config/my.yaml  --access-key-id <access-key> --secret-access-key <secret-key> --default-region demo10
aws-nuke version v2.11.0.2.gf0ad3ac.dirty - Tue Nov 26 19:15:12 IST 2019 - f0ad3aca55eb66b93b88ce2375f8ad06a7ca856f

Do you really want to nuke the account with the ID account-id-of-custom-region-demo10 and the alias 'account-id-of-custom-region-demo10'?
Do you want to continue? Enter account alias to continue.
> account-id-of-custom-region-demo10

demo10 - EC2Volume - vol-099aa1bb08454fd5bc3499897f175fd8 - [tag:Name: "volume_of_5559b38e-0a56-4078-9a6f-eb446c21cadf"] - would remove
demo10 - EC2Volume - vol-11e9b09c71924354bcb4ee77e547e7db - [tag:Name: "volume_of_e4f8c806-0235-4578-8c08-dce45d4c2952"] - would remove
demo10 - EC2Volume - vol-1a10cb3f3119451997422c435abf4275 - [tag:Name: "volume-dd2e4c4a"] - would remove
demo10 - EC2Volume - vol-1a2e649df1ef449686ef8771a078bb4e - [tag:Name: "web-server-5"] - would remove
demo10 - EC2Volume - vol-481d09bbeb334ec481c12beee6f3012e - [tag:Name: "volume_of_15b606ce-9dcd-4573-b7b1-4329bc236726"] - would remove
demo10 - EC2Volume - vol-48f6bd2bebb945848b029c80b0f2de02 - [tag:Name: "Data volume for 555e9f8a"] - would remove
demo10 - EC2Volume - vol-49f0762d84f0439da805d11b6abc1fee - [tag:Name: "Data volume for acb7f3a5"] - would remove
demo10 - EC2Volume - vol-4c34656f823542b2837ac4eaff64762b - [tag:Name: "wpdb"] - would remove
demo10 - EC2Volume - vol-875f091078134fee8d1fe3b1156a4fce - [tag:Name: "volume-f1a7c95f"] - would remove
demo10 - EC2Volume - vol-8776a0d5bd4e4aefadfa8038425edb20 - [tag:Name: "web-server-6"] - would remove
demo10 - EC2Volume - vol-8ed468bfab0b42c3bc617479b8f33600 - [tag:Name: "web-server-3"] - would remove
demo10 - EC2Volume - vol-94e0370b6ab54f03822095d74b7934b2 - [tag:Name: "web-server-2"] - would remove
demo10 - EC2Volume - vol-9ece34dfa7f64dd583ab903a1273340c - [tag:Name: "volume-4ccafc2e"] - would remove
demo10 - EC2Volume - vol-a3fb3e8800c94452aff2fcec7f06c26b - [tag:Name: "web-server-0"] - would remove
demo10 - EC2Volume - vol-a53954e17cb749a283d030f26bbaf200 - [tag:Name: "volume-5484e330"] - would remove
demo10 - EC2Volume - vol-a7afe64f4d0f4965a6703cc0cfab2ba4 - [tag:Name: "Data volume for f1a7c95f"] - would remove
demo10 - EC2Volume - vol-d0bc3f2c887f4072a9fda0b8915d94c1 - [tag:Name: "physical_volume_of_39c29f53-eac4-4f02-9781-90512cc7c563"] - would remove
demo10 - EC2Volume - vol-d1f066d8dac54ae59d087d7e9947e8a9 - [tag:Name: "Data volume for 4ccafc2e"] - would remove
demo10 - EC2Volume - vol-d9adb3f084cd4d588baa08690349b1f9 - [tag:Name: "volume_of_84854c9b-98aa-4f5b-926a-38b3398c3ad2"] - would remove
demo10 - EC2Volume - vol-db42e471b19f42b7835442545214bc1a - [tag:Name: "lb-tf-lb-20191126090616258000000002"] - would remove
demo10 - EC2Volume - vol-db80932fb47243efa67c9dd34223c647 - [tag:Name: "web-server-5"] - would remove
demo10 - EC2Volume - vol-dbea1d1083654d30a43366807a125aed - [tag:Name: "volume-555e9f8a"] - would remove

--- truncating long output ---

削除するリソースタイプの指定

aws-nukeは多くのリソースを削除し、さらに追加される可能性があります リリース。最終的には、すべてのリソースが削除されるはずです。あなたはしたいかもしれない 削除するリソースを制限します。これを構成する方法は複数あります。

1つの方法は、すでに説明したフィルターです。これは知っている必要があります 各リソースの識別子。リソース全体を防ぐことも可能です タイプ(例

S3Bucket
)が2つのメソッドで削除されないようにします。

  • この
    --target
    フラグは、指定されたリソースタイプへのnukingを制限します。
  • フラグは、指定されたリソースタイプの
    --exclude
    ナッキングを防ぎます。

次のように、構成ファイルでリソースタイプを構成することもできます。 これらの例:

---
regions:
  - "eu-west-1"
account-blocklist:
- 1234567890

resource-types:
  # only nuke these three resources
  targets:
  - S3Object
  - S3Bucket
  - IAMRole

accounts:
  555133742: {}
---
regions:
  - "eu-west-1"
account-blocklist:
- 1234567890

resource-types:
  # don't nuke IAM users
  excludes:
  - IAMUser

accounts:
  555133742: {}

ターゲットが複数の場所で指定されている場合(CLIやアカウント固有など)、 リソースタイプはすべての場所で指定する必要があります。言い換えれば、それぞれ 構成は前のものを制限します。

除外が使用されている場合、そのすべてのリソースタイプは削除されません。

ヒント:次のコマンドを使用すると、使用可能なすべてのリソースタイプを確認できます。

aws-nuke resource-types

AWS CloudControlAPIサポート

この機能はまだリリースされておらず、おそらくの一部です

v2.18

aws-nukeは、AWS CloudControlAPIを介したリソースの削除をサポートしています。いつaws-nukeを 実行すると、手動で管理されている CloudControlを介したリソース。

CloudControlでサポートされているリソースのサブセットのみが削除されます すでに実装されているリソースがある可能性があるため、自動的に それらも追加すると、ユーザー構成の既存のフィルターがクラウドとしてバイパスされます コントロールには、別の命名スキームと異なるプロパティのセットがあります。さらに、 特別な処理を必要とするクラウドコントロールリソースがいくつかありますが、そうではありませんまだaws-nuke によってサポートされています。

自動的にサポートされるCloudControlリソースのサブセットは制限付きで、 aws-nukeを設定して追加の試行を行うこと ができます 資源。設定ファイル経由のコマンドラインフラグ経由のいずれか。

構成ファイルの場合、リソースをに追加する必要があります リスト

resource-types.cloud-control

resource-types:
  cloud-control:
  - AWS::EC2::TransitGateway
  - AWS::EC2::VPC

コマンドラインを使用する場合は、

--cloud-control
フラグを追加する必要があります 追加するリソースごとに:

aws-nuke \
    -c nuke-config.yaml \
    --cloud-control AWS::EC2::TransitGateway \
    --cloud-control AWS::EC2::VPC

注: Cloud Controlでサポートされているリソースがいくつかあり、すでにaws-nuke によってネイティブに実装されています。クラウドを使用するように構成する場合 これらのリソースを制御し、ネイティブに実装されたコードを実行しません このリソースのために。たとえば、

--cloud-control AWS::EC2::VPC
それは
EC2VPC
リソース を使用しないでください。

機能フラグ

かなり意見が分かれているいくつかの機能があります。それらを機能させるために 皆さん、aws-nukeには、これらの機能を手動で有効にするためのフラグがあります。これらはすることができます 次のように、構成のルートレベルで構成されます。

---
feature-flags:
  disable-deletion-protection:
    RDSInstance: true
    EC2Instance: true
    CloudformationStack: true
  force-delete-lightsail-addons: true

フィルタリングリソース

現在のユーザーを削除しないために重要なこれをフィルタリングすることが可能です たとえば、グローバルに共有されているS3バケットなどのリソースの場合 名前空間であり、再作成が難しい場合があります。現在、フィルタリングはに基づいています リソース識別子。識別子はの最初のステップとして印刷されます aws-nuke

i-01b489457a60298dd
EC2インスタンスなど)。

注:フィルターを使用している場合でも、AWSアカウントでaws-nukeを実行しないでください。 すべてのリソースを失うわけにはいきません。間違いを犯しやすい フィルタ構成。また、aws-nukeは継続的に開発されているため、 どんなに注意深くレビューしても、常に新しいバグを導入する可能性があります 新しいコード。

フィルタはアカウント固有の構成の一部であり、次のようにグループ化されます。 リソースタイプ。これは、すべてのリソースを削除する構成の例ですが、 アクセス許可と2つの

admin
アクセスキーを持つユーザー:

---
regions:
- global
- eu-west-1

account-blocklist:
- 1234567890

accounts:
  0987654321:
    filters:
      IAMUser:
      - "admin"
      IAMUserPolicyAttachment:
      - "admin -> AdministratorAccess"
      IAMUserAccessKey:
      - "admin -> AKSDAFRETERSDF"
      - "admin -> AFGDSGRTEWSFEY"

リソース識別子がのフィルターのいずれかと完全に一致するリソース リストはスキップされます。これらは、で「構成によってフィルタリングされた」とマークされます aws-nukerun

フィルタのプロパティ

一部のリソースは、プロパティによるフィルタリングをサポートしています。リソースがこれらをサポートする場合 プロパティは、次の例のように出力に一覧表示されます。

global - IAMUserPolicyAttachment - 'admin -> AdministratorAccess' - [RoleName: "admin", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove

プロパティを使用するには、プレーン文字列の代わりにオブジェクト

properties
を 指定する必要があります。
value

これらのタイプは、構成を簡素化するために使用できます。たとえば、 1人のユーザーのすべてのアクセスキーを保護することが可能:

IAMUserAccessKey:
- property: UserName
  value: "admin"

フィルタタイプ

完全一致以外の追加の比較タイプもあります。

  • exact
    –識別子は指定された文字列と完全に一致する必要があります。これがデフォルトです。
  • contains
    –識別子には指定された文字列が含まれている必要があります。
  • glob
    –識別子は指定されたグロブと一致する必要があります パターン。これは、 文字列には、やのようなワイルドカードが含まれる場合が
    *
    あり
    ?
    ます。グロブは ファイルパス用に設計されているため、ワイルドカードはディレクトリと一致しません セパレーター(
    /
    )。グロブパターンの詳細はライブラリにあります ドキュメント
  • regex
    –識別子は、指定された正規表現と一致する必要があります。 構文の詳細はライブラリにあります ドキュメント
  • dateOlderThan
    -識別子はタイムスタンプとして解析されます。オフセットが追加された後(
    value
    フィールドで指定)、結果のタイムスタンプは現在のタイムスタンプより後でなければなりません 時間。オフセット構文の詳細については、ライブラリ のドキュメント。サポートされています日付形式は
    2006-01-02
    、 エポックタイム、、、、、、およびです 。
    2006/01/02
    2006-01-02T15:04:05Z
    2006-01-02T15:04:05.999999999Z07:00
    2006-01-02T15:04:05Z07:00

デフォルト以外の比較タイプを使用するには、プレーン文字列の代わりにオブジェクト

type
を指定する必要があり ます。
value

これらのタイプは、構成を簡素化するために使用できます。たとえば、 以下を使用して、1人のユーザーのすべてのアクセスキーを保護することができます

glob

IAMUserAccessKey:
- type: glob
  value: "admin -> *"

それらを一緒に使用する

フィルタプロパティとフィルタタイプを一緒に使用することもできます。為に 特定のTLDのすべてのホストゾーンを保護する例:

Route53HostedZone:
- property: Name
  type: glob
  value: "*.rebuy.cloud."

フィルタ結果の反転

フィルターの結果は、次のように使用して反転できます

invert: true

CloudFormationStack:
- property: Name
  value: "foo"
  invert: true

この場合 CloudFormationStack以外の「foo」と呼ばれるものは フィルタリング。aws-nukeは内部的にすべてのリソースを取得し、適用することに注意してください その上のすべてのフィルター。フィルタが一致すると、ノードにフィルタ済みのマークが付けられます。

フィルタプリセット

一部のフィルターが複数のアカウントで同じである場合があります。 これは特に、Terraformなどのプロビジョニングツールが使用されている場合に発生する可能性があります。 IAMリソースが同じパターンに従う場合。

この場合、aws-nukeはフィルターのプリセットをサポートします。 複数のアカウント。構成は次のようになります。

---
regions:
- "global"
- "eu-west-1"

account-blocklist:
- 1234567890

accounts:
  555421337:
    presets:
    - "common"
  555133742:
    presets:
    - "common"
    - "terraform"
  555134237:
    presets:
    - "common"
    - "terraform"
    filters:
      EC2KeyPair:
      - "notebook"

presets:
  terraform:
    filters:
      S3Bucket:
      - type: glob
        value: "my-statebucket-*"
      DynamoDBTable:
      - "terraform-lock"
  common:
    filters:
      IAMRole:
      - "OrganizationAccountAccessRole"

インストール

リリースされたバイナリを使用する

インストールする最も簡単な方法は、 GitHubから最新リリースをダウンロードすることです。

Linux Intel/AMDの例

ダウンロードして抽出

$ wget -c https://github.com/rebuy-de/aws-nuke/releases/download/v2.16.0/aws-nuke-v2.16.0-linux-amd64.tar.gz -O - | sudo tar -xz -C $HOME/bin

走る

$ aws-nuke-v2.16.0-linux-amd64

ソースからコンパイル

ソースから aws-nukeをコンパイルするには、動作するGolang開発環境が必要です。情報源 に複製する必要があります

$GOPATH/src/github.com/rebuy-de/aws-nuke

また、 GlidegolintGNUをインストールする必要があります 作る

次に、実行

make build
してバイナリをプロジェクトにコンパイルする必要があります ディレクトリを作成するか、aws-nuke
make install
にインストールします。これにより 、他のプラットフォーム用にaws-nukeをクロスコンパイルできます。
$GOPATH/bin
make xc

Docker

次のようなコマンドを使用して、Dockerでaws-nukeを実行できます。

$ docker run \
    --rm -it \
    -v /full-path/to/nuke-config.yml:/home/aws-nuke/config.yml \
    -v /home/user/.aws:/home/aws-nuke/.aws \
    quay.io/rebuy/aws-nuke:v2.11.0 \
    --profile default \
    --config /home/aws-nuke/config.yml

これを機能させるには、AWS設定とaws-nuke設定のパスを調整する必要があります 。

また、正しいAWSプロファイルを指定する必要があります。AWSをマウントする代わりに

--access-key-id
ディレクトリでは、および
--secret-access-key
フラグ を使用できます。

画像タグには必ず最新バージョンを使用してください。

main
または、最新の開発バージョンに使用することもできますが 、これはより多くのバージョンであることに注意してください。 いつでも壊れそうです。

テスト

ユニットテスト

aws-nukeの単体テストを行うには、一部のテストでgomockを実行する必要があります。 これはを介して実行さ

go generate ./...
れますが、を介して自動的に実行され
make test
ます。 単体テストを実行するには:

make test

連絡先チャネル

バグレポートや機能リクエストについては、GitHubの問題を自由に作成してください。 質問については、メーリングリストを使用してください:aws-nuke@googlegroups.com。あなたはできる また、メーリングリストのアーカイブを検索して、誰かがすでに同じものを持っているかどうかを確認します 問題:https ://groups.google.com/d/forum/aws-nuke

助ける

このリポジトリをフォークしてaws-nukeに貢献するには、 変更し、リポジトリに対してプルリクエストを作成します。よくわからない場合 問題を解決する方法や、貢献について他に質問がある場合は、 GitHubの問題を作成します。