Account Factory for Terraform (AFT) からAWSアカウントを削除する

基本的にコンソールで1つずつリソースを消していくよ
2022.08.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも、ちゃだいん(@chazuke4649)です。

今回は、Account Factory for Terraform (AFT) からAWSアカウントを削除してみます。

参考情報

基本的には以下公式ドキュメントに従って行います。

概要

前提

  • 対象AWSアカウント: sandbox-aft-02: 111122223333

手順

  • ステップ 1: アカウントリクエストを保存する git リポジトリからアカウントを削除する
  • ステップ 2: アカウントカスタマイズパイプラインを削除する
  • ステップ 3: Terraform ワークスペースを削除する (Terraform Cloud および Terraform Enterprise のお客様のみ)
  • ステップ 4: S3 バックエンドから Terraform の状態を削除する
  • ステップ 5: アカウントのメタデータを削除する

ステップ 1: アカウントリクエストを保存する git リポジトリからアカウントを削除する

アカウント リクエストを保存するgitリポジトリで、AFT から削除するアカウントのアカウント リクエストを削除します。

AFT関連リポジトリのうち、リクエストリポジトリの該当コードをコメントアウトします。

## AFTから当該アカウントを削除するため、コメントアウトする
# module "sandbox_aft_02" {
#   source = "./modules/aft-account-request"

#   control_tower_parameters = {
#     AccountEmail              = "aws+aft_02@example.jp"
#     AccountName               = "sandbox-aft-02"
#     ManagedOrganizationalUnit = "Sandbox"
#     SSOUserEmail              = "aws@example.jp"
#     SSOUserFirstName          = "NOT"
#     SSOUserLastName           = "USE"
#   }

#   account_tags = {
#     "Project"     = "test"
#     "Environment" = "Production"
#     "AFT"         = true
#   }

#   change_management_parameters = {
#     change_requested_by = "chadain"
#     change_reason       = "Added custom fields"
#   }
#   # account_customizations_name = "sandbox-customizations"
# }

ローカルリポジトリからリモートへプッシュします。

すると、CodePipeline側にて、ct-aft-account-request が発火されました。

無事applyされ、特に何も起こらなかった模様です。

ステップ 2: アカウントカスタマイズパイプラインを削除する

AFT 管理アカウントで、AFT から削除するアカウントの AWS CodePipeline を削除します。このパイプラインには、名前のプレフィックスとしてアカウント ID があります。

CodePipelineコンソールで当該AWSアカウントIDで検索すると、該当のパイプラインが見つかったのでこれを削除します。

※間違えて、他のパイプラインを削除しないように十分注意します

Terraformワークスペースは使用していないので、ステップ3はスキップします。

ステップ 4: S3 バックエンドから Terraform の状態を削除する

AFT 管理アカウントで、AFT から削除するアカウントの S3 バケット内の関連するフォルダをすべて削除します。以下の例では、プレースホルダー番号 012345678901 を AFT 管理アカウント ID 番号に置き換えます。

Terraform OSS を選択した場合、aft-backend-012345678901-primary-region および aft-backend-012345678901-secondary-region S3 バケットには、アカウントごとに (カスタマイズパイプラインの状態、グローバルおよびアカウントカスタマイズの状態に関連する) 3 つのフォルダがあります。

stateファイルを削除するちょっと怖い作業ですが、以下のようにAWSアカウントIDを検索し、該当するフォルダを2つ(今回はアカウントカスタマイズのフォルダがなかったので2つ)削除します。それを primary-region分とsecondary-region分と2つのバケットに対して行います。

該当する2つのフォルダを選択し、コンソールから削除します。

ちなみに、primaryで削除すれば、secondaryはレプリケーションされているため、自ら削除せずとも当該フォルダは削除されていました。

ステップ 5: アカウントのメタデータを削除する

AFT 管理アカウントで、AFT から削除するアカウントのアカウント関連のメタデータを削除します。このメタデータは、DynamoDB テーブルのパラメータ aft-request-metadata に保存されています。

DynamoDBテーブル aft-request-metadata にて、該当するアイテムを検索し、削除します。

アイテムの削除が完了しました。

作業としては以上です。

まとめ

今回はAFTからAWSアカウントを削除しました。現時点でこれら関連リソースの削除は自動化されていないため、今回のように手順を追って各リソースを手動削除していく必要がありそうです。

それでは今日はこの辺で。ちゃだいん(@chazuke4649)でした。