aws-nuke の GitHub リポジトリがアーカイブされていたので状況を整理する

## はじめに
aws-nuke とは rebuy.de により開発されていたオープンソースの AWS リソース削除ツールです。AWS アカウントのお掃除に活用されている方も多いのではないでしょうか。

https://github.com/rebuy-de/aws-nuke

上記の GitHub リポジトリですが、2024/10/15 にアーカイブされていることに気づきました。これは今後機能追加や不具合修正などが行われないことを意味します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/b8718f19-1b72-b28f-f7fe-f33c3ba4c326.png)

リリースページを見ると、最後のリリースは 2023/9/4 の v2.25.0 でした。1 年以上新規リリースが止まっていたんですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/b6df472f-17cb-3154-4cad-06f728cbed9d.png)


## 今後どうすればいいのか
[rebuy-de/aws-nuke](https://github.com/rebuy-de/aws-nuke) (以後、オリジナル版) の README に以下のような記載があります。

原文:
> This repository for aws-nuke is no longer being actively maintained. We recommend users to switch to the actively maintained fork of this project at `ekristen/aws-nuke`. We appreciate all the support and contributions we've received throughout the life of this project. We believe that the fork will continue to provide the functionality and support that you have come to expect from aws-nuke.

参考訳:
> aws-nuke のこのリポジトリは、現在アクティブにメンテナンスされていません。`ekristen/aws-nuke`にあるこのプロジェクトのアクティブにメンテナンスされているフォークに切り替えることをお勧めします。 このプロジェクトの存続期間中に受けたすべてのサポートと貢献に感謝します。 このフォークは、aws-nuke に期待される機能とサポートを引き続き提供してくれると信じています。

別プロジェクトとしてフォークされた [ekristen/aws-nuke](https://github.com/ekristen/aws-nuke) (以降、フォーク版) への移行が推奨されているようです。

https://github.com/ekristen/aws-nuke

フォーク自体は 2021 年末におこなわれています。その背景などはこちらのリポジトリの README に記載があり、オリジナル版のプロジェクトに敬意を持ったうえで開発が進められている印象を (私個人としては) 受けました。

フォーク版はツールのコア部分を専用ライブラリ [libnuke](https://github.com/ekristen/libnuke) として再実装し、2024 年 6 月にリリースされた v3.0.0 では多くの新機能が追加されています。その後もアクティブに不具合修正や機能追加がおこなわれています。

## ドキュメント
フォーク版はドキュメントが整備されています。オリジナル版は一次情報が README だけだったように思うのでこれは嬉しいですね。

https://ekristen.github.io/aws-nuke/

## フォーク版の Version 3 を触ってみる
:::note info
お約束
aws-nuke は非常に強力かつ破壊的なツールであるため、実環境での実行は十分に注意しておこなってください。
:::

動作確認を行ったバージョン: v3.31.0
### 破壊的な変更点
#### run サブコマンドの追加
破壊的な変更として `run` サブコマンド (エイリアス: `nuke`) が追加されています。これによりメインコマンド (root) での実行はできなくなり、明示的にサブコマンドを指定する必要があります。

```shell
# オリジナル版での実行方法
$ aws-nuke -c config/nuke-config.yaml --no-dry-run

# フォーク版 (v3) での実行方法
$ aws-nuke run -c config/nuke-config.yaml --no-dry-run

# nuke が run のエイリアスとして定義されている
$ aws-nuke nuke -c config/nuke-config.yaml --no-dry-run
```

#### targets の非推奨化
削除対象リソースを指定する際の `targets` が非推奨になりました。代わりに `include` の使用が推奨されます。

```yaml
# オリジナル版での指定方法
resource-types:
  targets:
    - S3Object
    - S3Bucket
    - IAMRole

# フォーク版での指定方法
resource-types:
  includes:
    - S3Object
    - S3Bucket
    - IAMRole
````

#### feature-flags の非推奨化
リソースの削除動作を指定する際の `feature-flags` が非推奨になりました。代わりに `settings` の使用が推奨されます。

```yaml
# オリジナル版での指定方法
feature-flags:
  EC2Instance:
    DisableStopProtection: true
    DisableDeletionProtection: true

# フォーク版での指定方法
settings:
  EC2Instance:
    DisableStopProtection: true
    DisableDeletionProtection: true
````

### グローバルフィルター
オリジナル版ではフィルターは一つのリソースに対してのみ適用できました。グローバルフィルター (`__global__`) を使用すると、定義されたすべてのリソースにフィルターを適用できます。複数のリソースに対して、Name タグのような共通の条件を都度記述しなくてよくなり、設定が簡潔に記述できます。

グローバルフィルターは、プリセットまたはアカウントレベルのみ定義できます。

```yaml
# オリジナル版
resource-types:
  targets:
   - LambdaFunction
   - LambdaLayer

accounts:
  123456789012:
    filters:
      LambdaFunction:
        - property: tag:Name
          value: "aws-nuke"       
      LambdaLayer:
        - property: tag:Name
          value: "aws-nuke"

# フォーク版 (グローバルフィルターあり)
resource-types:
  includes:
   - LambdaFunction
   - LambdaLayer

accounts:
  123456789012:
    filters:
      __global__:
        - property: tag:Name
          value: "aws-nuke"
```

### 有効なすべてのリージョンを指定
`regions` に all を指定するとアカウント内で有効になっているすべてのリージョンを対象に処理を実行できます

```yaml
# オリジナル版
regions:
  - global
  - ap-south-1
  - ca-central-1
  - eu-central-1
  -以降省略-

# フォーク版
regions:
  - all
```

## 参考: オリジナル版から追加されている新規リソース
オリジナル版の最終リリースである v2.25.0 からフォーク版の v3.31.0 までに追加されているリソースは以下のとおりです。(cloud-control リソースは除きます)

```text
AmplifyApp
AppRegistryApplication
AthenaDataCatalog
AthenaPreparedStatement
BackupReportPlan
CloudFrontCachePolicy
CloudFrontResponseHeadersPolicy
CloudWatchAnomalyDetector
CloudWatchInsightRule
CodeBuildBuild
CodeBuildBuildBatch
CodeBuildReport
CodeBuildReportGroup
CodeBuildSourceCredential
CodeDeployDeploymentConfig
CodeDeployDeploymentGroup
CodeGuruReviewerRepositoryAssociation
CodePipelineCustomActionType
CodePipelineWebhook
ConfigServiceConformancePack
DynamoDBBackup
EC2TGWConnectPeer
ECRPublicRepository
ECSCapacityProvider
ELBv2ListenerRule
ElasticTranscoderPreset
GameLiftBuild
GameLiftFleet
GameLiftMatchmakingConfiguration
GameLiftMatchmakingRuleSet
GameLiftQueue
GlueBlueprint
GlueMLTransform
GlueSecurityConfiguration
GlueSession
GlueWorkflow
IAMAccountSettingPasswordPolicy
IAMRolesAnywhereCRL
IAMRolesAnywhereProfile
IAMRolesAnywhereTrustAnchor
IAMUserHTTPSGitCredential
IAMUserMFADevice
IoTSiteWiseAccessPolicy
IoTSiteWiseAsset
IoTSiteWiseAssetModel
IoTSiteWiseDashboard
IoTSiteWiseGateway
IoTSiteWisePortal
IoTSiteWiseProject
ManagedBlockchainMember
NetworkManagerConnectPeer
NetworkManagerCoreNetwork
NetworkManagerGlobalNetwork
NetworkManagerNetworkAttachment
OSPipeline
PinpointApp
PinpointPhoneNumber
PipesPipe
PollyLexicon
QuickSightSubscription
QuickSightUser
RedshiftServerlessNamespace
RedshiftServerlessSnapshot
RedshiftServerlessWorkgroup
RedshiftSnapshotSchedule
RekognitionDataset
RekognitionProject
ResourceExplorer2Index
ResourceExplorer2View
SageMakerSpace
SchedulerSchedule
TranscribeCallAnalyticsCategory
TranscribeCallAnalyticsJob
TranscribeLanguageModel
TranscribeMedicalTranscriptionJob
TranscribeMedicalVocabulary
TranscribeTranscriptionJob
TranscribeVocabulary
TranscribeVocabularyFilter
WAFv2APIKey
```

ちなみに名称の変更があったのは以下の 7 つ。typo や命名規則に則っていなかったものを修正したのだと思われます。

| オリジナル版 (v2.25.0) | フォーク版 (v3.31.0) |
| --- | --- |
| AWSBackupVault | BackupVault |
| ComprehendPiiEntititesDetectionJob | ComprehendPiiEntitiesDetectionJob |
| EKSFargateProfiles | EKSFargateProfile |
| EKSNodegroups | EKSNodegroup |
| LaunchConfiguration | AutoScalingLaunchConfiguration |
| LifecycleHook | AutoScalingLifecycleHook |
| NetpuneSnapshot | NeptuneSnapshot |

以上です。
参考になれば幸いです。