CloudFormationのスタック共有
あるAWSアカウントで作成したスタックを別のアカウントに共有したくなった場合の手順です。
スタックセットで共有する事で、別アカウントにも自動でスタックが作成されます。
※親でスタックセットを作成したら、すぐに、子でスタックの作成が始まります。
設定の流れ
- スタックセットの共有を行えるように設定
- スタックセットの作成
スタックセットを共有する側の設定
スタックを共有(提供)する側の設定を行います。
下記のyamlファイルを作成します。
ファイル名はAWSCloudFormationStackSetAdministrationRole.yml
とします。
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"
上記のyamlを利用して、スタックの作成を行うと、IAMロールが作成されます。
スタックを受け取る側の設定
スタックを受け取る側の設定のために、下記のymalファイルを作成します。
ファイル名は、AWSCloudFormationStackSetExecutionRole.yml
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
スタックの作成を行うと、パラメータの欄で、AdministratorAccountIdを聞かれるので、先ほど、共有設定を行ったアカウントのIDを選択します。
スタックセットを作成
CloudFormationの左のメニューからStackSets
を選択します。
設定項目を進んでいくと、デプロイのオプション
ページにたどり着きます。
そこで、「アカウント」の欄があるので、スタックをアカウントにデプロイ
を選択します。
アカウントが大量にある場合は、.csv
を選択する事が可能です。
また、リージョンを選択する事も可能です。
※複数リージョンでも利用できるようにテンプレートを作成する必要があります。
確認
スタックセットを作成したら、共有指定したアカウントで、スタックがすぐに作成されます。
まとめ
スタックセットを利用する事で、複数アカウントで簡単に共有する事ができるので、複数アカウントがある場合は、積極的に利用していくべき機能だと思いました。
ますます、CloudFormationが好きになってしまいました!!