スタックセットの作成 - AWS CloudFormation

スタックセットの作成

スタックセットを作成するには、AWS マネジメントコンソール を使用するか AWS CLI の AWS CloudFormation コマンドを使用します。self-managed 型または service-managed 型のアクセス許可を持つスタックセットを作成できます。

self-managed 型のアクセス許可を使用すると、特定のリージョンで特定の AWS アカウントにスタックインスタンスをデプロイできます。これを行うには、まず必要な IAM ロールを作成して、スタックセットの管理元アカウントとスタックインスタンスのデプロイ先のアカウントとの間に信頼関係を確立する必要があります。

service-managed 型のアクセス許可を使用すると、特定のリージョンで AWS Organizations によって管理されているアカウントにスタックインスタンスをデプロイできます。このモデルでは、必要な IAM ロールを作成する必要はありません。ユーザーの代わりに StackSets が IAM ロールを作成します。今後ターゲット組織または組織単位 (OU) に追加されるアカウントへの自動デプロイを有効にすることもできます。自動デプロイが有効な場合、ターゲットの組織または OU からスタックインスタンスが削除されると、StackSets はアカウントからスタックインスタンスを自動的に削除します。

セルフマネージド型のアクセス許可を持つスタックセットの作成

AWS マネジメントコンソール を使用してセルフマネージド型のアクセス許可を持つスタックセットを作成する

  1. AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. ナビゲーションパネルから [StackSets] を選択します。

  3. [StackSets] ページの上部で [Create StackSet (StackSet の作成)] を選択します。

  4. [Prerequisite - Prepare template (前提条件 - テンプレートの準備)] で [Use a sample template (サンプルテンプレートの使用)] を選択します。

  5. [サンプルテンプレートの選択] で、ドロップダウンメニューから [Enable AWS config (AWS 設定の有効化)] テンプレートを選択します。[次へ] をクリックします。

    
                        StackSets サンプル [Enable AWS Config] テンプレート
  6. [Specify StackSet details (StackSet 詳細の指定)] ページで、次の情報を入力します。

    1. スタックセットの名前を指定します。スタックセット名はアルファベット文字で始まり、文字、数字、ハイフンのみを含める必要があります。このウォークスルーでは、my-awsconfig-stackset という名前を使用します。

    2. プロンプトが表示され、AWS Config に使用されるパラメータの値を指定します。これらのパラメータに関する詳細については、『AWS Config 開発者ガイド』の「コンソールによる AWS Config の設定」を参照してください。このウォークスルーでは、すべての AWS Config パラメータをデフォルト設定のままにしておきます。

    3. ログの内容に基づいて、E メールで Amazon Simple Notification Service (SNS) の更新を設定するには、TopicARN および NotificationEmail パラメータを使用します。このウォークスルーでは、Amazon SNS の更新は設定しません。

    4. 更新と通知の配信チャネルを設定するには、DeliveryChannelName および Frequency パラメータを使用します。AWS Config の配信チャネルでの詳細については、『AWS Config 開発者ガイド』の「配信チャネルの管理」を参照してください。このウォークスルーでは、この領域はデフォルト設定のままにします。

  7. AWS Config のパラメータの指定が完了したら、[次へ] を選択します。

  8. [Configure StackSet options (StackSet オプションの設定)] ページで、キーと値のペアを指定してタグを追加します。このウォークスルーでは、[Test (テスト)] の値を持つ [Stage (ステージ)] というタグを作成します。スタックセットに適用するタグは、スタックに作成されるすべてのリソースに適用されます。AWS でのタグの使用方法に関する詳細については、『AWS Billing and Cost Management ユーザーガイド』の「コスト配分タグの使用」を参照してください。

    [アクセス権限] を指定せずに、[次へ] を選択します。

    
                        [タグ] ページ
  9. [Set deployment options (デプロイオプションの設定)] ページで、スタックセットのスタックをデプロイしたいアカウントおよびリージョンを提供してください。

    AWS CloudFormation は、リージョンのデプロイ失敗が指定された障害耐性を超えない限り、最初のリージョン内の指定されたアカウントにスタックをデプロイし、次のリージョンに移行し、それが繰り返されます。

    1. [アカウント] で [Deploy stacks in accounts (スタックをアカウントにデプロイ)] を選択します。ターゲットアカウント番号をテキストボックスに貼り付け、複数の数字をカンマで区切ります。

    2. [Specify regions (リージョンの指定)] で [米国東部 (バージニア北部) リージョン] を選択します。[米国西部 (オレゴン) リージョン] も同様に選択します。[米国西部 (オレゴン) リージョン] の横にある上矢印をクリックして、リストの最初の項目になるように移動します。[Specify regions (リージョンの指定)] のリージョンの順序に従って、デプロイの順序が決まります。

    3. [Deployment options (デプロイメントオプション)] で次のようにします。

      • [Maximum concurrent accounts (同時アカウントの最大数)] については、デフォルト値の [数値] と [1] をそのまま使用します。

        つまり、AWS CloudFormation は一度に 1 つのアカウントのみでスタックをデプロイします。

      • [Failure tolerance (障害耐性)] については、デフォルトの [数値] と [0] をそのまま使用します。

        つまり、AWS CloudFormation が現在のリージョンでデプロイを停止し、残りのリージョンでのデプロイをキャンセルする前に、最大で 1 つのスタックデプロイが、指定されたリージョンの 1 つで失敗できるということを意味します。

      [Next] を選択します。

    
                        [Set Deployment Options (デプロイオプションの設定)] ページ
  10. [確認] ページで、設定とスタックセットのプロパティを確認します。変更するには、プロパティを変更する領域で [Edit (編集)] を選択します。スタックセットを作成する前に、[CAPABILITY] 領域のチェックボックスをオンにし、スタックセットで作成しているリソースの一部が新しい IAM リソースやアクセス権限を必要とする場合があることを認識します。必要となる可能性があるアクセス権限の詳細については、本ガイドの「AWS CloudFormation テンプレートで IAM リソースを認識する」を参照してください。スタックセットを作成する準備ができたら、[送信] を選択します。

    
                        必要な機能を認識する
  11. AWS CloudFormation がスタックセットの作成を開始します。スタックセット内のスタック作成の進捗と状況は、[送信] を選択した際に開くスタックセット詳細ページで確認できます。

    
                        StackSets 詳細ページの [オペレーション] タブ

AWS CLI を使用してセルフマネージド型のアクセス許可を持つスタックセットを作成する

AWS CLI コマンドを使用してスタックセットを作成する場合は、2 つの異なるコマンドを実行します。create-stack-set でテンプレートをアップロードしてスタックセットコンテナを作成し、create-stack-instances でスタックセット内にスタックを作成します。まず AWS CLI コマンド create-stack-set を実行し、AWS Config を有効にする AWS CloudFormation テンプレートのサンプルをアップロードし、それからスタックセット作成を開始します。

  1. AWS CLI を開きます。

  2. 次のコマンドを実行します。--template-url パラメータには、テンプレートを保存する Amazon S3 バケットの URL を入力します。このウォークスルーでは、my-awsconfig-stackset パラメータの値として --stack-set-name を使用します。

    aws cloudformation create-stack-set --stack-set-name my-awsconfig-stackset --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml
  3. create-stack-set が完了したあと、list-stack-sets コマンドを実行してスタックセットが作成されたことを確認します。新しいスタックセットが表示結果で確認できます。

    aws cloudformation list-stack-sets
  4. create-stack-instances AWS CLI コマンドを実行して、スタックセットにスタックインスタンスを追加します。このウォークスルーでは、us-west-2 パラメータの値として us-east-1 および --regions を使用します。

    次の例で示している通り、FailureToleranceCount パラメータで 0MaxConcurrentCount に、1--operation-preferences に設定することで、障害耐性および同時アカウントの最大数を設定します。代わりに割合を適用するには、FailureTolerancePercentage または MaxConcurrentPercentage を使用します。このウォークスルーでは、割合ではなくカウントを使用します。

    aws cloudformation create-stack-instances --stack-set-name my-awsconfig-stackset --accounts '["account_ID_1","account_ID_2"]' --regions '["region_1","region_2"]' --operation-preferences FailureToleranceCount=0,MaxConcurrentCount=1
    重要

    別のオペレーションを開始する前に、オペレーションが終了するのを待ってください。一度に 1 つのオペレーションのみを実行できます。

  5. スタックイスタンスが正常に作成されたことを確認します。DescribeStackSetOperation を、ステップ 4 の出力の一部として返される operation-id と実行します。

    aws cloudformation describe-stack-set-operation --stack-set-name my-awsconfig-stackset --operation-id operation_ID

サービスマネージド型のアクセス許可を持つスタックセットの作成

サービスマネージド型のアクセス許可を持つスタックセットを作成する際の考慮事項

  • スタックセットは、組織全体または指定した組織単位 (OU) をターゲットにすることができます。スタックセットが組織をターゲットにする場合、組織内のすべての OU のすべてのアカウントもターゲットとなります。スタックセットが指定した OU をターゲットにする場合、その OU 内のすべてのアカウントもターゲットとなります。

  • スタックセットが親 OU をターゲットにする場合、スタックセットは子 OU もターゲットにします。

  • 複数のスタックセットで同じ組織または OU をターゲットにすることができます。

  • スタックセットは組織外のアカウントをターゲットにすることはできません。

  • スタックセットはネストされたスタックをデプロイできません。

  • StackSets は、マスターアカウントが組織内または組織の OU 内にあっても、スタックインスタンスを組織のマスターアカウントにデプロイしません。

  • 自動デプロイはスタックセットレベルで設定されます。OU、アカウント、リージョンを選択して自動デプロイを調整することはできません。

  • 組織のマスターアカウントにサインインするために使用する IAM プリンシパルエンティティ (ユーザー、ロール、グループ) のアクセス許可によって、StackSets でデプロイが許可されるかどうかが決まります。組織にデプロイするアクセス許可を付与する IAM ポリシーの例については、「サービスマネージド型のスタックセットのアクセス許可を付与するサンプルポリシー」を参照してください。

AWS CloudFormation コンソールを使用してサービスマネージド型のアクセス許可を持つスタックセットを作成する

  1. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。

  2. ナビゲーションパネルから [StackSets] を選択します。

  3. [StackSets] ページの上部で [Create StackSet (StackSet の作成)] を選択します。

  4. [Prepare template (テンプレートの準備)] の [Template is ready (テンプレートの準備ができています)] を選択します。

  5. [Specify template (テンプレートの指定)] で、スタックテンプレートを含む S3 バケットの URL を指定するか、スタックテンプレートファイルをアップロードするかを選択します。[Next] を選択します。

  6. [Specify StackSet details (スタックセットの詳細の指定) ページで、スタックセットの名前を指定し、パラメータを指定して、[次へ] を選択します。

  7. [Configure StackSet options (スタックセットオプションの設定)] ページの [タグ] で、スタックのリソースに適用するタグを指定します。

  8. [アクセス権限] で、[Service-managed permissions (サービスマネージド型のアクセス許可)] を選択します。

    AWS Organizations との信頼されたアクセスが無効になっている場合は、バナーが表示されます。サービスマネージド型のアクセス許可を持つスタックセットを作成または更新するには、信頼されたアクセスが必要です。組織のマスターアカウントのアカウント管理者のみが、信頼されたアクセスを有効にするアクセス許可を持っています。

    
                                信頼されたアクセスバナーを有効にします。
  9. [次へ] を選択して続行し、信頼されたアクセスがまだ有効になっていない場合は有効にします。

  10. [Set deployment options (デプロイオプションの設定)] ページの [ Deployment targets (デプロイターゲット)] で、デプロイ先の組織内のアカウントを選択します。

    • 組織内のすべてのアカウントにデプロイするには、[Deploy to organization (組織にデプロイ)] を選択します。

      
                                        組織内のすべてのアカウントにスタックインスタンスをデプロイします。
    • 特定の OU のすべてのアカウントにデプロイするには、[Deploy to organizational units (OUs) (組織単位 (OU) にデプロイ)] を選択します。[Add an OU (OU の追加)] を選択し、テキストボックスにターゲット OU ID を貼り付けます。新しいターゲット OU ごとに繰り返します。

      
                                        組織の一部の OU 内のすべてのアカウントにスタックインスタンスをデプロイします。
  11. [Automatic deployment (自動デプロイ)] で、今後ターゲットの組織または OU に追加されるアカウントに StackSet が自動デプロイを行うかどうかを選択します。

    
                                サービスマネージド型のアクセス許可を持つスタックセットの自動デプロイ設定。
  12. 自動デプロイを有効にした場合、[Account removal behavior (アカウントの削除の動作)] で、ターゲットの組織または OU からアカウントを削除するときに、スタックリソースを保持するか削除するかを選択します。

    
                                サービスマネージド型のアクセス許可を持つスタックセットのアカウントの削除の動作設定。
    注記

    [Retain stacks (スタックの保持)] を選択すると、スタックインスタンスはスタックセットから削除されますが、スタックとそれに関連付けられたリソースは保持されます。リソースは現在の状態のままですが、スタックセットには含まれなくなります。スタックを既存または新規のスタックセットに再度関連付けることはできません。

  13. [Deployment Region (デプロイリージョン)] で、スタックインスタンスをデプロイするリージョンを選択します。[Next] を選択します。

  14. [確認] ページで、StackSets が正しいリージョンに正しいアカウントをデプロイすることを確認し、[Create StackSet (スタックセットの作成)] を選択します。

[StackSet details (スタックセットの詳細)] ページが開きます。スタックセット内のスタックの作成の進行状況とステータスを表示できます。

AWS CLI を使用してサービスマネージド型のアクセス許可を持つスタックセットを作成する

AWS CLI を使用してスタックセットを作成する場合、2 つの個別のコマンドを実行します。create-stack-set では、テンプレートをアップロードし、スタックセットコンテナを作成し、自動デプロイを管理します。create-stack-instances では、特定のターゲットアカウントにスタックインスタンスを作成します。

  1. AWS CLI を開きます。

  2. create-stack-set コマンドを実行します。次の例では、自動デプロイを有効にして、今後ターゲットの組織または OU に追加されるアカウントに StackSets が自動デプロイを行えるようにします。また、アカウントがターゲットの組織または OU から削除された場合も、スタックリソースは保持されます。

    aws cloudformation create-stack-set --stack-set-name StackSet_myApp --template-url https://s3.us-west-2.amazonaws.com/cloudformation-templates-us-west-2/MyApp.template --permission-model SERVICE_MANAGED --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true
  3. create-stack-set コマンドが完了したら、list-stack-sets コマンドを実行してスタックセットが作成されたことを確認します。新しいスタックセットが結果に表示されます。

    aws cloudformation list-stack-sets
  4. create-stack-instances コマンドを実行して、スタックセットにスタックインスタンスを追加します。--deployment-targets パラメータには、組織内のすべてのアカウントにデプロイする組織のルート ID を指定するか、組織の OU 内のすべてのアカウントにデプロイする OU ID を指定します。この例では、ou-rcuk-1x5j1lwo および ou-rcuk-slr5lh0a ID で OU を指定します。

    aws cloudformation create-stack-instances --stack-set-name StackSet_myApp --deployment-targets OrganizationalUnitIds='["ou-rcuk-1x5j1lwo", "ou-rcuk-slr5lh0a"]' --regions '["eu-west-1"]'
    重要

    別のオペレーションを開始する前に、オペレーションが終了するのを待ってください。一度に 1 つのオペレーションのみを実行できます。

  5. ステップ 4 で create-stack-instances 出力の一部として返された operation-id を使用して、describe-stack-set-operation を実行し、スタックインスタンスが正常に作成されたことを確認します。