AWS CloudFormationでAWSアカウントを作ってみた
CloudFormationでOrganizationsリソースが管理できるようになるアップデートがあったのでAWSアカウントを作成してみました。
CloudFormationで出来るようになったこと
今回のアップデートで以下の3点ができるようになりました。
- AWS::Organizations::Account
- AWS::Organizations::AccountではCreateAccount APIを使用してアカウントの作成を行うことができます。
- AWS::Organizations::OrganizationalUnit
- AWS::Organizations::OrganizationalUnitではOUの作成を行うことができます。
- AWS::Organizations::Policy
- AWS::Organizations::PolicyではOrganizationsポリシー(SCPやバックアップポリシーなど)の作成を行うことができます。
CloudFormationでアカウントを作成してみた
構文は以下のようになっています。
AWS::Organizations::Account
Type: AWS::Organizations::Account Properties: AccountName: String Email: String ParentIds: - String RoleName: String Tags: - Tag
指定できるパラメータは以下になります。
パラメータ | 必須有無 | 説明 |
---|---|---|
AccountName | 必須 | AWSアカウント作成時に付けられる名前 |
必須 | 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でスクリプトを作成しようと思っていましたが、今回のアップデートで不要になったのでかなりありがたいです。