LoginSignup
0
0

More than 1 year has passed since last update.

StackSetsをCloudFormationで構築する

Posted at

はじめに

今回は、StackSetsをCloudFormationから作成してみました。
前回の最後で課題とした「各スタックインスタンスへのパラメータの一覧化」は適ったかなと思っています。

概要

  • スタックセットをCloudFormationで作成
    • スタックインスタンスへ渡すパラメータを明記する形
      • コードをみればすべてのスタックインスタンスへのパラメータがわかる

手順

親/子アカウント上にIAMロール作成

以前の記事で説明したように、親と子アカウントに必要なIAMロールを作成します。

パラメータ無しの場合

パラメータなしの場合は以下のようになります。

AWSTemplateFormatVersion: 2010-09-09

Parameters:
  AdminiRoleArn:
    Type: String
    Default: 'arn:aws:iam::000000000000:role/AWSCloudFormationStackSetAdministrationRole'

Resources:
  TestStackSet1:
    Type: 'AWS::CloudFormation::StackSet'
    DeletionPolicy: Delete
    Properties:
      StackSetName: TestStackSet12345
      AdministrationRoleARN: !Ref AdminiRoleArn
      PermissionModel: SELF_MANAGED
      Capabilities: 
        - 'CAPABILITY_NAMED_IAM'
      StackInstancesGroup:
        - 
          DeploymentTargets: 
            Accounts: 
              - '111111111111'
          Regions: 
            - 'ap-northeast-1'
        - 
          DeploymentTargets: 
            Accounts: 
              - '222222222222'
          Regions: 
            - 'ap-northeast-1'
      TemplateBody: |
        AWSTemplateFormatVersion: 2010-09-09

        Resources:
          AWSUser:
            Type: AWS::IAM::User
            Properties:
              UserName: 'Kasumi-Nakasu'
  • DeletionPolicyは、削除時にスタックインスタンスも消すか、残しておくかを指定します。
  • AdministrationRoleARNは、親アカウント用のIAMロールのArnを指定します。
  • Capabilitiesは、今回のCFnテンプレートがIAMユーザを作成するため、'CAPABILITY_NAMED_IAM'を指定しています。
  • StackInstancesGroupで、複数のスタックインスタンスを指定します。
  • TemplateBodyに直接、作成したいCFnテンプレートを記載します。

パラメータ有りの場合

AWSTemplateFormatVersion: 2010-09-09

Parameters:
  AdminiRoleArn:
    Type: String
    Default: 'arn:aws:iam::000000000000:role/AWSCloudFormationStackSetAdministrationRole'

Resources:
  TestStackSet1:
    Type: 'AWS::CloudFormation::StackSet'
    DeletionPolicy: Delete
    Properties:
      StackSetName: TestStackSet12345
      AdministrationRoleARN: !Ref AdminiRoleArn
      PermissionModel: SELF_MANAGED
      Capabilities: 
        - 'CAPABILITY_NAMED_IAM'
      StackInstancesGroup:
        - 
          DeploymentTargets: 
            Accounts: 
              - '111111111111'
          ParameterOverrides: 
            - 
              ParameterKey: 'NicknameString'
              ParameterValue: 'kasukasu'
          Regions: 
            - 'ap-northeast-1'
        - 
          DeploymentTargets: 
            Accounts: 
              - '222222222222'
          ParameterOverrides: 
            - 
              ParameterKey: 'NicknameString'
              ParameterValue: 'かすかす'
          Regions: 
            - 'ap-northeast-1'
      TemplateBody: |
        AWSTemplateFormatVersion: 2010-09-09

        Parameters:
          NicknameString:
            Type: String
            Default: 'kasumin'

        Resources:
          AWSUser:
            Type: AWS::IAM::User
            Properties:
              UserName: 'Kasumi-Nakasu'
              Tags:
                - Key: 'Nickname'
                  Value: !Ref NicknameString
                - Key: 'Unit'
                  Value: 'QU4RTZ'

  • StackInstancesGroupParameterOverridesで、各スタックインスタンスに指定するパラメータを指定します。
    • 日本語などの全角文字でも正常に作成されますが、作成後テンプレートを見ると文字化けしていました、要注意。
  • TemplateBodyはYamlで記述する。
    • JSON形式で記述する、またはJSON形式のファイルへのS3URLを指定すると、Parameters: [NicknameString] must have valuesとエラーとなり、うまく作成できませんでした。

公式ユーザーガイド

おわりに

スタックインスタンスに与えるパラメータを一か所で管理するため、StackSetsをCloudFormationから作成しました。
そのほかの恩恵として、コンソールで作成するよりだいぶシンプルに作れるように感じました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0