AWS CloudFormation StackSets使ってみる

AWS CloudFormation StackSetsとは

AWS CloudFormation StackSets は、複数のアカウントおよびリージョンのスタックを 1 度のオペレーションで、作成、更新、削除できるようにすることで、スタックの機能を拡張します。

使用するケース

1つのAWSアカウントに複数のアプリケーションを作成してしまっている場合にアカウントを分けて管理する
CloudTrailの有効化等一律設定が必要なものを1発で設定する場合

準備

アカウントを複数用意する

ルートアカウント

すべてのサブドメインの親アカウントにする

サブドメイン用アカウント

アカウント名
メールアドレス

※.com等なしのものを用意する

aws-cliのアップデート

pip install --upgrade awscli

.bash_profile

export AdminAccountId=
export AdminAccountBucket=
export TargetAccount=
export TargetAccountBucket=

管理者アカウントでAWSCloudFormationStackSetAdministrationRoleの作成(例)

aws configure --profile ${TargetAccount}
aws s3 mb s3://${TargetAccountBucket} --region ap-northeast-1 --profile ${TargetAccount}
aws s3 cp ./yaml/target/AWSCloudFormationStackSetExecutionRole.yml s3://${TargetAccountBucket}/yaml/target/ --profile ${TargetAccount}

aws cloudformation create-stack --stack-name target-stack-sets \
  --capabilities CAPABILITY_NAMED_IAM \
  --parameters ParameterKey=AdministratorAccountId,ParameterValue=${AdminAccountId} \
  --template-url https://s3-ap-northeast-1.amazonaws.com/${TargetAccountBucket}/yaml/target/AWSCloudFormationStackSetExecutionRole.yml \
  --profile ${TargetAccount}

ターゲットアカウントAWSCloudFormationStackSetExecutionRoleを作成(例)

aws configure --profile ${TargetAccount}
aws s3 mb s3://${TargetAccountBucket} --region ap-northeast-1 --profile ${TargetAccount}
aws s3 cp ./yaml/target/AWSCloudFormationStackSetExecutionRole.yml s3://${TargetAccountBucket}/yaml/target/ --profile ${TargetAccount}

aws cloudformation create-stack --stack-name target-stack-sets \
  --capabilities CAPABILITY_NAMED_IAM \
  --parameters ParameterKey=AdministratorAccountId,ParameterValue=${AdminAccountId} \
  --template-url https://s3-ap-northeast-1.amazonaws.com/${TargetAccountBucket}/yaml/target/AWSCloudFormationStackSetExecutionRole.yml \
  --profile ${TargetAccount}

stack-setsの作成

aws cloudformation create-stack-set --stack-set-name my-awsconfig-stackset \
  --capabilities CAPABILITY_IAM \
  --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml

stack-instancesの作成

aws cloudformation create-stack-instances --stack-set-name my-awsconfig-stackset \
  --accounts '["1111111111111"]' \
  --regions '["ap-northeast-1"]' \
  --operation-preferences FailureToleranceCount=0,MaxConcurrentCount=1

stack-instancesの削除

aws cloudformation delete-stack-instances --stack-set-name my-awsconfig-stackset \
  --accounts '["1111111111111"]' \
  --regions '["ap-northeast-1"]' \
  --operation-preferences FailureToleranceCount=0,MaxConcurrentCount=1 \
  --no-retain-stacks

stack-setsの削除

aws cloudformation delete-stack-set --stack-set-name my-awsconfig-stackset