

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: AWS CloudFormation StackSets デプロイアクションを使用してパイプラインを作成する
<a name="tutorials-stackset-deployment"></a>

このチュートリアルでは、 AWS CodePipeline コンソールを使用して、スタックセットとスタックインスタンスを作成するためのデプロイアクションを含むパイプラインを作成します。パイプラインが実行されると、テンプレートはスタックセットを作成し、スタックセットをデプロイするインスタンスを作成および更新します。

**重要**  
パイプライン作成の一環として、CodePipeline は、ユーザーが指定した S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットが によって所有 AWS アカウント されており、安全で信頼できることを確認してください。

スタックセットのアクセス許可を管理するには、セルフマネージド IAM ロールとマネージド IAM ロール AWSの 2 つの方法があります。このチュートリアルでは、セルフマネージド型の許可の例を示します。

CodePipeline で Stacksets を最も効果的に使用するには、 CloudFormation StackSets の背後にある概念とその仕組みを明確に理解しておく必要があります。*AWS CloudFormation ユーザーガイド*の「[StackSets の概念](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html)」を参照してください。

**Topics**
+ [前提条件](#tutorials-stackset-deployment-prereq)
+ [ステップ 1: サンプル AWS CloudFormation テンプレートとパラメータファイルをアップロードする](#tutorials-stackset-deployment-upload)
+ [ステップ 2: パイプラインを作成する](#tutorials-stackset-action-pipeline)
+ [ステップ 3: 初期デプロイを表示する](#tutorials-stackset-action-initial)
+ [ステップ 4: CloudFormationsStackInstances アクションを追加する](#tutorials-stacksets-instances)
+ [ステップ 5: デプロイのスタックセットリソースを表示する](#tutorials-stacksets-view)
+ [ステップ 6: スタックセットを更新する](#tutorials-stacksets-update)

## 前提条件
<a name="tutorials-stackset-deployment-prereq"></a>

スタックセットオペレーションでは、管理者アカウントとターゲットアカウントの 2 つの異なるアカウントを使用します。管理者アカウントでは、スタックセットを作成します。ターゲットアカウントでは、スタックセットに属する個別のスタックを作成します。

**管理者アカウントで管理者ロールを作成するには**
+ 「[スタックセットオペレーションの基本アクセス許可の設定](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html#stacksets-prereqs-accountsetup)」の手順に従います。ロールは **`AWSCloudFormationStackSetAdministrationRole`** という名前にする必要があります。

**ターゲットアカウントにサービスロールを作成するには**
+ 管理者アカウントを信頼するターゲットアカウントにサービスロールを作成します。「[スタックセットオペレーションの基本アクセス許可の設定](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html#stacksets-prereqs-accountsetup)」の手順に従います。ロールは **`AWSCloudFormationStackSetExecutionRole`** という名前にする必要があります。

## ステップ 1: サンプル AWS CloudFormation テンプレートとパラメータファイルをアップロードする
<a name="tutorials-stackset-deployment-upload"></a>

スタックセットテンプレートとパラメータファイルのソースバケットを作成します。サンプル AWS CloudFormation テンプレートファイルをダウンロードし、パラメータファイルを設定し、ファイルを圧縮してから S3 ソースバケットにアップロードします。

**注記**  
ソースファイルが唯一のテンプレートであっても、S3 ソースバケットにアップロードする前に、必ずソースファイルを圧縮してください。



**S3 ソースバケットを作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. **[バケットを作成]** を選択します。

1. [**バケット名**] にバケットの名前を入力します。

   [**リージョン**] で、パイプラインを作成するリージョンを選択します。**[バケットを作成]** を選択します。

1. バケットが作成されると、成功バナーが表示されます。[**バケットの詳細に移動**] を選択します。

1. [**プロパティ**] タブで、[**バージョニング**] を選択します。[**バージョニングの有効化**] を選択し、[**保存**] を選択します。

**AWS CloudFormation テンプレートファイルを作成するには**

1. スタックセットの CloudTrail 設定を生成するために、サンプルテンプレートファイル [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml) をダウンロードします。

1. `template.yml` という名前でファイルを保存します。

**parameters.txt ファイルを作成するには**

1. デプロイのパラメータでファイルを作成します。パラメータは、実行時にスタック内で更新する値です。次のサンプルファイルは、スタックセットのテンプレートパラメータを更新して、ログ記録検証とグローバルイベントを有効にします。

   ```
   [
     {
       "ParameterKey": "EnableLogFileValidation",
       "ParameterValue": "true"
     }, 
     {
       "ParameterKey": "IncludeGlobalEvents",
       "ParameterValue": "true"
     }
   ]
   ```

1. `parameters.txt` という名前でファイルを保存します。

**accounts.txt ファイルを作成するには**

1. 次のサンプルファイルに示されているように、インスタンスを作成するアカウントでファイルを作成します。

   ```
   [
       "111111222222","333333444444"
   ]
   ```

1. `accounts.txt` という名前でファイルを保存します。

**ソースファイルを作成してアップロードするには**

1. ファイルを単一の zip ファイルに結合します。ファイルは zip ファイルで以下のようになっています。

   ```
   template.yml
   parameters.txt
   accounts.txt
   ```

1. zip ファイルを S3 バケットにアップロードします。このファイルは、CodePipeline でのデプロイアクションのために [**パイプラインを作成する**] ウィザードによって作成されたソースアーティファクトです。

## ステップ 2: パイプラインを作成する
<a name="tutorials-stackset-action-pipeline"></a>

このセクションでは、次のアクションを使用してパイプラインを作成します。
+ ソースアーティファクトがテンプレートファイルやサポートソースファイルである S3 ソースアクションのあるソースステージ。
+  CloudFormation スタックセットを作成するスタックセットデプロイアクションを含むデプロイステージ。
+ ターゲットアカウント内に CloudFormation スタックとインスタンスを作成するスタックインスタンスのデプロイアクションを含むデプロイステージ。

**CloudFormationStackSet アクションを使用してパイプラインを作成するには**

1. にサインイン AWS マネジメントコンソール し、[http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home) で CodePipeline コンソールを開きます。

1. [**ようこそ**] ページ、[**開始方法**] ページ、または [**パイプライン**] ページで、[**パイプラインの作成**] を選択します。

1. **[ステップ 1: 作成オプションを選択する]** ページの **[作成オプション]** で、**[カスタムパイプラインを構築する]** オプションを選択します。**[次へ]** を選択します。

1. **[ステップ 2: パイプラインの設定を選択する]** で、**[パイプライン名]** に「**MyStackSetsPipeline**」と入力します。

1. このチュートリアルの目的では、**[パイプラインタイプ]** で、**[V1]** を選択します。**[V2]** を選択することもできますが、パイプラインタイプは特性と価格が異なることに注意してください。詳細については、「[パイプラインのタイプ](pipeline-types.md)」を参照してください。

1. [**サービスロール**] で、[**新しいサービスロール**] を選択し、CodePipeline に IAM でのサービスロールの作成を許可します。

1. [**アーティファクトストア**] では、デフォルト値はそのままにしておきます。
**注記**  
これはソースコードのソースバケットではありません。パイプラインのアーティファクトストアです。パイプラインごとに S3 バケットなどの個別のアーティファクトストアが必要です。パイプラインを作成または編集するときは、パイプラインリージョンにアーティファクトバケットと、アクションを実行している AWS リージョンごとに 1 つのアーティファクトバケットが必要です。  
詳細については、「[入力および出力アーティファクト](welcome-introducing-artifacts.md)」および「[CodePipeline パイプライン構造リファレンス](reference-pipeline-structure.md)」を参照してください。

   [**次へ**] を選択します。

1. **[ステップ 3: ソースステージの追加]** ページの **[ソースプロバイダー]** で、**[Amazon S3]** を選択します。

1. [**バケット**] に、このチュートリアル用に作成した S3 ソースバケット (`BucketName` など) を入力します。[**S3 オブジェクトキー**] に、zip ファイルのファイルパスとファイル名 (`MyFiles.zip` など) を入力します。

1. [**次へ**] を選択します。

1. **[ステップ 4: ビルドステージの追加]** で、**[ビルドステージをスキップ]** を選択し、もう一度 **[スキップ]** を選択して警告メッセージを受け入れます。

   [**次へ**] を選択します。

1. **[ステップ 5: テストステージの追加]** で、**[テストステージをスキップ]** を選択し、もう一度 **[スキップ]** を選択して警告メッセージを受け入れます。

   [**次へ**] を選択します。

1. **ステップ 6: デプロイステージの追加**:

   1. [**デプロイプロバイダー**] で、[**AWS CloudFormation スタックセット**] を選択します。

   1. [**スタックセット名**] に、スタックセットの名前を入力します。これは、テンプレートが作成するスタックセットの名前です。
**注記**  
スタックセット名を記録します。この名前は、パイプラインに 2 番目の StackSets デプロイアクションを追加するときに使用します。

   1. [**テンプレートパス**] に、テンプレートファイルをアップロードしたアーティファクト名とファイルパスを入力します。例えば、デフォルトのソースアーティファクト名 `SourceArtifact` を使用して次のように入力します。

      ```
      SourceArtifact::template.yml
      ```

   1. [**デプロイターゲット**] に、アカウントファイルをアップロードしたアーティファクト名とファイルパスを入力します。例えば、デフォルトのソースアーティファクト名 `SourceArtifact` を使用して次のように入力します。

      ```
      SourceArtifact::accounts.txt
      ```

   1. **デプロイターゲット AWS リージョン**で、 など、最初のスタックインスタンスをデプロイするリージョンを 1 つ入力します`us-east-1`。

   1. [**デプロイオプション**] を拡張します。[**パラメータ**] に、パラメータファイルをアップロードしたアーティファクト名とファイルパスを入力します。例えば、デフォルトのソースアーティファクト名 `SourceArtifact` を使用して次のように入力します。

      ```
      SourceArtifact::parameters.txt
      ```

      パラメータをファイルパスではなく、リテラル入力として入力するには、次のように入力します。

      ```
      ParameterKey=EnableLogFileValidation,ParameterValue=true
      ParameterKey=IncludeGlobalEvents,ParameterValue=true
      ```

   1. [**Capabilities**] (機能) で、[CAPABILITY\$1IAM] と [CAPABILITY\$1NAMED\$1IAM] を選択します。

   1. [**アクセス許可モデル**] で、[SELF\$1MANAGED] を選択します。

   1. [**障害耐性の割合**] に「`20`」と入力します。

   1. [**最大同時割合**] に「`25`」と入力します。

   1. [**次へ**] を選択します。

   1. **[ステップ 7: レビュー]** で、**[パイプラインを作成する]** を選択します。パイプラインが表示されます。

   1. パイプラインの実行を許可します。

## ステップ 3: 初期デプロイを表示する
<a name="tutorials-stackset-action-initial"></a>

初期デプロイのリソースとステータスを表示します。デプロイでスタックセットが正常に作成されたことを確認したら、2 番目のアクションを [**デプロイ**] ステージに追加します。

**リソースを表示するには**

1. CodePipeline コンソール ([https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)) を開きます。

1. [**パイプライン**] で、パイプラインを選択してから、[**表示**] を選択します。この図は、パイプラインのソースとデプロイのステージを示しています。

1. パイプラインの **CloudFormationStackSet** CloudFormation アクションで アクションを選択します。スタックセットのテンプレート、リソース、イベントが CloudFormation コンソールに表示されます。

1. 左のナビゲーションメニューから [**StackSets**] を選択します。リストで、新しいスタックセットを選択します。

1. [**スタックインスタンス**] タブを選択します。us-east-1 リージョンでは、提供したアカウントごとに 1 つのスタックインスタンスが作成されていることを確認します。各スタックインスタンスのステータスが `CURRENT` になっていることを確認します。

## ステップ 4: CloudFormationsStackInstances アクションを追加する
<a name="tutorials-stacksets-instances"></a>

パイプラインに次のアクションを作成し、 CloudFormation StackSets が残りのスタックインスタンスを作成できるようにします。

**パイプラインで次のアクションを作成するには**

1. CodePipeline コンソール ([https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)) を開きます。

   [**パイプライン**] で、パイプラインを選択してから、[**表示**] を選択します。この図は、パイプラインのソースとデプロイのステージを示しています。

1. パイプラインの編集を選択します。パイプラインは [**編集**] モードで表示されます。

1. [**デプロイ**] ステージで、[**編集**] を選択します。

1. [**AWS CloudFormation スタックセット**] デプロイアクションで、[**アクショングループの追加**] を選択します。

1. [**アクションの編集**] ページで、アクションの詳細を追加します。

   1. [**アクション名**] に、アクションの名前を入力します。

   1. [**アクションプロバイダー**] で、[**AWS CloudFormation スタックインスタンス**] を選択します。

   1. [**入力アーティファクト**] で、[**ソースアーティファクト**] を選択します。

   1. [**スタックセット名**] に、スタックセットの名前を入力します。これは、最初のアクションで指定したスタックセットの名前です。

   1. [**デプロイターゲット**] に、アカウントファイルをアップロードしたアーティファクト名とファイルパスを入力します。例えば、デフォルトのソースアーティファクト名 `SourceArtifact` を使用して次のように入力します。

      ```
      SourceArtifact::accounts.txt
      ```

   1. **デプロイターゲット AWS リージョン**で、 `us-east-2`や など、残りのスタックインスタンスをデプロイするリージョンを`eu-central-1`次のように入力します。

      ```
      us-east2, eu-central-1
      ```

   1. [**障害耐性の割合**] に「`20`」と入力します。

   1. [**最大同時割合**] に「`25`」と入力します。

   1. [**保存**] を選択します。

   1. 手動で変更を解除します。更新されたパイプラインがデプロイステージに 2 つのアクションと共に表示されます。

## ステップ 5: デプロイのスタックセットリソースを表示する
<a name="tutorials-stacksets-view"></a>

スタックセットのデプロイのリソースとステータスを表示します。

**リソースを表示するには**

1. CodePipeline コンソール ([https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)) を開きます。

1. [**パイプライン**] で、パイプラインを選択してから、[**表示**] を選択します。この図は、パイプラインのソースとデプロイのステージを示しています。

1. パイプライン内の CloudFormation アクションの**`AWS CloudFormation Stack Instances`**アクションを選択します。スタックセットのテンプレート、リソース、イベントが CloudFormation コンソールに表示されます。

1. 左のナビゲーションメニューから [**StackSets**] を選択します。リストで、スタックセットを選択します。

1. [**スタックインスタンス**] タブを選択します。提供した各アカウントの残りのスタックインスタンスが、すべて想定したリージョンで作成または更新されていることを確認します。各スタックインスタンスのステータスが `CURRENT` になっていることを確認します。

## ステップ 6: スタックセットを更新する
<a name="tutorials-stacksets-update"></a>

スタックセットを更新し、インスタンスに更新をデプロイします。この例では、更新用に指定するデプロイターゲットも変更します。更新のパートではないインスタンスは、古いステータスに移行します。

1. CodePipeline コンソール ([https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)) を開きます。

1. [**パイプライン**] で、パイプラインを選択してから、[**編集**] を選択します。[**デプロイ**] ステージで、[**編集**] を選択します。

1. パイプラインで、[**AWS CloudFormation スタックセット**] アクションを選択して編集します。[**説明**] で、既存の説明をスタックセットの新しい説明に書き直します。

1. パイプラインで、[**AWS CloudFormation スタックインスタンス**] アクションを選択して編集します。**デプロイターゲット AWS リージョン**で、アクションの作成時に入力された`us-east-2`値を削除します。

1. 変更を保存します。[**変更のリリース**] を選択して、パイプラインを実行します。

1.  CloudFormationでアクションを開きます。[**StackSet の情報**] タブを選択します。[**StackSet の説明**] で、新しい説明が表示されていることを確認します。

1. [**スタックインスタンス**] タブを選択します。[**ステータス**] で、us-east-2 のスタックインスタンスのステータスが `OUTDATED` であることを確認します。