

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

# チュートリアル: AWS CloudFormation デプロイアクションの変数を使用するパイプラインを作成する
<a name="tutorials-cloudformation-action"></a>

このチュートリアルでは、 AWS CodePipeline コンソールを使用して、デプロイアクションを含むパイプラインを作成します。パイプラインが実行されると、テンプレートはスタックを作成し、さらに `outputs` ファイルを作成します。スタックテンプレートによって生成された出力は、CodePipeline の AWS CloudFormation アクションによって生成された変数です。

テンプレートからスタックを作成するアクションに、変数の名前空間を指定します。`outputs` ファイルによって生成された変数は、以降のアクションで使用できます。この例では、 AWS CloudFormation アクションによって生成された`StackName`変数に基づいて変更セットを作成します。手動承認の後で、変更セットを実行し、`StackName` 変数に基づいてスタックを削除するスタック削除アクションを作成します。

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

**Topics**
+ [前提条件: AWS CloudFormation サービスロールと CodeCommit リポジトリを作成する](#tutorials-cloudformation-action-prereq)
+ [ステップ 1: サンプル AWS CloudFormation テンプレートをダウンロード、編集、アップロードする](#tutorials-cloudformation-action-upload)
+ [ステップ 2: パイプラインを作成する](#tutorials-cloudformation-action-pipeline)
+ [ステップ 3: CloudFormation デプロイアクションを追加して変更セットを作成する](#tutorials-cloudformation-action-changeset)
+ [ステップ 4: 手動承認アクションを追加する](#tutorials-cloudformation-action-approval)
+ [ステップ 5: 変更セットを実行するための CloudFormation デプロイアクションを追加する](#tutorials-cloudformation-action-deployment)
+ [ステップ 6: スタックを削除するための CloudFormation デプロイアクションを追加する](#tutorials-cloudformation-action-delete)

## 前提条件: AWS CloudFormation サービスロールと CodeCommit リポジトリを作成する
<a name="tutorials-cloudformation-action-prereq"></a>

以下のものを用意しておく必要があります。
+ CodeCommit リポジトリ。で作成した AWS CodeCommit リポジトリを使用できます[チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)](tutorials-simple-codecommit.md)。
+ 次の例では、テンプレートから Amazon DocumentDB スタックを作成します。 AWS Identity and Access Management (IAM) を使用して、Amazon DocumentDB の次のアクセス許可を持つ AWS CloudFormation サービスロールを作成する必要があります。

  ```
  "rds:DescribeDBClusters",
  "rds:CreateDBCluster",
  "rds:DeleteDBCluster",
  "rds:CreateDBInstance"
  ```

## ステップ 1: サンプル AWS CloudFormation テンプレートをダウンロード、編集、アップロードする
<a name="tutorials-cloudformation-action-upload"></a>

サンプル AWS CloudFormation テンプレートファイルをダウンロードし、CodeCommit リポジトリにアップロードします。

1. リージョンのサンプルテンプレートに移動します。例えば、[https://docs.aws.amazon.com/documentdb/latest/developerguide/quick_start_cfn.html#quick_start_cfn-launch_stack](https://docs.aws.amazon.com/documentdb/latest/developerguide/quick_start_cfn.html#quick_start_cfn-launch_stack) のテーブルを使用してリージョンを選択し、テンプレートをダウンロードします。Amazon DocumentDB クラスターのテンプレートをダウンロードします。ファイル名は `documentdb_full_stack.yaml` です。

1. `documentdb_full_stack.yaml` ファイルを解凍し、テキストエディタで開きます。以下の変更を加えます。

   1. 次の例では、テンプレートの `Parameters` セクションに次の `Purpose:` パラメータを追加します。

      ```
        Purpose:
          Type: String
          Default: testing
          AllowedValues:
            - testing
            - production
          Description: The purpose of this instance.
      ```

   1. 次の例では、テンプレートの `Outputs:` セクションに次の `StackName` 出力を追加します。

      ```
        StackName:
          Value: !Ref AWS::StackName
      ```

1. テンプレートファイルを AWS CodeCommit リポジトリにアップロードします。解凍および編集したテンプレートファイルを、リポジトリのルートディレクトリにアップロードする必要があります。

    CodeCommit コンソールを 使用して、ファイルをアップロードします。

   1. CodeCommit コンソールを開き、**リポジトリ** リストから自分のリポジトリを選択します。

   1. [**Add file**]、[**Upload file**] の順に選択します。

   1. [**ファイルの選択**] を選択し、ファイルを参照します。ユーザー名とメールアドレスを入力して、変更をコミットします。**[Commit changes]** (変更のコミット) を選択します。

   ファイルは、リポジトリのルートレベルに次のように表示されます。

   ```
   documentdb_full_stack.yaml
   ```

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

このセクションでは、次のアクションを使用してパイプラインを作成します。
+ ソースアーティファクトがテンプレートファイルである CodeCommit アクションを含むソースステージ。
+ デプロイアクションを含む CloudFormation デプロイステージ。

ウィザードによって作成されたソースステージとデプロイステージの各アクションには、変数の名前空間として `SourceVariables`、`DeployVariables` がそれぞれ割り当てられます。アクションには名前空間が割り当てられるため、この例で設定した変数はダウンストリームアクションで使用可能になります。詳細については、「[変数リファレンス](reference-variables.md)」を参照してください。

**ウィザードを使用してパイプラインを作成するには**

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

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

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

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

1. CodePipeline は、特徴と料金が異なる V1 タイプと V2 タイプのパイプラインを提供しています。V2 タイプは、コンソールで選択できる唯一のタイプです。詳細については、「[パイプラインタイプ](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)」を参照してください。CodePipeline の料金については、[料金](https://aws.amazon.com/codepipeline/pricing/)を参照してください。

1. [**Service role (サービスロール)**] で、次のいずれかの操作を行います。
   + **新しいサービスロール** を選択して、CodePipeline に IAM でのサービスロールの作成を許可します。
   + [**Existing service role (既存のサービスロール)**] を選択します。[**ロール名**] で、リストからサービスロールを選択します。

1. **アーティファクトストア**: 

   1. パイプライン用に選択したリージョンのパイプラインに、デフォルトとして指定された Amazon S3 アーティファクトバケットなどのデフォルトのアーティファクトストアを使用するには、**デフォルトの場所** を選択します。

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

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

1. **[ステップ 3: ソースステージの追加]** で、次の操作を行います。

   1. [**ソースプロバイダ**] で、**AWS CodeCommit** を選択します。

   1. **リポジトリ名** で、[ステップ 1: CodeCommit リポジトリを作成する](tutorials-simple-codecommit.md#codecommit-create-repository) で作成した CodeCommit リポジトリの名前を選択します。

   1. [**Branch name**] で、最新のコード更新を含むブランチの名前を選択します。

   リポジトリ名とブランチを選択した後、このパイプライン用に作成される Amazon CloudWatch Events ルールが表示されます。

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

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

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

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

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

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

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

   1. [**アクションモード**] で、[**スタックを作成または更新する**] をクリックします。

   1. [**スタック名**] に、スタックの名前を入力します。これは、テンプレートが作成するスタックの名前です。

   1. [**出力ファイル名**] に、出力ファイルの名前 (**outputs** など) を入力します。これは、スタックの作成後にアクションによって作成されるファイルの名前です。

   1. [**Advanced**] を展開します。[**パラメータの上書き**] で、テンプレートの上書きをキーと値のペアとして入力します。例えば、このテンプレートには、次の上書きが必要です。

      ```
      {
      "DBClusterName": "MyDBCluster",
      "DBInstanceName": "MyDBInstance",
      "MasterUser": "UserName",
      "MasterPassword": "Password",
      "DBInstanceClass": "db.r4.large",
      "Purpose": "testing"}
      ```

      上書きを入力しない場合、テンプレートはスタックをデフォルト値で作成します。

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

   1. **ステップ 7: 確認**で、**パイプラインの作成**を選択します。パイプラインステージを示す図が表示されます。パイプラインの実行を許可します。2 つのステージで構成されたパイプラインが完成し、他のステージを追加する準備が整いました。

## ステップ 3: CloudFormation デプロイアクションを追加して変更セットを作成する
<a name="tutorials-cloudformation-action-changeset"></a>

手動承認アクションの前に CloudFormation が変更セットを作成できるようにする次のアクションをパイプラインに作成します。



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

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

1. [**編集**] モードで、パイプラインを編集するか、引き続きパイプラインを表示するかを選択します。

1. **デプロイ**ステージを編集することを選択します。

1. 前のアクションで作成したスタックに対する変更セットを作成するデプロイアクションを追加します。このアクションは、ステージ内の既存のアクションの後に追加します。

   1. [**アクション名**] に、「**Change\$1Set**」と入力します。[**アクションプロバイダー**] で、[**AWS CloudFormation **] を選択します。

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

   1. **[Action mode]** (アクションモード) で **[Create or replace a change set]** (変更セットの作成または置換) を選択します。

   1. [**スタック名**] に、次のように変数の構文を入力します。これは、変更セットを作成する対象のスタックの名前です。アクションには、デフォルトの名前空間 `DeployVariables` が割り当てられます。

      ```
      #{DeployVariables.StackName}
      ```

   1. [**変更セット名**] に、変更セットの名前を入力します。

      ```
      my-changeset
      ```

   1. [**パラメータの上書き**] で、`Purpose` パラメータを `testing` から `production` に変更します。

      ```
      {
      "DBClusterName": "MyDBCluster",
      "DBInstanceName": "MyDBInstance",
      "MasterUser": "UserName",
      "MasterPassword": "Password",
      "DBInstanceClass": "db.r4.large",
      "Purpose": "production"}
      ```

   1. [**完了**] をクリックしてアクションを保存します。

## ステップ 4: 手動承認アクションを追加する
<a name="tutorials-cloudformation-action-approval"></a>

パイプラインで手動承認アクションを作成します。



1. [**編集**] モードで、パイプラインを編集するか、引き続きパイプラインを表示するかを選択します。

1. **デプロイ**ステージを編集することを選択します。

1. 変更セットを作成するデプロイアクションの後に、手動承認アクションを追加します。このアクションにより、パイプラインが変更セットを実行する CloudFormation 前に、 で作成されたリソース変更セットを確認できます。

## ステップ 5: 変更セットを実行するための CloudFormation デプロイアクションを追加する
<a name="tutorials-cloudformation-action-deployment"></a>

手動承認アクションの後に CloudFormation が変更セットを実行できるようにする次のアクションをパイプラインに作成します。



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

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

1. [**編集**] モードで、パイプラインを編集するか、引き続きパイプラインを表示するかを選択します。

1. **デプロイ**ステージを編集することを選択します。

1. 前の手動アクションで承認した変更セットを実行するデプロイアクションを追加します。

   1. [**アクション名**] に、「**Execute\$1Change\$1Set**」と入力します。[**アクションプロバイダー**] で、[**AWS CloudFormation** ] を選択します。

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

   1. **[Action mode]** (アクションモード) で、 **[Execute a change set]** (変更セットの実行) を選択します。

   1. [**スタック名**] に、次のように変数の構文を入力します。これは、変更セットを作成する対象のスタックの名前です。

      ```
      #{DeployVariables.StackName}
      ```

   1. [**変更セット名**] に、前のアクションで作成した変更セットの名前を入力します。

      ```
      my-changeset
      ```

   1. [**完了**] をクリックしてアクションを保存します。

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

## ステップ 6: スタックを削除するための CloudFormation デプロイアクションを追加する
<a name="tutorials-cloudformation-action-delete"></a>

が出力ファイルの 変数からスタック名を取得し、スタックを削除 CloudFormation できるようにする最終アクションをパイプラインに作成します。



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

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

1. パイプラインの編集を選択します。

1. **デプロイ**ステージを編集することを選択します。

1. スタックを削除するデプロイアクションを追加します。

   1. [**アクション名**] で、[**DeleteStack**] を選択します。[**デプロイプロバイダー**] で、[**CloudFormation**] を選択します。

   1. [**アクションモード**] で、[**スタックを削除する**] をクリックします。

   1. [**スタック名**] に、次のように変数の構文を入力します。これは、アクションで削除するスタックの名前です。

   1. [**完了**] をクリックしてアクションを保存します。

   1. [**保存**] をクリックしてポリシーを保存します。

   パイプラインは保存すると実行されます。