AWS CloudFormationでAWSアカウントを作ってみた

2022.11.27

CloudFormationでOrganizationsリソースが管理できるようになるアップデートがあったのでAWSアカウントを作成してみました。

CloudFormationで出来るようになったこと

今回のアップデートで以下の3点ができるようになりました。

CloudFormationでアカウントを作成してみた

構文は以下のようになっています。
AWS::Organizations::Account

Type: AWS::Organizations::Account
Properties: 
  AccountName: String
  Email: String
  ParentIds: 
    - String
  RoleName: String
  Tags: 
    - Tag


指定できるパラメータは以下になります。

パラメータ 必須有無 説明
AccountName 必須 AWSアカウント作成時に付けられる名前
Email 必須 AWSアカウントに紐づくメールアドレス
ParentIds オプション AWSアカウントを配置するOUのID
指定しない場合はルートOUに配置されます
RoleName オプション OrganizationsでAWSアカウントを作成した際に自動で作成されるIAMロールの名前
指定しない場合は「OrganizationAccountAccessRole」という名前で作成されます
Tags オプション AWSアカウントに付けるタグ


今回作成したテンプレートは以下になります。
AWS::Organizations::AccountのDeletionPolicyはデフォルトだとRetainなのでDeleteを指定してスタック削除時に解約するようにします。
※今回は検証のためにDeleteにしています。
解約しても90日以内でしたら普及可能です。
解約した AWS アカウントを再開することはできますか?

AWSTemplateFormatVersion: "2010-09-09"

Description: Organizations Stack

Parameters:
# ------------------------------------------------------------#
# Parameters
# ------------------------------------------------------------# 
  AccountName:
    Type: String

  Email:
    Type: String

  ParentIds:
    Type: String

Resources:
# ------------------------------------------------------------#
# Create Account
# ------------------------------------------------------------# 
  Account:
    Type: AWS::Organizations::Account
    DeletionPolicy: Delete
    Properties: 
      AccountName: !Ref AccountName
      Email: !Ref Email
      ParentIds: 
        - !Ref ParentIds

Outputs:
# ------------------------------------------------------------#
# Outputs
# ------------------------------------------------------------# 
  AccountID:
    Value: !Ref Account
    Export: 
      Name: AccountID

CloudFormationの実行はAWS CLIで行いました。
以下のコマンドで実行します。

aws cloudformation create-stack --stack-name CloudFormationスタック名 --template-body file://CloudFormationテンプレートファイル名 --parameters ParameterKey=AccountName,ParameterValue=AWSアカウント名 ParameterKey=Email,ParameterValue=メールアドレス ParameterKey=ParentIds,ParameterValue=配置するOUのID

スタックの作成が完了したら以下のコマンドでAWSアカウントが作成されているか確認します。

aws organizations list-accounts

作成したアカウントのStatusがACTIVEになっていれば利用可能です。

さいごに

検証用AWSアカウントの作成はAWS CLIでスクリプトを作成しようと思っていましたが、今回のアップデートで不要になったのでかなりありがたいです。