TerraformでAWSアカウントを作るのは簡単だけど削除はひと手間かかる

2021.08.23

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

2022/05/09追記:アップデートで削除も簡単にできるようになりました!詳細はコチラ

以前、TerraformでAWS Organizationsを作成してみました。

OrganizationsをTerraformで作ってみた | DevelopersIO

他のAWSリソースと同様、AWSアカウントがTerraformのResourceでサクッと作れてしまうのが面白かったです。

作ったアカウントが不要になったので、AWSアカウントを作るResourceaws_organizations_accountのコードを削除してterraform applyをしたところ、以下のようなエラーになりました。どうやらアカウント削除は作成のときほど簡単にはいかないようです。

Error: ConstraintViolationException: The member account must be configured with a valid payment method, such as a credit card.
{
  RespMetadata: {
    StatusCode: 400,
    RequestID: "f9650bbe-6494-449c-be0e-49556e39442a"
  },
  Message_: "The member account must be configured with a valid payment method, such as a credit card.",
  Reason: "MEMBER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED"
}

というわけで、アカウントを削除するにはどうすればよいか調べました。

aws_organizations_accountリソースを削除してもアカウントは削除できない

前述のAWSアカウントを作るResourceaws_organizations_accountではアカウント削除はできないようです。このResourceを使ってアカウントを作った際は、

  1. アカウントを作成する
  2. そのアカウントをOrganizationに参加させる

ということをしてくれます。

しかし、このResourceを削除した際は該当アカウントをOrganizationメンバーから離脱させるだけで、アカウントの削除はやってくれません。

WARNING: Deleting this Terraform resource will only remove an AWS account from an organization. Terraform will not close the account.
(aws_organizations_account | Resources | hashicorp/aws | Terraform Registryより引用)

Oraganizationメンバーから離脱するには、独り立ちできている必要がある

そして、Organizationメンバーからの離脱には一定の条件が必要です。ざっくりとは、離脱後はスタンドアロンなアカウントになるので、スタンドアロンアカウントとして必要な設定を登録する必要があります。

やってみた

ルートユーザーのメールアドレスをメモしておく

後で使うので、必ず下の「Oraganizationから離脱する」より前に実施してください。マネジメントアカウントのOraganizationsのページで確認できます。AWS SSOを使っている場合はSSOポータルにも記載されています。

Oraganizationから離脱する

まずは削除したいアカウントにログインします。別にルートユーザーでなくても構いません。ただ権限絞られていると権限不足で面倒になると思うので、AdministratorAccessがついているIAMユーザーかロールが良いでしょう。私はAWS SSOでAdministratorAccessがついているロールを使いました。

そしてOraganizationsダッシュボード画面に行きます。右下の「この組織を離れる」ボタンをクリックします。 oraganizations-dashboard

「組織を離れることを確認しますか?」と確認のモーダルが表示されます。ここで右下の「組織を離れる」を押しても設定が足りていないのでエラーになります。「アカウントのサインアップステップを完了」をクリックしましょう。 removing-confirmation-modal

クレジットカード情報の登録

すると請求情報の登録画面に遷移しますので、フォームを埋めていきましょう。 billing-info-form

なのですが、私は何度フォームを埋めてsubmitしてもエラーになりました?

仕方がないのでこのフォームでの入力を諦め、お支払い方法ページへアクセスします。

home-paymentmethods

クレジットカード情報と請求先住所を登録します。

これで再度terraform applyを実行してみましょう。エラーメッセージが変わりました。

Error: ConstraintViolationException: You cannot remove an account from the organization if the account owner has not completed phone pin verification.
{
  RespMetadata: {
    StatusCode: 400,
    RequestID: "70fa0f56-f3b8-493a-9f59-b9502f5f04f0"
  },
  Message_: "You cannot remove an account from the organization if the account owner has not completed phone pin verification.",
  Reason: "ACCOUNT_CANNOT_LEAVE_WITHOUT_PHONE_VERIFICATION"
}

電話番号の登録

再びOraganizationsダッシュボード画面からたどって、「アカウントのサインアップステップを完了」をクリックすると、さっきの請求情報フォームの次の画面と思われるページに遷移しました。Extという項目がありますが、内線という意味らしいです。私は私用携帯電話番号を使うので空にしました。 phone-num-form

AWSから電話がかかってきます。画面に表示される4桁の番号を入力します。 pin-num 電話番号登録完了です。画面は次のサポートプランの選択に遷移します。が、この画面は特に進める必要がありません。

この時点でterraform applyを実行すると、対象アカウントをOraganizationメンバーから削除することができます。

※アカウント作成から7日未満はOraganizationから離脱できない

ここまで設定が完了していても、該当アカウントが作成されてから7日未満であればOraganizationから離脱することができません。以下のエラーになります。

Error: ConstraintViolationException: This operation requires a wait period.  Try again later.
{
  RespMetadata: {
    StatusCode: 400,
    RequestID: "9c5084aa-15c8-4def-b822-34920b7c9dff"
  },
  Message_: "This operation requires a wait period.  Try again later.",
  Reason: "WAIT_PERIOD_ACTIVE"
}

アカウントの削除(解約)

ここまでで該当アカウントはOraganizationsからは離脱することができました。いよいよアカウントの削除(解約)です。

ルートユーザーのパスワードのリセット

削除はルートユーザーで行なう必要があります。

Oraganizationメンバーとしてアカウントが作成されており、かつまだルートユーザーでログインしたことない場合、ルートユーザーのパスワードが設定されていません。そのためリセットしてパスワードを設定する必要があります。

マネジメントコンソールログイン画面にアクセスします。ルートユーザーのメールアドレスを入力して「次へ」。 amc-login-form 「パスワードをお忘れですか?」をクリック。 forgot-pw CAPTCHAテキストを入力して「E メールを送信する」をクリック。 CAPTCHA-text

メールアドレスにパスワードリセットのためのURLが届くので、アクセスしてパスワードを作成します。

ルートユーザーでログイン

再度マネジメントコンソールログイン画面にアクセスし、作成したパスワードでログインしてください。

アカウントを解約

  • マイアカウントにアクセスします。
  • 最下部「アカウントの解約」までスクロールします。 remove-account
  • 計4つのチェックボックスの内容を読み、理解してからチェックを入れます。
  • 「アカウントの解約」ボタンをクリック。
  • 確認のモーダルが表示されるので再度クリック。

まとめ

Organizationのメンバーとして作成したアカウントの削除方法をご紹介しました。検証用アカウントを作って削除してを繰り返そうかと思っていたのですが、結構削除が大変なので考えを改めようと思いました。