StackSetsを試してみたメモ。
参考リンク
前提条件: スタックセットオペレーションのアクセス権限の付与
スタックセットは管理者アカウントで作成し、ターゲットアカウントに個別のスタックが作成される。
管理者アカウントでAWSCloudFormationStackSetAdministrationRole
を作成する。このためのCloudFormationテンプレートがあるので利用する。
このロールは任意のターゲットアカウントのAWSCloudFormationStackSetExecutionRole
にスイッチできるロールである。
AWSTemplateFormatVersion: 2010-09-09 Description: Configure the AWSCloudFormationStackSetAdministrationRole to enable use of AWS CloudFormation StackSets. Resources: AdministrationRole: Type: AWS::IAM::Role Properties: RoleName: AWSCloudFormationStackSetAdministrationRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: cloudformation.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: AssumeRole-AWSCloudFormationStackSetExecutionRole PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - sts:AssumeRole Resource: - "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole"
管理者アカウント側でスタックを作成する。
aws cloudformation create-stack --stack-name StackSetAdministrationRole-Stack \ --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml \ --capabilities CAPABILITY_NAMED_IAM
ターゲットアカウントで、AWSCloudFormationStackSetExecutionRole
を作成する。こちらもこのためのCloudFormationテンプレートが用意されているので利用する。
AWSTemplateFormatVersion: 2010-09-09 Description: Configure the AWSCloudFormationStackSetExecutionRole to enable use of your account as a target account in AWS CloudFormation StackSets. Parameters: AdministratorAccountId: Type: String Description: AWS Account Id of the administrator account (the account in which StackSets will be created). MaxLength: 12 MinLength: 12 Resources: ExecutionRole: Type: AWS::IAM::Role Properties: RoleName: AWSCloudFormationStackSetExecutionRole AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: AWS: - !Ref AdministratorAccountId Action: - sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AdministratorAccess
aws cloudformation create-stack --stack-name StackSetExecutionRole-Stack \ --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml \ --capabilities CAPABILITY_NAMED_IAM \ --parameters ParameterKey=AdministratorAccountId,ParameterValue=<管理者アカウントのID>
AdministratorAccessを与えているが、アクセス許可をスタックセットで作成するリソースに絞ることが望ましい。
新しいスタックセットの作成
StackSetsのチュートリアルのテンプレートの代わりに、以下のService Catalogのチュートリアルのテンプレートを使ってみる。
CloudFormationコンソールで「StackSets」の作成を実行する。
項目 | 値 | 備考 |
---|---|---|
テンプレートの準備 | テンプレートの準備完了 | |
テンプレートソース | Amazon S3 URL | |
Amazon S3 URL | https://awsdocs.s3.amazonaws.com/servicecatalog/development-environment.template | |
StackSet名 | LinuxDesktop-StackSets | |
StackSetの説明 | (デフォルト) | |
KeyName | sotosugi | |
SSHLocation | (デフォルト) | |
InstanceType | (デフォルト) |
StackSetオプションの設定では、アクセス許可は2種類あり、組織のアクセス許可を使うこともできるようだ。
今回はセルフサービスのアクセス許可を使う。
デプロイオプションの設定で、アカウントとリージョン、同時アカウントの最大数を指定して、内容を確認して実行する。
スタックインスタンスが作成できた。