0
0

More than 1 year has passed since last update.

StackSetsでコンソールからパラメータを指定した時のあれこれ

Posted at

はじめに

前回、StackSetsをGUIで作成しました。その際はパラメータの指定はしませんでした。

構成は同じだけどパラメータはアカウントごとに別にしたい、という際も、コンソール画面から可能でした。
用途としては、"本番環境と開発環境で、同じインスタンスだけど、スペックは別にしたい"等が考えられます。

ですが、パラメータを指定して作成する際に、若干戸惑った点ありましたので記事にしました。

概要

  • スタックセット自体に保持されるパラメータがある模様
  • スタックインスタンスには、それとは別のパラメータを指定可能
  • パラメータの変更は、それぞれ別々に可能
  • 既に作成されたスタックインスタンスのパラメータはスタックセットが編集されても元のパラメータのまま変更されない
    • 親のパラメータ変更、CFnテンプレートが変更されても、子のパラメータはそのまま
  • スタックセットのコンソール画面からでは、スタックインスタンスごとに設定したパラメータがわからない

用意したコード

親のIAMロール

前回と同じものです。

creatChildRsource.yaml
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'

子のIAMロール

こちらも前回と同じ。

creatParentrRsource.yaml
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'

作成するCFnテンプレート

パラメータでタグの値を指定するIAMユーザを作成します。

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

やったこと

  1. スタックセットを、子のアカウントは一つで作成

    • 手順は前回をご確認ください
    • defaultで指定した文字列がそのままパラメータ指定の入力ボックスにセットされていました
    • パラメータ、及び作成されたユーザとタグは以下の通り
      image.png
      image.png

    関係図は以下のようなイメージです。

  2. そのスタックセットに、"StackSetにスタックを追加"から新しく別アカウントを追加。ただし、"別のパラメータ"を指定
    image.png

    • 異なるパラメータをコンソールから指定
      image.png
      image.png

    • 作成後、スタックセットのパラメータは以下。変更なし
      image.png

    • 先に作られた子アカウントの方は変更なし。
      image.png

    • 後から作った子アカウントの方は設定したパラメータで作成
      image.png

    関係図はこうなります。

    子2にのみ設定したパラメータを確認しようとスタックセット画面を見てみたのですが、管理している2つのスタックインスタンスのパラメータに何を指定したのかわかりませんでした。
    ドリフトチェックを行ってみても、パラメータの違いは差分として扱われませんでした。確認する場合は、対象のアカウントにサインイン等してみる必要がありそうです。
    image.png

  3. 次に"StackSetのパラメータを上書き"から、初期に登録した方のみパラメータを上書き
    image.png
    image.png

    • スタックセットのパラメータは変更されません
      image.png

    • 先に作った(変更で指定した)方は操作どおり変更
      image.png

    • 後に作った(変更で指定しなかった)方は変更なし
      image.png

    関係図はこうなります。

  4. "StackSetの詳細を編集"から、パラメータを変更
    image.png

    • テンプレートは変更せず、パラメータに新しい文字列を指定

      • 日本語だと文字化けしてしまいました
    • デプロイ先は、新しい方のみ指定
      image.png

    • スタックセットのパラメータは変更されました。
      image.png

    • しかし、2つのスタックインスタンスには反映されませんでした。
      image.png
      image.png

    関係図はこうなります。

    デプロイ先2つの子アカウントの両方を指定してもパラメータは変更されませんでした。

  5. ここまでの状態で、テンプレートのCFnを変更

変更したCFnは以下になります。

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'

それでも、子アカウントのパラメータは変更されず、元の文字列がそのままでした。

image.png

image.png

関係図はそのまま、変更なしです。

これらのことから、一度作られたスタックインスタンスのパラメータは、スタックのパラメータが変更されてもそのまま保持されるようです。

おわりに

今回は、StackSetsのパラメータの変更を試してみました。
それぞれの子に設定したパラメータが、親の変更に影響されないのは助かりますが、その値が親から確認できず、子を直接見る必要があるのが難点と感じました。

子アカウントに指定したパラメータを把握しやすくする場合は、スタックセットをコンソールから作成せず、CFnで作成したほうがよさそうです。

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