

Amazon CodeCatalyst は新規のお客様には提供されなくなりました。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[CodeCatalyst から移行する方法](migration.md)」を参照してください。

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

# CloudFormation スタックのデプロイ
<a name="deploy-action-cfn"></a>

このセクションでは、CodeCatalyst ワークフローを使用して AWS CloudFormation スタックをデプロイする方法について説明します。これを行うには、** CloudFormation スタックのデプロイ**アクションをワークフローに追加する必要があります。アクションは、指定したテンプレート AWS に基づいて、リソースの CloudFormation スタックを にデプロイします。テンプレートは、次のようになります。
+ CloudFormation テンプレート – 詳細については、[「 テンプレートの使用 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)」を参照してください。
+ AWS SAM テンプレート – 詳細については、[AWS Serverless Application Model 「 (AWS SAM) 仕様](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html)」を参照してください。
**注記**  
 AWS SAM テンプレートを使用するには、まず `[sam package](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-package.html)`オペレーションを使用して AWS SAM アプリケーションをパッケージ化する必要があります。Amazon CodeCatalyst ワークフローの一部としてこのパッケージを自動的に実行する方法を示すチュートリアルについては、「[チュートリアル: サーバーレスアプリケーションをデプロイする](deploy-tut-lambda.md)」を参照してください。

スタックが既に存在する場合、アクションは CloudFormation `[CreateChangeSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateChangeSet.html)` オペレーションを実行し、次に `[ExecuteChangeSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ExecuteChangeSet.html)` オペレーションを実行します。その後、アクションは変更がデプロイされるのを待ち、結果に応じて、失敗または成功したものとしてマークします。

デプロイするリソースを含む CloudFormation または AWS SAM テンプレートが既にある場合、または AWS SAM や などのツールを使用してワークフロービルドアクションの一部として自動的に生成する予定がある場合は、 ** CloudFormation スタック**のデプロイアクションを使用します[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)。 [ビルドアクションの追加](build-add-action.md)

使用できるテンプレートに制限はありません。CloudFormation で作成することも、** CloudFormation スタックのデプロイ**アクションで使用 AWS SAM することもできます。

**ヒント**  
** CloudFormation スタックのデプロイアクションを使用してサーバーレスアプリケーションをデプロイ**する方法を示すチュートリアルについては、「」を参照してください[チュートリアル: サーバーレスアプリケーションをデプロイする](deploy-tut-lambda.md)。

**Topics**
+ [CloudFormation 「スタックをデプロイ」アクションで使用されるランタイムイメージ](#deploy-action-cfn-runtime)
+ [チュートリアル: サーバーレスアプリケーションをデプロイする](deploy-tut-lambda.md)
+ [CloudFormation 「スタックのデプロイ」アクションの追加](deploy-action-cfn-adding.md)
+ [ロールバックの設定](deploy-consumption-enable-alarms.md)
+ [CloudFormation 「スタックをデプロイ」変数](deploy-action-cfn-variables.md)
+ [CloudFormation 「スタックをデプロイ」アクション YAML](deploy-action-ref-cfn.md)

## CloudFormation 「スタックをデプロイ」アクションで使用されるランタイムイメージ
<a name="deploy-action-cfn-runtime"></a>

** CloudFormation スタックのデプロイ**アクションは、[2022 年 11 月のイメージ](build-images.md#build.previous-image)で実行されます。詳細については、「[アクティブなイメージ](build-images.md#build-curated-images)」を参照してください。

# チュートリアル: サーバーレスアプリケーションをデプロイする
<a name="deploy-tut-lambda"></a>

このチュートリアルでは、ワークフローを使用してサーバーレスアプリケーションを CloudFormation スタックとしてビルド、テスト、デプロイする方法について説明します。

このチュートリアルのアプリケーションは、「Hello World」メッセージを出力するシンプルなウェブアプリケーションです。これは AWS Lambda 関数と Amazon API Gateway で構成され、 の拡張機能である [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) を使用して構築します[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

**Topics**
+ [前提条件](#deploy-tut-lambda-cfn-prereqs)
+ [ステップ 1: ソースレポジトリを作成する](#deploy-tut-lambda-cfn-source)
+ [ステップ 2: AWS ロールを作成する](#deploy-tut-lambda-cfn-roles)
+ [ステップ 3: CodeCatalyst に AWS ロールを追加する](#deploy-tut-lambda-cfn-roles-add)
+ [ステップ 4: Amazon S3 バケットを作成する](#deploy-tut-lambda-cfn-s3)
+ [ステップ 5: ソースファイルを追加する](#deploy-tut-lambda-cfn-files)
+ [ステップ 6: ワークフローを作成して実行する](#deploy-tut-lambda-cfn-workflow)
+ [ステップ 7: 変更を行う](#deploy-tut-lambda-cfn-change)
+ [クリーンアップ](#deploy-tut-lambda-cfn-clean-up)

## 前提条件
<a name="deploy-tut-lambda-cfn-prereqs"></a>

開始する前に:
+ 接続された AWS アカウントを持つ CodeCatalyst **スペース**が必要です。詳細については、「[スペースを作成する](spaces-create.md)」を参照してください。
+ スペースには、次の名前の空のプロジェクトが必要です。

  ```
  codecatalyst-cfn-project
  ```

  このプロジェクトを作成するには、**[ゼロから開始]** オプションを使用します。

  詳細については、「[Amazon CodeCatalyst での空のプロジェクトの作成](projects-create.md#projects-create-empty)」を参照してください。
+ プロジェクトには、以下と呼ばれる CodeCatalyst **[環境]** が必要です。

  ```
  codecatalyst-cfn-environment
  ```

  この環境を次のように設定します。
  + **[非本番稼働用]** など、任意のタイプを選択します。
  +  AWS アカウントを接続します。
  + **[デフォルトの IAM ロール]** で、任意のロールを選択します。後で別のロールを指定します。

  詳細については、「[AWS アカウント と VPCs へのデプロイ](deploy-environments.md)」を参照してください。

## ステップ 1: ソースレポジトリを作成する
<a name="deploy-tut-lambda-cfn-source"></a>

このステップでは、CodeCatalyst に空のソースリポジトリを作成します。このリポジトリは、Lambda 関数ファイルなどのチュートリアルのソースファイルを保存するために使用されます。

ソースリポジトリの詳細については、「[ソースリポジトリを作成する](source-repositories-create.md)」を参照してください。

**ソースリポジトリを作成するには**

1. ナビゲーションペインの CodeCatalyst で **[コード]** を選択してから、**[ソースリポジトリ]** を選択します。

1. **[リポジトリの追加]** を選択し、**[リポジトリの作成]** を選択します。

1. **[リポジトリ名]** に次のように入力します。

   ```
   codecatalyst-cfn-source-repository
   ```

1. **[作成]** を選択します。

これで、`codecatalyst-cfn-source-repository` というリポジトリが作成されました。

## ステップ 2: AWS ロールを作成する
<a name="deploy-tut-lambda-cfn-roles"></a>

このステップでは、次の IAM AWS ロールを作成します。
+ **ロールのデプロイ** – サーバーレスアプリケーションをデプロイする AWS アカウントと CloudFormation サービスにアクセスするアクセス許可を CodeCatalyst **Deploy CloudFormation スタック**アクションに付与します。** CloudFormation スタックのデプロイ**アクションはワークフローの一部です。
+ **ビルドロール** – CodeCatalyst ビルドアクションに、 AWS アカウントにアクセスし、サーバーレスアプリケーションパッケージが保存される Amazon S3 に書き込むアクセス許可を付与します。ビルドアクションはワークフローの一部です。
+ **スタックロール** – 後で指定する AWS SAM テンプレートで指定されたリソースを読み取って変更するアクセス許可を CloudFormation に付与します。また、CloudWatch にアクセス許可を付与します。

IAM ロールの詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」を参照してください。

**注記**  
時間を節約するため、前に一覧表示した 3 つのロールではなく、`CodeCatalystWorkflowDevelopmentRole-spaceName` ロールと呼ばれる 1 つのロールを作成できます。詳細については、「[アカウントとスペース用の **CodeCatalystWorkflowDevelopmentRole-*spaceName*** ロールを作成する](ipa-iam-roles.md#ipa-iam-roles-service-create)」を参照してください。`CodeCatalystWorkflowDevelopmentRole-spaceName` ロールには、セキュリティリスクをもたらす可能性のある非常に広範なアクセス許可があることを理解します。このロールは、セキュリティが懸念されないチュートリアルやシナリオでのみ使用することをお勧めします。このチュートリアルでは、前述の 3 つのロールを作成することを前提としています。

**注記**  
[[Lambda 実行ロール]](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) も必要ですが、ステップ 5 でワークフローを実行するときに `sam-template.yml` ファイルが作成するため、今すぐ作成する必要はありません。



**デプロイロールを作成するには**

1. ロールのポリシーを以下の手順で作成します。

   1. にサインインします AWS。

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

   1. ナビゲーションペインで、**ポリシー** を選択してください。

   1. **[Create policy]** (ポリシーを作成) を選択します。

   1. **JSON** タブを選択します。

   1. 既存のコードを削除します。

   1. 次のコードを貼り付けます。
**注記**  
ロールがワークフローアクションの実行に初めて使用されるときは、リソースポリシーステートメントでワイルドカードを使用し、利用可能になった後にリソース名でポリシーの範囲を絞り込みます。  

      ```
      "Resource": "*"
      ```

   1. [**Next: Tags (次へ: タグ)**] を選択します。

   1. **[次へ: レビュー]** を選択します。

   1. **[名前]** に次のように入力します。

      ```
      codecatalyst-deploy-policy
      ```

   1. [**Create policy**] (ポリシーの作成) を選択します。

      これで、アクセス許可ポリシーが作成されました。

1. 次のようにデプロイロールを作成します。

   1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

   1. **[カスタム信頼ポリシー]** を選択します。

   1. 既存のカスタム信頼ポリシーを削除します。

   1. 次の信頼ポリシーを追加します。

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

   1. **[アクセス許可ポリシー]** で `codecatalyst-deploy-policy` を検索し、チェックボックスをオンにします。

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

   1. **[ロール名]** には、次のように入力します。

      ```
      codecatalyst-deploy-role
      ```

   1. **[ロールの説明]** には、次のように入力します。

      ```
      CodeCatalyst deploy role
      ```

   1. [**ロールの作成**] を選択してください。

   これで、信頼ポリシーとアクセス許可ポリシーを使用してデプロイロールが作成されました。

1. デプロイロール ARN を次のように取得します。

   1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

   1. 検索ボックスに、作成したロールの名前 (`codecatalyst-deploy-role`) を入力します。

   1. 使用するロールを一覧から選択します。

      ロールの **[概要]** ページが表示されます。

   1. 上部で、**[ARN]** 値をコピーします。

   これで、適切なアクセス許可を持つデプロイロールを作成し、ARN を取得しました。

**ビルドロールを作成するには**

1. ロールのポリシーを以下の手順で作成します。

   1. にサインインします AWS。

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

   1. ナビゲーションペインで、**ポリシー** を選択してください。

   1. **[Create policy]** (ポリシーを作成) を選択します。

   1. **JSON** タブを選択します。

   1. 既存のコードを削除します。

   1. 次のコードを貼り付けます。
**注記**  
ロールがワークフローアクションの実行に初めて使用されるときは、リソースポリシーステートメントでワイルドカードを使用し、利用可能になった後にリソース名でポリシーの範囲を絞り込みます。  

      ```
      "Resource": "*"
      ```

   1. [**Next: Tags (次へ: タグ)**] を選択します。

   1. **[次へ: レビュー]** を選択します。

   1. **[名前]** に次のように入力します。

      ```
      codecatalyst-build-policy
      ```

   1. [**Create policy**] (ポリシーの作成) を選択します。

      これで、アクセス許可ポリシーが作成されました。

1. 次のようにビルドロールを作成します。

   1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

   1. **[カスタム信頼ポリシー]** を選択します。

   1. 既存のカスタム信頼ポリシーを削除します。

   1. 次の信頼ポリシーを追加します。

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

   1. **[アクセス許可ポリシー]** で `codecatalyst-build-policy` を検索し、チェックボックスをオンにします。

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

   1. **[ロール名]** には、次のように入力します。

      ```
      codecatalyst-build-role
      ```

   1. **[ロールの説明]** には、次のように入力します。

      ```
      CodeCatalyst build role
      ```

   1. [**ロールの作成**] を選択してください。

   これで、信頼ポリシーとアクセス許可ポリシーを使用してビルドロールが作成されました。

1. 次のようにビルドロール ARN を取得します。

   1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

   1. 検索ボックスに、作成したロールの名前 (`codecatalyst-build-role`) を入力します。

   1. 使用するロールを一覧から選択します。

      ロールの **[概要]** ページが表示されます。

   1. 上部で、**[ARN]** 値をコピーします。

   これで、適切なアクセス許可を持つビルドロールを作成し、その ARN を取得しました。<a name="deploy-tut-lambda-cfn-roles-stack"></a>

**スタックロールを作成するには**

1. スタックをデプロイするアカウント AWS を使用して にサインインします。

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

1. 次のようにスタックロールを作成します。

   1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

   1. [**ロールの作成**] を選択してください。

   1. **[AWS サービス]** を選択してください。

   1. **[ユースケース]** セクションで、ドロップダウンリストから **[CloudFormation]** を選択します。

   1. **[CloudFormation]** ラジオボタンを選択します。

   1. 下部で、**[次へ]** を選択します。

   1. 検索ボックスを使用して、次のアクセス許可ポリシーを検索し、それぞれのチェックボックスをオンにします。
**注記**  
ポリシーを検索してもポリシーが表示されない場合は、**[フィルターをクリア]** を選択して再試行してください。
      + **CloudWatchFullAccess**
      + **AWS CloudFormationFullAccess**
      + **IAMFullAccess**
      + **AWS Lambda\$1FullAccess**
      + **AmazonAPIGatewayAdministrator**
      + **AmazonS3FullAccess**
      + **AmazonEC2ContainerRegistryFullAccess**

      最初のポリシーでは、CloudWatch へのアクセスを許可し、アラームが発生したときにスタックのロールバックを有効にします。

      残りのポリシー AWS SAM では、このチュートリアルでデプロイされるスタック内のサービスとリソースへのアクセスを に許可します。詳細については、「*AWS Serverless Application Model デベロッパーガイド*」の「[アクセス許可](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html)」を参照してください。

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

   1. **[ロール名]** には、次のように入力します。

      ```
      codecatalyst-stack-role
      ```

   1. [**ロールの作成**] を選択してください。

1. 次のように、スタックロールの ARN を取得します。

   1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

   1. 検索ボックスに、作成したロールの名前 (`codecatalyst-stack-role`) を入力します。

   1. 使用するロールを一覧から選択します。

   1. **[概要]** セクションの **[ARN]** 値をコピーします。これは後で必要になります。

   これで、適切なアクセス許可を持つスタックロールを作成し、ARN を取得しました。

## ステップ 3: CodeCatalyst に AWS ロールを追加する
<a name="deploy-tut-lambda-cfn-roles-add"></a>

このステップでは、ビルドロール (`codecatalyst-build-role`) を追加し、スペース内の CodeCatalyst アカウント接続にロール (`codecatalyst-deploy-role`) をデプロイします。

**注記**  
スタックロール (`codecatalyst-stack-role`) を接続に追加する必要はありません。これは、デプロイロールを使用して、CodeCatalyst と AWS 間で接続が既に確立された*後*、スタックロールが *[CloudFormation]* (CodeCatalyst ではない) で使用されるためです。スタックロールは、CodeCatalyst が AWSにアクセスするために使用するものではないため、アカウント接続に関連付ける必要はありません。

**ビルドロールとデプロイロールをアカウント接続に追加するには**

1. CodeCatalyst で、スペースに移動します。

1. **[AWS アカウント]** を選択します。アカウント接続が一覧表示されます。

1. ビルドロールとデプロイロールを作成したアカウントを表す AWS アカウント接続を選択します。

1. ** AWS 管理コンソールからロールの管理**を選択します。

   **[Amazon CodeCatalyst スペースに IAM ロールの追加]** ページが表示されます。ページにアクセスするには、サインインが必要な場合があります。

1. **[IAM で作成した既存のロールを追加]** を選択します。

   ドロップダウンリストが表示されます。この一覧表示には、`codecatalyst-runner.amazonaws.com` および `codecatalyst.amazonaws.com` サービスプリンシパルを含む信頼ポリシーを持つすべての IAM ロールが表示されます。

1. ドロップダウンリストで [`codecatalyst-build-role`] を選択し、**[ロールを追加]** を選択します。

1. **[IAM ロールを追加]** を選択し、**[IAM で作成した既存のロールを追加]** を選択し、ドロップダウンリストから [`codecatalyst-deploy-role`] を選択します。[**Add role**] を選択します。

   これで、ビルドロールとデプロイロールをスペースに追加しました。

1. **[Amazon CodeCatalyst 表示名]** の値をコピーします。この値は、ワークフローを作成するときに後で必要になります。

## ステップ 4: Amazon S3 バケットを作成する
<a name="deploy-tut-lambda-cfn-s3"></a>

このステップでは、サーバーレスアプリケーションのデプロイパッケージ .zip ファイルを保存する Amazon S3 バケットを作成します。

**Amazon S3 バケットを作成するには**

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

1. メインペインで、**[バケットを作成]** を選択します。

1. **[バケット名]** に、次のように入力します。

   ```
   codecatalyst-cfn-s3-bucket
   ```

1. **[AWS リージョン]** で、リージョンを選択します。このチュートリアルは、**[米国西部 (オレゴン) us-west-2]** を選択していることを前提としています。Amazon S3 がサポートしているリージョンについては、「*AWS 全般のリファレンス*」の「[Amazon Simple Storage Service エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/s3.html)」を参照してください。

1. ページ下部にある **[バケットを作成]** ボタンを選択します。

これで、米国西部 (オレゴン) us-west-2 リージョンで **codecatalyst-cfn-s3-bucket** という名前のバケットが作成されました。

## ステップ 5: ソースファイルを追加する
<a name="deploy-tut-lambda-cfn-files"></a>

このステップでは、CodeCatalyst ソースリポジトリに複数のアプリケーションソースファイルを追加します。`hello-world` フォルダには、デプロイするアプリケーションファイルが含まれています。`tests` フォルダにはユニットテストが含まれています。フォルダは次のような構造になっています。

```
.
|— hello-world
|  |— tests
|     |— unit
|        |— test-handler.js
|  |— app.js
|— .npmignore
|— package.json
|— sam-template.yml
|— setup-sam.sh
```

### .npmignore ファイル
<a name="deploy-tut-lambda-cfn-files-npmignore"></a>

`.npmignore` ファイルは、アプリケーションパッケージから npm を除外するファイルとフォルダを示します。このチュートリアルでは、npm はアプリケーションの一部ではないため、`tests` フォルダを除外します。

**.npmignore ファイルを追加するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクト「`codecatalyst-cfn-project`」を選択します。

1. ナビゲーションペインで **[コード]** を選択してから、**[ソースリポジトリ]** を選択します。

1. ソースリポジトリのリストから、リポジトリ `codecatalyst-cfn-source-repository` を選択します。

1. **[ファイル]** で、**[ファイルを作成]** を選択します。

1. **[ファイル名]** に次のように入力します。

   ```
   .npmignore
   ```

1. テキストボックスに次のコードを入力します。

   ```
   tests/*
   ```

1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

   これで、リポジトリのルートに `.npmignore` という名前のファイルが作成されました。

### package.json ファイル
<a name="deploy-tut-lambda-cfn-files-package-json"></a>

`package.json` ファイルには、プロジェクト名、バージョン番号、説明、依存関係、およびアプリケーションとやり取りして実行する方法を説明するその他の詳細など、Node プロジェクトに関する重要なメタデータが含まれています。

このチュートリアルの `package.json` には、依存関係の一覧と `test` スクリプトが含まれています。スクリプトは、次を実行します。
+ [[mocha]](https://mochajs.org/) を使用して、テストスクリプトは `hello-world/tests/unit/` で指定されたユニットテストを実行し、[[xunit]]() レポーターを使用して結果を `junit.xml` ファイルに書き込みます。
+ [[Istanbul (nyc)]](https://istanbul.js.org/) を使用すると、テストスクリプトは [[clover]](https://openclover.org/doc/manual/4.2.0/general--about-openclover.html) レポーターを使用してコードカバレッジレポート (`clover.xml`) を生成します。詳細については、「Istanbul ドキュメント」の「[代替レポーターの使用](https://istanbul.js.org/docs/advanced/alternative-reporters/#clover)」を参照してください。

**package.json ファイルを追加するには**

1. リポジトリの **[ファイル]** で、**[ファイルを作成]** を選択します。

1. **[ファイル名]** に次のように入力します。

   ```
   package.json
   ```

1. テキストボックスに次のコードを入力します。

   ```
   {
     "name": "hello_world",
     "version": "1.0.0",
     "description": "hello world sample for NodeJS",
     "main": "app.js",
     "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs",
     "author": "SAM CLI",
     "license": "MIT",
     "dependencies": {
       "axios": "^0.21.1",
       "nyc": "^15.1.0"
     },
     "scripts": {
       "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml"
     },
     "devDependencies": {
       "aws-sdk": "^2.815.0",
       "chai": "^4.2.0",
       "mocha": "^8.2.1"
     }
   }
   ```

1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

   これで、リポジトリのルートに「`package.json`」という名前のファイルが追加されました。

### sam-template.yml ファイル
<a name="deploy-tut-lambda-cfn-files-sam-template-yml"></a>

`sam-template.yml` ファイルには、Lambda 関数と API Gateway をデプロイし、それらを一緒に設定するための手順が含まれています。テンプレート[AWS Serverless Application Model 仕様](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html)に従っており、 CloudFormation テンプレート仕様を拡張します。

は便利な [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) リソースタイプ AWS SAM を提供するため、このチュートリアル AWS SAM では通常のテンプレートの代わりに CloudFormation テンプレートを使用します。このタイプは、基本的な CloudFormation 構文を使用するために通常書き出す必要がある behind-the-scenes の設定を多く実行します。例えば、`AWS::Serverless::Function` は、関数を開始する Lambda 関数、Lambda 実行ロール、イベントソースマッピングを作成します。基本的な CloudFormation を使用して書き込む場合は、これらすべてをコーディングする必要があります。

このチュートリアルでは、事前に作成されたテンプレートを使用しますが、ビルドアクションを使用してワークフローの一部として作成できます。詳細については、「[CloudFormation スタックのデプロイ](deploy-action-cfn.md)」を参照してください。

**sam-template.yml ファイルを追加するには**

1. リポジトリの **[ファイル]** で、**[ファイルを作成]** を選択します。

1. **[ファイル名]** に次のように入力します。

   ```
   sam-template.yml
   ```

1. テキストボックスに次のコードを入力します。

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: >
     serverless-api
   
     Sample SAM Template for serverless-api
     
   # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
   Globals:
     Function:
       Timeout: 3
   
   Resources:
     HelloWorldFunction:
       Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
       Properties:
         CodeUri: hello-world/
         Handler: app.lambdaHandler
         Runtime: nodejs12.x
         Events:
           HelloWorld:
             Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
             Properties:
               Path: /hello
               Method: get
   
   Outputs:
     # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function
     # Find out about other implicit resources you can reference within AWS SAM at
     # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
     HelloWorldApi:
       Description: "API Gateway endpoint URL for the Hello World function"
       Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
     HelloWorldFunction:
       Description: "Hello World Lambda function ARN"
       Value: !GetAtt HelloWorldFunction.Arn
     HelloWorldFunctionIamRole:
       Description: "Implicit Lambda execution role created for the Hello World function"
       Value: !GetAtt HelloWorldFunctionRole.Arn
   ```

1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

   これで、リポジトリのルートフォルダに「`sam-template.yml`」という名前のファイルが追加されました。

### setup-sam.sh ファイル
<a name="deploy-tut-lambda-cfn-files-setup-sam"></a>

`setup-sam.sh` ファイルには、 CLI AWS SAM ユーティリティをダウンロードしてインストールする手順が含まれています。ワークフローは、このユーティリティを使用して `hello-world` ソースをパッケージ化します。

**setup-sam.sh ファイルを追加するには**

1. リポジトリの **[ファイル]** で、**[ファイルを作成]** を選択します。

1. **[ファイル名]** に次のように入力します。

   ```
   setup-sam.sh
   ```

1. テキストボックスに次のコードを入力します。

   ```
   #!/usr/bin/env bash
   echo "Setting up sam"
   
   yum install unzip -y
   
   curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
   unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory
   
   ./sam-installation-directory/install; export AWS_DEFAULT_REGION=us-west-2
   ```

   上記のコードでは、*[us-west-2]* を AWS リージョンに置き換えます。

1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

   これで、リポジトリのルートに「`setup-sam.sh`」という名前のファイルが追加されました。

### app.js ファイル
<a name="deploy-tut-lambda-cfn-files-app-js"></a>

`app.js` には、Lambda 関数のコードが含まれます。このチュートリアルでは、`hello world` コードはテキストを返します。

**app.js ファイルを追加するには**

1. リポジトリの **[ファイル]** で、**[ファイルを作成]** を選択します。

1. **[ファイル名]** に次のように入力します。

   ```
   hello-world/app.js
   ```

1. テキストボックスに次のコードを入力します。

   ```
   // const axios = require('axios')
   // const url = 'http://checkip.amazonaws.com/';
   let response;
   
   /**
    *
    * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
    * @param {Object} event - API Gateway Lambda Proxy Input Format
    *
    * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html 
    * @param {Object} context
    *
    * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
    * @returns {Object} object - API Gateway Lambda Proxy Output Format
    * 
    */
   exports.lambdaHandler = async (event, context) => {
       try {
           // const ret = await axios(url);
           response = {
               'statusCode': 200,
               'body': JSON.stringify({
                   message: 'hello world',
                   // location: ret.data.trim()
               })
           }
       } catch (err) {
           console.log(err);
           return err;
       }
   
       return response
   };
   ```

1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

   これで、「`hello-world`」というフォルダと「`app.js`」というファイルが作成されました。

### test-handler.js ファイル
<a name="deploy-tut-lambda-cfn-files-test-handler-js"></a>

`test-handler.js` ファイルには、Lambda 関数の単位テストが含まれています。

**test-handler.js ファイルを追加するには**

1. リポジトリの **[ファイル]** で、**[ファイルを作成]** を選択します。

1. **[ファイル名]** に次のように入力します。

   ```
   hello-world/tests/unit/test-handler.js
   ```

1. テキストボックスに次のコードを入力します。

   ```
   'use strict';
   
   const app = require('../../app.js');
   const chai = require('chai');
   const expect = chai.expect;
   var event, context;
   
   describe('Tests index', function () {
       it('verifies successful response', async () => {
           const result = await app.lambdaHandler(event, context)
   
           expect(result).to.be.an('object');
           expect(result.statusCode).to.equal(200);
           expect(result.body).to.be.an('string');
   
           let response = JSON.parse(result.body);
   
           expect(response).to.be.an('object');
           expect(response.message).to.be.equal("hello world");
           // expect(response.location).to.be.an("string");
       });
   });
   ```

1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

   これで、`hello-world/tests/unit` フォルダの下位に「`test-handler.js`」というファイルが追加されました。

これで、すべてのソースファイルが追加されました。

少し時間を取って作業を再確認し、すべてのファイルを正しいフォルダに配置してください。フォルダは次のような構造になっています。

```
.
|— hello-world
|  |— tests
|     |— unit
|        |— test-handler.js
|  |— app.js
|— .npmignore
|— README.md
|— package.json
|— sam-template.yml
|— setup-sam.sh
```

## ステップ 6: ワークフローを作成して実行する
<a name="deploy-tut-lambda-cfn-workflow"></a>

このステップでは、Lambda ソースコードをパッケージ化し、デプロイするワークフローを作成します。ワークフローは、連続して実行される次の構成要素で構成されます。
+ トリガー – このトリガーは、ソースリポジトリに変更をプッシュすると、ワークフローを自動的に開始します。トリガーについての詳細は、「[トリガーを使用したワークフロー実行の自動的な開始](workflows-add-trigger.md)」を参照してください。
+ テストアクション (`Test`) – トリガー時に、このアクションは [[Node パッケージマネージャー (npm)]](https://www.npmjs.com/) をインストールし、`npm run test` コマンドを実行します。このコマンドは、`package.json` ファイルで定義された `test` スクリプトを実行するように npm に指示します。次に、`test` スクリプトはユニットテストを実行し、テストレポート (`junit.xml`) とコードカバレッジレポート (`clover.xml`) の 2 つのレポートを生成します。詳細については、「[package.json ファイル](#deploy-tut-lambda-cfn-files-package-json)」を参照してください。

  次に、テストアクションは XML レポートを CodeCatalyst レポートに変換し、テストアクションの **[Reports]** タブの CodeCatalyst コンソールに表示します。

  テストアクションの詳細については、「[ワークフローを使用したテストワークフローを使用したテスト](test-workflow-actions.md)」を参照してください。
+ ビルドアクション (`BuildBackend`) – テストアクションが完了すると、ビルドアクションは CLI AWS SAM をダウンロードしてインストールし、`hello-world`ソースをパッケージ化し、パッケージを Lambda サービスが想定する Amazon S3 バケットにコピーします。アクションは、 という新しい AWS SAM テンプレートファイルも出力`sam-template-packaged.yml`し、 という出力アーティファクトに配置します`buildArtifact`。

  ビルドアクションの詳細については、「[ワークフローを使用したビルド](build-workflow-actions.md)」を参照してください。
+ デプロイアクション (`DeployCloudFormationStack`) – ビルドアクションが完了すると、デプロイアクションはビルドアクション (`buildArtifact`) によって生成された出力アーティファクトを検索し、その中に AWS SAM テンプレートを見つけて、テンプレートを実行します。 AWS SAM テンプレートは、サーバーレスアプリケーションをデプロイするスタックを作成します。

**ワークフローを作成するには**

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. **[ワークフローを作成]** を選択します。

1. **[ソースリポジトリ]** で、`codecatalyst-cfn-source-repository` を選択します。

1. **[ブランチ]** で、`main` を選択します。

1. **[作成]** を選択します。

1. YAML サンプルコードを削除します。

1. 次の YAML コードを追加します。
**注記**  
次の YAML コードでは、必要に応じて `Connections:` セクションを省略できます。このセクションを省略する場合は、環境の **[デフォルト IAM ロール]** フィールドで指定されたロールに、[ステップ 2: AWS ロールを作成する](#deploy-tut-lambda-cfn-roles) で記述されている両方のロールのアクセス許可と信頼ポリシーが含まれていることを確認する必要があります。デフォルトの IAM ロールを使用して環境を設定する方法の詳細については、「[環境を作成する](deploy-environments-creating-environment.md)」を参照してください。

   ```
   Name: codecatalyst-cfn-workflow
   SchemaVersion: 1.0
   
   Triggers:
     - Type: PUSH
       Branches:
         - main   
   Actions:
     Test:
       Identifier: aws/managed-test@v1
       Inputs:
         Sources:
           - WorkflowSource
       Outputs:
         Reports:
           CoverageReport:
             Format: CLOVERXML
             IncludePaths:
               - "coverage/*"
           TestReport:
             Format: JUNITXML
             IncludePaths:
               - junit.xml
       Configuration:
         Steps:
           - Run: npm install
           - Run: npm run test  
     BuildBackend:
       Identifier: aws/build@v1
       DependsOn:
         - Test
       Environment:
         Name: codecatalyst-cfn-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-build-role
       Inputs:
         Sources:
           - WorkflowSource
       Configuration: 
         Steps:
           - Run: . ./setup-sam.sh
           - Run: sam package --template-file sam-template.yml --s3-bucket codecatalyst-cfn-s3-bucket --output-template-file sam-template-packaged.yml --region us-west-2
       Outputs:
         Artifacts:
           - Name: buildArtifact
             Files:
               - "**/*"
     DeployCloudFormationStack:
       Identifier: aws/cfn-deploy@v1
       DependsOn: 
         - BuildBackend
       Environment:
         Name: codecatalyst-cfn-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-deploy-role
       Inputs:
         Artifacts:
           - buildArtifact
         Sources: []
       Configuration:
         name: codecatalyst-cfn-stack
         region: us-west-2
         role-arn: arn:aws:iam::111122223333:role/StackRole
         template: ./sam-template-packaged.yml
         capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND
   ```

   上記のコードで置き換えます。
   + 環境の名前を持つ *[codecatalyst-cfn-environment]* の両方のインスタンス。
   + アカウント接続の表示名を持つ *[codecatalyst-account-connection]* の両方のインスタンス。表示名は数値である場合があります。詳細については、「[ステップ 3: CodeCatalyst に AWS ロールを追加する](#deploy-tut-lambda-cfn-roles-add)」を参照してください。
   + [ステップ 2: AWS ロールを作成する](#deploy-tut-lambda-cfn-roles) で作成したビルドロールの名前を持つ「*codecatalyst-build-role*」
   + [ステップ 4: Amazon S3 バケットを作成する](#deploy-tut-lambda-cfn-s3) で作成した Amazon S3 バケットの名前を持つ *[codecatalyst-cfn-s3-bucket]*。
   + Amazon S3 バケットが存在するリージョン (1 番目のインスタンス) とスタックがデプロイされるリージョン (2 番目のインスタンス) を持つ *[us-west-2]* のインスタンスの両方。これらのリージョンは異なる場合があります。このチュートリアルでは、両方のリージョンが `us-west-2` に設定されていることを前提としています。Amazon S3 および でサポートされているリージョンの詳細については CloudFormation、の[「サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照してください*AWS 全般のリファレンス*。
   + [ステップ 2: AWS ロールを作成する](#deploy-tut-lambda-cfn-roles) で作成したデプロイロールの名前を持つ「*codecatalyst-deploy-role*」
   + 「[前提条件](#deploy-tut-lambda-cfn-prereqs)」で作成した環境の名前を持つ *[codecatalyst-cfn-environment]*。
   + [ステップ 2: AWS ロールを作成する](#deploy-tut-lambda-cfn-roles) で作成したスタックロールの Amazon リソースネーム (ARN) を持つ *[arn:aws:iam::111122223333:role/StackRole]*。
**注記**  
ビルド、デプロイ、スタックロールを作成しない場合、*codecatalyst-build-role*、*codecatalyst-deploy-role*、および *arn:aws:iam::111122223333:role/StackRole* を `CodeCatalystWorkflowDevelopmentRole-spaceName` ロールの名前または ARN に置き換えます。このロールの詳細については、「[ステップ 2: AWS ロールを作成する](#deploy-tut-lambda-cfn-roles)」を参照してください。

   前述のコードのプロパティの詳細については、「[CloudFormation 「スタックをデプロイ」アクション YAML](deploy-action-ref-cfn.md)」を参照してください。

1. (オプション) **[検証]** を選択して、コミットする前に YAML コードが有効であることを確認します。

1. **[コミット]** を選択します。

1. **[ワークフローをコミット]** ダイアログボックスで、次のように入力します。

   1. **[ワークフローファイル名]** は、デフォルトの「`codecatalyst-cfn-workflow`」のままにします。

   1. **[コミットメッセージ]** には、次のように入力します。

      ```
      add initial workflow file
      ```

   1. **[リポジトリ]** で、**[codecatalyst-cfn-source-repository]** を選択します。

   1. **[ブランチ名]** で、**[main]** を選択します。

   1. **[コミット]** を選択します。

   これでワークフローが作成されました。ワークフローの先頭で定義されているトリガーにより、ワークフローの実行が自動的に開始されます。具体的には、`codecatalyst-cfn-workflow.yaml` ファイルをソースリポジトリにコミット (およびプッシュ) すると、トリガーによってワークフローの実行が開始します。

**ワークフロー実行の進行状況を確認するには**

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. 先ほど作成したワークフロー「`codecatalyst-cfn-workflow`」を選択します。

1. **[実行]** タブを選択します。

1. **[Run ID]** 列で、実行 ID を選択します。

1. **[Test]** を選択して、テストの進行状況を確認します。

1. **[BuildBackend]** を選択すると、ビルドの進行状況が表示されます。

1. **[DeployCloudFormationStack]** を選択してデプロイの進行状況を確認します。

   実行の詳細を表示する方法については、「[ワークフロー実行のステータスと詳細の表示](workflows-view-run.md)」を参照してください。

1. **[DeployCloudFormationStack]** アクションが完了したら、以下を実行します。
   + ワークフローの実行が成功したら、次の手順に進みます。
   + **[Test]** または **[BuildBackend]** ワークフローの実行が失敗した場合は、**[Logs]** を選択して問題をトラブルシューティングします。
   + **[DeployCloudFormationStack]** アクションでワークフローの実行が失敗した場合は、デプロイアクションを選択し、**[概要]** タブを選択します。**[CloudFormation イベント]** セクションにスクロールして、詳細なエラーメッセージを表示します。ロールバックが発生した場合は、ワークフローを再実行する前に、 の CloudFormation コンソール AWS から`codecatalyst-cfn-stack`スタックを削除します。

**デプロイを確認するには**

1. デプロイが成功したら、上部付近の水平メニューバーから **[変数 (7)]** を選択します。(右側のペインで **[変数]** を選択しないでください)。

1. **[HelloWorldApi]** の横にある `https://` URL をブラウザに貼り付けます。

   Lambda 関数からの **[hello world]** JSON メッセージが表示され、ワークフローが Lambda 関数と API Gateway を正常にデプロイおよび設定したことを示します。
**ヒント**  
CodeCatalyst が、いくつかの細かい設定を持つワークフロー図に、この URL を表示するようにできます。詳細については、「[ワークフロー図でのアプリケーション URL の表示](deploy-app-url.md)」を参照してください。

**ユニットテスト結果とコードカバレッジを検証するには**

1. ワークフロー図で、**[Test]** を選択し、**[Reports]** を選択します。

1. **[TestReport]** を選択してユニットテスト結果を表示するか、**[CoverageReport]** を選択してテスト対象のファイルのコードカバレッジの詳細を表示します。この場合、`app.js` と `test-handler.js` です。

**デプロイされたリソースを確認するには**

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

1.  AWS SAM テンプレートが作成した **codecatalyst-cfn-stack** API を確認します。API 名は、ワークフロー定義ファイル (`codecatalyst-cfn-workflow.yaml`) の `Configuration/name` の値から取得します。

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

1. ナビゲーションペインで、**[関数]** を選択します。

1. Lambda 関数「`codecatalyst-cfn-stack-HelloWorldFunction-string`」を選択します。

1. API Gateway が 関数のトリガーであることを確認できます。この統合は、 リソースタイプによって自動的に設定されました AWS SAM `AWS::Serverless::Function`。

## ステップ 7: 変更を行う
<a name="deploy-tut-lambda-cfn-change"></a>

このステップでは、Lambda ソースコードを変更してコミットします。このコミットにより、新しいワークフロー実行が開始します。この実行では、Lambda コンソールで指定されたデフォルトのトラフィックシフト設定を使用するブルーグリーンスキームで新しい Lambda 関数をデプロイします。

**Lambda ソースを変更するには**

1. CodeCatalyst で、プロジェクトに移動します。

1. ナビゲーションペインで **[コード]** を選択してから、**[ソースリポジトリ]** を選択します。

1. ソースリポジトリ「`codecatalyst-cfn-source-repository`」を選択します。

1. アプリケーションファイルを変更します。

   1. `hello-world` フォルダを選択します。

   1. `app.js` ファイルを選択します。

   1. **[編集]** を選択します。

   1. 行 23 において、`hello world` を **Tutorial complete\$1** に変更します。

   1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

      コミットにより、ワークフローの実行が開始します。名前の変更を反映するようにユニットテストを更新していないため、この実行は失敗します。

1. ユニットテストを更新します。

   1. `hello-world\tests\unit\test-handler.js` を選択してください。

   1. **[編集]** を選択します。

   1. 行 19 において、`hello world` を **Tutorial complete\$1** に変更します。

   1. **[コミット]** を選択し、再度 **[コミット]** を選択します。

      コミットにより、もう 1 つのワークフローの実行が開始します。この実行は成功します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. [`codecatalyst-cfn-workflow`] を選択し、**[実行]** を選択します。

1. 最新の実行の実行 ID を選択します。この時点では実行中です。

1. **[Test]**、**[BuildBackend]**、**[DeployCloudFormationStack]** を選択し、ワークフローの実行の進行状況を確認します。

1. ワークフローが完了したら、上部の近くの **[変数 (7)]** を選択します。

1. **[HelloWorldApi]** の横にある `https://` URL をブラウザに貼り付けます。

   `Tutorial complete!` メッセージがブラウザに表示されます。これは、アプリケーションが正常にデプロイされたことを示しています。

## クリーンアップ
<a name="deploy-tut-lambda-cfn-clean-up"></a>

このチュートリアルで使用されているファイルとサービスをクリーンアップして、料金が発生しないようにします。

**CodeCatalyst コンソールでクリーンアップするには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. `codecatalyst-cfn-workflow` を削除します。

1. `codecatalyst-cfn-environment` を削除します。

1. `codecatalyst-cfn-source-repository` を削除します。

1. `codecatalyst-cfn-project` を削除します。

**でクリーンアップするには AWS マネジメントコンソール**

1. CloudFormation で次のようにクリーンアップします。

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

   1. `codecatalyst-cfn-stack` を削除します。

      スタックを削除すると、API Gateway および Lambda サービスからすべてのチュートリアルリソースが削除されます。

1. Amazon S3 で次のようにクリーンアップします。

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

   1. [`codecatalyst-cfn-s3-bucket`] を選択します。

   1. バケットのコンテンツを削除します。

   1.  バケットを削除します。

1. IAM で次のようにクリーンアップします。

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

   1. `codecatalyst-deploy-policy` を削除します。

   1. `codecatalyst-build-policy` を削除します。

   1. `codecatalyst-stack-policy` を削除します。

   1. `codecatalyst-deploy-role` を削除します。

   1. `codecatalyst-build-role` を削除します。

   1. `codecatalyst-stack-role` を削除します。

このチュートリアルでは、CodeCatalyst ワークフローとデプロイスタックアクションを使用して、サーバーレスアプリケーションを CloudFormation ** CloudFormation スタックとしてデプロイ**する方法を学習しました。

# CloudFormation 「スタックのデプロイ」アクションの追加
<a name="deploy-action-cfn-adding"></a>

次の手順を使用して、ワークフローに**スタックのデプロイ CloudFormation **アクションを追加します。

------
#### [ Visual ]

**ビジュアルエディタを使用して CloudFormation 「スタックのデプロイ」アクションを追加するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトを選択します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. ワークフローの名前を選択します。ワークフローが定義されているソースリポジトリまたはブランチ名でフィルタリングすることも、ワークフロー名またはステータスでフィルタリングすることもできます。

1. **[編集]** を選択します。

1. **[ビジュアル]** を選択します。

1. 左上で **[\$1 アクション]** を選択してアクションカタログを開きます。

1. ドロップダウンリストから、**[Amazon CodeCatalyst]** を選択します。

1. ** CloudFormation スタックのデプロイ**アクションを検索し、次のいずれかを実行します。
   + プラス記号 (**\$1**) を選択してワークフロー図にアクションを追加し、設定ペインを開きます。

     または
   + ** CloudFormation スタックをデプロイ **を選択します。アクションの詳細ダイアログボックスが表示されます。このダイアログボックスでは、次の操作を行います。
     + (オプション) **[ダウンロード]** を選択して、[アクションのソースコードを表示](workflows-view-source.md#workflows-view-source.title)します。
     + **[ワークフローに追加]** を選択して、ワークフロー図にアクションを追加し、設定ペインを開きます。

1. **[入力]** タブと **[設定]** タブで、必要に応じてフィールドに入力します。各フィールドの説明については、「[CloudFormation 「スタックをデプロイ」アクション YAML](deploy-action-ref-cfn.md)」を参照してください。このリファレンスでは、各フィールド (および対応する YAML プロパティ値) について、YAML エディタとビジュアルエディタの両方で表示される詳細情報を提供しています。

1. (オプション) **[検証]** を選択して、コミットする前にワークフローの YAML コードを検証します。

1. **[コミット]** を選択し、コミットメッセージを入力し、再度 **[コミット]** を選択します。

------
#### [ YAML ]

**YAML エディタを使用して CloudFormation 「スタックのデプロイ」アクションを追加するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトを選択します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. ワークフローの名前を選択します。ワークフローが定義されているソースリポジトリまたはブランチ名でフィルタリングすることも、ワークフロー名またはステータスでフィルタリングすることもできます。

1. **[編集]** を選択します。

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

1. 左上で **[\$1 アクション]** を選択してアクションカタログを開きます。

1. ドロップダウンリストから、**[Amazon CodeCatalyst]** を選択します。

1. ** CloudFormation スタックのデプロイ**アクションを検索し、次のいずれかを実行します。
   + プラス記号 (**\$1**) を選択してワークフロー図にアクションを追加し、設定ペインを開きます。

     または
   + ** CloudFormation スタックをデプロイ** を選択します。アクションの詳細ダイアログボックスが表示されます。このダイアログボックスでは、次の操作を行います。
     + (オプション) **[ダウンロード]** を選択して、[アクションのソースコードを表示](workflows-view-source.md#workflows-view-source.title)します。
     + **[ワークフローに追加]** を選択して、ワークフロー図にアクションを追加し、設定ペインを開きます。

1. 必要に応じて、YAML コードのプロパティを変更します。使用可能な各プロパティの説明は、「[CloudFormation 「スタックをデプロイ」アクション YAML](deploy-action-ref-cfn.md)」に記載されています。

1. (オプション) **[検証]** を選択して、コミットする前にワークフローの YAML コードを検証します。

1. **[コミット]** を選択し、コミットメッセージを入力し、再度 **[コミット]** を選択します。

------

# ロールバックの設定
<a name="deploy-consumption-enable-alarms"></a>

デフォルトでは、**スタックのデプロイ CloudFormation **アクションが失敗すると、 はスタック CloudFormation を最後の既知の安定状態にロールバックします。アクションが失敗したときだけでなく、指定された Amazon CloudWatch アラームが発生したときにもロールバックが発生するように動作を変更できます。CloudWatch アラームの使用の詳細については、*Amazon CloudWatch ユーザーガイド*の「[Amazon CloudWatch アラームの使用](https://docs.aws.amazon.com/)」を参照してください。

デフォルトの動作を変更して、アクションが失敗しても CloudFormation がスタックをロールバックしないようにすることもできます。

ロールバックを設定するには、以下の手順に従います。

**注記**  
ロールバックを手動で開始することはできません。

------
#### [ Visual ]

**[開始する前に]**

1. 機能している**スタックのデプロイ CloudFormation **アクションを含む[ワークフロー](workflow.md)があることを確認します。詳細については、「[CloudFormation スタックのデプロイ](deploy-action-cfn.md)」を参照してください。

1. **スタックロール - スタックのデプロイアクションのオプション**フィールドで指定されたロールに、**CloudWatchFullAccess** アクセス許可を必ず含めてください。 ** CloudFormation **必要なアクセス許可を持つロールの作成の詳細については、「[ステップ 2: AWS ロールを作成する](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles)」を参照してください。

**CloudFormation 「スタックをデプロイ」アクションのロールバックアラームを設定するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトを選択します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. ワークフローの名前を選択します。ワークフローが定義されているソースリポジトリまたはブランチ名でフィルタリングすることも、ワークフロー名またはステータスでフィルタリングすることもできます。

1. **[編集]** を選択します。

1. **[ビジュアル]** を選択します。

1. ** CloudFormation スタックのデプロイ**アクションを選択します。

1. 詳細ペインで、**[設定]** を選択します。

1. 下部で、**[アドバンスト]** を展開します。

1. **[モニターアラーム ARN]** で、**[アラームを追加]** を選択します。

1. 次のフィールドに情報を入力します。
   + **アラーム ARN**

     ロールバックトリガーを追加するには、Amazon CloudWatch アラームの Amazon リソースネーム (ARN) を指定します。例えば、`arn:aws:cloudwatch::123456789012:alarm/MyAlarm`。最大 5 個のロールバックトリガーを持つことができます。
**注記**  
CloudWatch アラーム ARN を指定する場合は、アクションが CloudWatch にアクセスできるようにする追加のアクセス許可も設定する必要があります。詳細については、「[ロールバックの設定](#deploy-consumption-enable-alarms)」を参照してください。
   + **モニタリングタイム**

     CloudFormation が指定されたアラームをモニタリングする 0 ～ 180 分の時間を指定します。モニタリングは、すべてのスタックリソースがデプロイされた*後に*開始します。アラームが指定されたモニタリング時間内に発生した場合、デプロイは失敗し、CloudFormation はスタックオペレーション全体をロールバックします。

     デフォルト: 0。CloudFormation は、スタックリソースがデプロイされている間だけアラームをモニタリングします。その後はモニタリングしません。

------
#### [ YAML ]

**CloudFormation 「スタックをデプロイ」アクションのロールバックトリガーを設定するには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトを選択します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. **[ CloudFormation スタックをデプロイ]** アクションを含むワークフローの名前を選択します。ワークフローが定義されているソースリポジトリまたはブランチ名でフィルタリングすることも、ワークフロー名またはステータスでフィルタリングすることもできます。

1. **[編集]** を選択します。

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

1. ロールバックトリガーを追加するには、YAML コードに `monitor-alarm-arns` および `monitor-timeout-in-minutes` プロパティを追加します。各プロパティの説明については、「[CloudFormation 「スタックをデプロイ」アクション YAML](deploy-action-ref-cfn.md)」を参照してください。

1. ** CloudFormation スタックのデプロイ**アクションの `role-arn`プロパティで指定されたロールに、**CloudWatchFullAccess** アクセス許可を必ず含めてください。必要なアクセス許可を持つロールの作成の詳細については、「[ステップ 2: AWS ロールを作成する](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles)」を参照してください。

------

------
#### [ Visual ]

**CloudFormation 「スタックのデプロイ」アクションのロールバックを無効にするには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトを選択します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. **[ CloudFormation スタックをデプロイ]** アクションを含むワークフローの名前を選択します。ワークフローが定義されているソースリポジトリまたはブランチ名でフィルタリングすることも、ワークフロー名またはステータスでフィルタリングすることもできます。

1. **[編集]** を選択します。

1. **[ビジュアル]** を選択します。

1. ** CloudFormation スタックのデプロイ**アクションを選択します。

1. 詳細ペインで、**[設定]** を選択します。

1. 下部で、**[アドバンスト]** を展開します。

1. **[ロールバックを無効化]** をオンにします。

------
#### [ YAML ]

**CloudFormation 「スタックのデプロイ」アクションのロールバックを無効にするには**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/) で CodeCatalyst コンソールを開きます。

1. プロジェクトを選択します。

1. ナビゲーションペインで **[CI/CD]**、**[ワークフロー]** の順に選択します。

1. **[ CloudFormation スタックをデプロイ]** アクションを含むワークフローの名前を選択します。ワークフローが定義されているソースリポジトリまたはブランチ名でフィルタリングすることも、ワークフロー名またはステータスでフィルタリングすることもできます。

1. **[編集]** を選択します。

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

1. ロールバックを停止するには、YAML コードに `disable-rollback: 1` プロパティを追加します。この動作の説明については、「[CloudFormation 「スタックをデプロイ」アクション YAML](deploy-action-ref-cfn.md)」を参照してください。

------

# CloudFormation 「スタックをデプロイ」変数
<a name="deploy-action-cfn-variables"></a>

** CloudFormation スタックのデプロイ**アクションは、実行時に次の変数を生成して設定します。これらは*事前定義済み変数*と呼ばれます。

ワークフローでこれらの変数を参照する方法については、「[事前定義済み変数の使用](workflows-using-predefined-variables.md)」を参照してください


| キー | 値 | 
| --- | --- | 
|  deployment-platform  |  デプロイプラットフォームの名前。 `AWS:CloudFormation` にハードコードされています。  | 
|  リージョン  |  ワークフローの実行中に にデプロイ AWS リージョン された のリージョンコード。 例: `us-west-2`  | 
|  stack-id  |  デプロイジョブの Amazon リソースネーム (ARN)。 例: `arn:aws:cloudformation:us-west-2:111122223333:stack/codecatalyst-cfn-stack/6aad4380-100a-11ec-a10a-03b8a84d40df`  | 

# CloudFormation 「スタックをデプロイ」アクション YAML
<a name="deploy-action-ref-cfn"></a>

** CloudFormation スタックのデプロイ**アクションの YAML 定義を次に示します。このアクションの使用方法については、「[CloudFormation スタックのデプロイ](deploy-action-cfn.md)」を参照してください。

このアクション定義は、より広範なワークフロー定義ファイル内のセクションとして存在します。ファイルの詳細については、「[ワークフロー YAML 定義](workflow-reference.md)」を参照してください。

**注記**  
後続の YAML プロパティのほとんどには、対応する UI 要素がビジュアルエディタにあります。UI 要素を検索するには、**[Ctrl\$1F]** を使用します。要素は、関連付けられた YAML プロパティとともに一覧表示されます。

```
# The workflow definition starts here.
# See 最上位プロパティ for details.
        
Name: MyWorkflow
SchemaVersion: 1.0 
Actions:

# The action definition starts here.    
  DeployCloudFormationStack:  
    Identifier: aws/cfn-deploy@v1
    DependsOn:
      - build-action
    Compute:  
      Type: EC2 | Lambda
      Fleet: fleet-name
    Timeout: timeout-minutes
    Environment:
      Name: environment-name
      Connections:
        - Name: account-connection-name
          Role: DeployRole
    Inputs:
      Sources:
        - source-name-1
      Artifacts:
        - CloudFormation-artifact
    Configuration:
      name: stack-name
      region: us-west-2
      template: template-path
      role-arn: arn:aws:iam::123456789012:role/StackRole        
      capabilities: CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND
      parameter-overrides: KeyOne=ValueOne,KeyTwo=ValueTwo | path-to-JSON-file
      no-execute-changeset: 1|0
      fail-on-empty-changeset: 1|0
      disable-rollback: 1|0
      termination-protection: 1|0
      timeout-in-minutes: minutes
      notification-arns: arn:aws:sns:us-east-1:123456789012:MyTopic,arn:aws:sns:us-east-1:123456789012:MyOtherTopic
      monitor-alarm-arns: arn:aws:cloudwatch::123456789012:alarm/MyAlarm,arn:aws:cloudwatch::123456789012:alarm/MyOtherAlarm
      monitor-timeout-in-minutes: minutes       
      tags: '[{"Key":"MyKey1","Value":"MyValue1"},{"Key":"MyKey2","Value":"MyValue2"}]'
```

## DeployCloudFormationStack
<a name="deploy.action.cfn.deploycloudformationstack"></a>

(必須)

アクションの名前を指定します。すべてのアクション名は、ワークフロー内で一意である必要があります。アクション名で使用できるのは、英数字 (a～z、A～Z、0～9)、ハイフン (-)、アンダースコア (\$1) のみです。スペースは使用できません。引用符を使用して、アクション名の特殊文字とスペースを有効にすることはできません。

デフォルト: `DeployCloudFormationStack_nn`。

対応する UI: [設定] タブ/**[アクション表示名]**

## Identifier
<a name="deploy.action.cfn.identifier"></a>

(*DeployCloudFormationStack*/**Identifier**)

(必須)

アクションを識別します。バージョンを変更したい場合でない限り、このプロパティを変更しないでください。詳細については、「[使用するアクションバージョンの指定](workflows-action-versions.md)」を参照してください。

デフォルト: `aws/cfn-deploy@v1`。

対応する UI: ワークフロー図/DeployCloudFormationStack\$1nn/**aws/cfn-deploy@v1** ラベル

## DependsOn
<a name="deploy.action.cfn.dependson"></a>

(*DeployCloudFormationStack*/**DependsOn**)

(オプション)

このアクションを実行するために正常に実行する必要があるアクション、アクショングループ、またはゲートを指定します。

「DependsOn」機能の詳細については、「[アクションの順序付け](workflows-depends-on.md)」を参照してください。

対応する UI: [入力] タブ/**[依存 - オプション]**

## Compute
<a name="deploy.action.cfn.computename"></a>

(*DeployCloudFormationStack*/**Compute**)

(オプション)

ワークフローアクションの実行に使用されるコンピューティングエンジンです。コンピューティングはワークフローレベルまたはアクションレベルで指定できますが、両方を指定することはできません。ワークフローレベルで指定すると、コンピューティング設定はワークフローで定義されたすべてのアクションに適用されます。ワークフローレベルでは、同じインスタンスで複数のアクションを実行することもできます。詳細については、「[アクション間でのコンピューティングの共有する](compute-sharing.md)」を参照してください。

対応する UI: *[なし]*

## Type
<a name="deploy.action.cfn.computetype"></a>

(*DeployCloudFormationStack*/Compute/**Type**)

([Compute](#deploy.action.cfn.computename) が含まれている場合は必須)

コンピューティングエンジンのタイプです。次のいずれかの値を使用できます。
+ **EC2** (ビジュアルエディタ) または `EC2` (YAML エディタ)

  アクション実行時の柔軟性を目的として最適化されています。
+ **Lambda** (ビジュアルエディタ) または `Lambda` (YAML エディタ)

  アクションの起動速度を最適化しました。

コンピューティングタイプの詳細については、「[コンピューティングタイプ](workflows-working-compute.md#compute.types)」を参照してください。

対応する UI: [設定] タブ/[高度な設定 - オプション]/**[コンピューティングタイプ]**

## Fleet
<a name="deploy.action.cfn.computefleet"></a>

(*DeployCloudFormationStack*/Compute/**Fleet**)

(オプション)

ワークフローまたはワークフローアクションを実行するマシンまたはフリートを指定します。オンデマンドフリートでは、アクションが開始すると、ワークフローは必要なリソースをプロビジョニングし、アクションが完了するとマシンは破棄されます。オンデマンドフリートの例: `Linux.x86-64.Large`、`Linux.x86-64.XLarge`。オンデマンドフリートの詳細については、「[オンデマンドフリートのプロパティ](workflows-working-compute.md#compute.on-demand)」を参照してください。

プロビジョニングされたフリートでは、ワークフローアクションを実行するように専用マシンのセットを設定します。これらのマシンはアイドル状態のままで、アクションをすぐに処理できます。プロビジョニングされたフリートの詳細については、「[プロビジョニングされたフリートのプロパティ](workflows-working-compute.md#compute.provisioned-fleets)」を参照してください。

`Fleet` を省略した場合、デフォルトは `Linux.x86-64.Large` です。

対応する UI: [設定] タブ/[高度な設定 - オプション]/**[コンピューティングフリート]**

## Timeout
<a name="deploy.action.cfn.timeout"></a>

(*DeployCloudFormationStack*/**Timeout**)

(オプション)

CodeCatalyst がアクションを終了するまでにアクションを実行できる時間を分単位 (YAML エディタ) または時間分単位 (ビジュアルエディタ) で指定します。最小値は 5 分で、最大値は [CodeCatalyst のワークフローのクォータ](workflows-quotas.md) で記述されています。デフォルトのタイムアウトは、最大タイムアウトと同じです。

対応する UI: [設定] タブ/**[分単位のタイムアウト - オプション]**

## Environment
<a name="deploy.action.cfn.environment"></a>

(*DeployCloudFormationStack*/**Environment**)

(必須)

アクションで使用する CodeCatalyst 環境を指定します。アクションは、選択した環境で指定された AWS アカウント およびオプションの Amazon VPC に接続します。アクションは、環境で指定されたデフォルトの IAM ロールを使用して に接続し AWS アカウント、[Amazon VPC 接続](https://docs.aws.amazon.com/codecatalyst/latest/adminguide/managing-vpcs.add.html)で指定された IAM ロールを使用して Amazon VPC に接続します。

**注記**  
デフォルトの IAM ロールにアクションに必要なアクセス許可がない場合は、別のロールを使用するようにアクションを設定できます。詳細については、「[アクションの IAM ロールの変更](deploy-environments-switch-role.md)」を参照してください。

環境タグ付けの詳細については、「[AWS アカウント と VPCs へのデプロイ](deploy-environments.md)」と「[環境を作成する](deploy-environments-creating-environment.md)」を参照してください。

対応する UI: [設定] タブ/**[環境]**

## Name
<a name="deploy.action.cfn.environment.name"></a>

(*DeployCloudFormationStack*/Environment/**Name**)

([Environment](#deploy.action.cfn.environment) が含まれている場合は必須)

アクションに関連付ける既存の環境の名前を指定します。

対応する UI: [設定] タブ/**[環境]**

## Connections
<a name="deploy.action.cfn.environment.connections"></a>

(*DeployCloudFormationStack*/Environment/**Connections**)

(新しいバージョンのアクションでは任意。古いバージョンでは必須)

アクションに関連付けるアカウント接続を指定します。`Environment` で最大 1 つのアカウント接続を指定できます。

アカウント接続を指定しない場合:
+ アクションは、CodeCatalyst コンソールの環境で指定された AWS アカウント 接続とデフォルトの IAM ロールを使用します。アカウント接続とデフォルトの IAM ロールを環境に追加する方法については、「[環境を作成する](deploy-environments-creating-environment.md)」を参照してください。
+ デフォルトの IAM ロールには、アクションに必要なポリシーとアクセス許可が含まれている必要があります。これらのポリシーとアクセス許可を確認するには、アクションの YAML 定義ドキュメントの **[ロール]** プロパティの説明を参照してください。

アカウント接続の詳細については、「[接続された AWS リソースへのアクセスを許可する AWS アカウント](ipa-connect-account.md)」を参照してください。アカウント接続を環境に追加する方法については、「[環境を作成する](deploy-environments-creating-environment.md)」を参照してください。

対応する UI: アクションのバージョンに応じて、次のいずれか。
+ (新しいバージョン) [設定] タブ/[環境]/[*my-environment* の内容]/3 つのドットメニュー/**[ロールを切り替える]**
+ (旧バージョン) [設定] タブ/「環境/アカウント/ロール」/**[AWS アカウント接続]**

## Name
<a name="deploy.action.cfn.environment.connections.name"></a>

(*DeployCloudFormationStack*/Environment/Connections/**Name**)

([Connections](#deploy.action.cfn.environment.connections) が含まれている場合は必須)

アカウント接続の名前を指定します。

対応する UI: アクションのバージョンに応じて、次のいずれか。
+ (新しいバージョン) [設定] タブ/[環境]/[*my-environment* の内容]/3 つのドットメニュー/**[ロールを切り替える]**
+ (旧バージョン) [設定] タブ/「環境/アカウント/ロール」/**[AWS アカウント接続]**

## Role
<a name="deploy.action.cfn.environment.connections.role"></a>

(*DeployCloudFormationStack*/Environment/Connections/**Role**)

([Connections](#deploy.action.cfn.environment.connections) が含まれている場合は必須)

** CloudFormation スタックのデプロイ**アクションが AWS および CloudFormation サービスにアクセスするために使用する IAM ロールの名前を指定します。[ロールを CodeCatalyst スペース に追加](ipa-connect-account-addroles.md)し、ロールに次のポリシーが含まれていることを確認します。

IAM ロールを指定しない場合、アクションは CodeCatalyst コンソールの [[環境]](deploy-environments.md) に記載されているデフォルトの IAM ロールを使用します。環境でデフォルトのロールを使用する場合は、次のポリシーがあることを確認してください。
+ 以下のアクセス許可ポリシー:
**警告**  
アクセス許可は、次のポリシーに示すアクセス許可に制限します。より広範なアクセス許可を持つロールを使用すると、セキュリティリスクが発生する可能性があります。
**注記**  
ロールを初めて使用するとき、リソースポリシーステートメントで次のワイルドカードを使用し、使用可能になった後にリソース名でポリシーをスコープダウンします。  

  ```
  "Resource": "*"
  ```
+ 次のカスタム信頼ポリシー:

**注記**  
必要に応じて、このアクションで `CodeCatalystWorkflowDevelopmentRole-spaceName` ロールを使用できます。このロールの詳細については、「[アカウントとスペース用の **CodeCatalystWorkflowDevelopmentRole-*spaceName*** ロールを作成する](ipa-iam-roles.md#ipa-iam-roles-service-create)」を参照してください。`CodeCatalystWorkflowDevelopmentRole-spaceName` ロールにはフルアクセス許可があり、セキュリティ上のリスクをもたらす可能性があることを理解してください。このロールは、セキュリティが懸念されないチュートリアルやシナリオでのみ使用することをお勧めします。

対応する UI: アクションのバージョンに応じて、次のいずれか。
+ (新しいバージョン) [設定] タブ/[環境]/[*my-environment* の内容]/3 つのドットメニュー/**[ロールを切り替える]**
+ (旧バージョン) [設定] タブ/「環境/アカウント/ロール」/**[ロール]**

## Inputs
<a name="deploy.action.cfn.inputs"></a>

(*DeployCloudFormationStack*/**Inputs**)

(オプション)

`Inputs` セクションでは、ワークフローの実行中に `DeployCloudFormationStack` に必要なデータを定義します。

**注記**  
**Deploy CloudFormation スタック**アクションごとに最大 4 つの入力 (1 つのソースと 3 つのアーティファクト) が許可されます。

異なる入力 (ソースとアーティファクトなど) にあるファイルを参照する必要がある場合、ソース入力はプライマリ入力で、アーティファクトはセカンダリ入力になります。セカンダリ入力内のファイルへの参照には、プライマリからファイルを区別するための特別なプレフィックスが付きます。詳細については、「[例: 複数のアーティファクトでのファイルの参照](workflows-working-artifacts-ex.md#workflows-working-artifacts-ex-ref-file)」を参照してください。

対応する UI: **[入力] タブ**

## Sources
<a name="deploy.action.cfn.inputs.sources"></a>

(*DeployCloudFormationStack*/Inputs/**Sources**)

(CloudFormation または AWS SAM テンプレートがソースリポジトリに保存されている場合は必須)

CloudFormation または AWS SAM テンプレートがソースリポジトリに保存されている場合は、そのソースリポジトリのラベルを指定します。現在サポートされているラベルは、`WorkflowSource` のみです。

CloudFormation または AWS SAM テンプレートがソースリポジトリに含まれていない場合は、別のアクションによって生成されたアーティファクト、または Amazon S3 バケットに存在する必要があります。

sources の詳細については、「[ワークフローへのソースリポジトリの接続](workflows-sources.md)」を参照してください。

対応する UI: 入力タブ/**ソース - オプション**

## Artifacts - input
<a name="deploy.action.cfn.inputs.artifacts"></a>

(*DeployCloudFormationStack*/Inputs/**Artifacts**)

(CloudFormation または AWS SAM テンプレートが前のアクションの[出力アーティファクト](workflows-working-artifacts-output.md)に保存されている場合に必要です)

デプロイする CloudFormation または AWS SAM テンプレートが、前のアクションによって生成されたアーティファクトに含まれている場合は、ここでそのアーティファクトを指定します。CloudFormation テンプレートがアーティファクトに含まれていない場合は、ソースリポジトリまたは Amazon S3 バケットに存在する必要があります。

アーティファクトの詳細 (例を含む) については、「[アクション間でのアーティファクトとファイルの共有](workflows-working-artifacts.md)」を参照してください。

対応する UI: [設定] タブ/**[アーティファクト - オプション]**

## Configuration
<a name="deploy.action.cfn.configuration"></a>

(*DeployCloudFormationStack*/**Configuration**)

(必須)

アクションの設定プロパティを定義できるセクション。

対応する UI: **[設定]** タブ

## name
<a name="deploy.action.cfn.stackname"></a>

(*DeployCloudFormationStack*/Configuration/**name**)

(必須)

**[ CloudFormation スタックをデプロイ]** アクションが作成または更新する CloudFormation スタックの名前を指定します。

対応する UI: [設定] タブ/**[スタック名]**

## region
<a name="deploy.action.cfn.stackregion"></a>

(*DeployCloudFormationStack*/Configuration/**region**)

(必須)

スタックをデプロイする AWS リージョン を指定します。リージョンコードの一覧については、「[リージョンエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#region-names-codes)」を参照してください。

対応する UI: [設定] タブ/**[スタックリージョン]**

## template
<a name="deploy.action.cfn.templatepath"></a>

(*DeployCloudFormationStack*/Configuration/**template**)

(必須)

CloudFormation または AWS SAM テンプレートファイルの名前とパスを指定します。テンプレートは JSON または YAML 形式にすることができ、ソースリポジトリ、以前のアクションのアーティファクト、または Amazon S3 バケットに格納できます。テンプレートファイルがソースリポジトリまたはアーティファクトにある場合、パスはソースまたはアーティファクトルートを基準としています。テンプレートが Amazon S3 バケットにある場合、パスはテンプレートの **[オブジェクト URL]** 値です。

例:

`./MyFolder/MyTemplate.json`

`MyFolder/MyTemplate.yml`

`https://MyBucket.s3.us-west-2.amazonaws.com/MyTemplate.yml`

**注記**  
テンプレートのファイルパスにプレフィックスを追加して、見つけるアーティファクトまたはソースを示す必要がある場合があります。詳細については、「[ソースリポジトリファイルの参照](workflows-sources-reference-files.md)」および「[アーティファクト内のファイルの参照](workflows-working-artifacts-refer-files.md)」を参照してください。

対応する UI: [設定] タブ/**[テンプレート]**

## role-arn
<a name="deploy.action.cfn.stackrolearn"></a>

(*DeployCloudFormationStack*/Configuration/**role-arn**)

(必須)

スタックロールの Amazon リソースネーム (ARN) を指定します。CloudFormation はこのロールを使用して、スタック内のリソースにアクセスして変更します。例: `arn:aws:iam::123456789012:role/StackRole`。

スタックロールに以下が含まれていることを確認します。
+ 1 つ以上のアクセス許可ポリシー。ポリシーは、スタックにあるリソースによって異なります。たとえば、スタックに AWS Lambda 関数が含まれている場合は、Lambda へのアクセスを許可するアクセス許可を追加する必要があります。[チュートリアル: サーバーレスアプリケーションをデプロイする](deploy-tut-lambda.md) で説明されているチュートリアルに従った場合、「[スタックロールを作成するには](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles-stack)」というタイトルの手順が含まれています。この手順には、一般的なサーバーレスアプリケーションスタックをデプロイする場合にスタックロールが必要とするアクセス許可が一覧表示されます。
**警告**  
スタック内のリソースにアクセスするために CloudFormation サービスが必要とするアクセス許可に制限します。より広範なアクセス許可を持つロールを使用すると、セキュリティリスクが発生する可能性があります。
+ 次の信頼ポリシーを使用します。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "",
              "Effect": "Allow",
              "Principal": {
                  "Service": "cloudformation.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

必要に応じて、このロールをアカウント接続に関連付けます。IAM ロールとアカウント接続の関連付けの詳細については、「[IAM ロールをアカウント接続に追加する](ipa-connect-account-addroles.md)」を参照してください。スタックロールをアカウント接続に関連付けない場合、スタックロールはビジュアルエディタの **[スタックロール]** ドロップダウンリストに表示されません。ただし、ロール ARN は YAML エディタを使用して `role-arn` フィールドで指定できます。

**注記**  
必要に応じて、このアクションで `CodeCatalystWorkflowDevelopmentRole-spaceName` ロールを使用できます。このロールの詳細については、「[アカウントとスペース用の **CodeCatalystWorkflowDevelopmentRole-*spaceName*** ロールを作成する](ipa-iam-roles.md#ipa-iam-roles-service-create)」を参照してください。`CodeCatalystWorkflowDevelopmentRole-spaceName` ロールにはフルアクセス許可があり、セキュリティ上のリスクをもたらす可能性があることを理解してください。このロールは、セキュリティが懸念されないチュートリアルやシナリオでのみ使用することをお勧めします。

対応する UI: [設定] タブ/**[スタックロール - オプション]**

## capabilities
<a name="deploy.action.cfn.capabilities"></a>

(*DeployCloudFormationStack*/Configuration/**capabilities**)

(必須)

が特定のスタック CloudFormation を作成するために必要な IAM 機能のリストを指定します。ほとんどの場合、`CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND` のデフォルト値は `capabilities` のままにすることができます。

**[ CloudFormation スタックをデプロイ]** アクションのログに `##[error] requires capabilities: [capability-name]` が表示された場合は、「[IAM 機能エラーを解決するにはどうすればよいですか?](troubleshooting-workflows.md#troubleshooting-workflows-capabilities)」を参照して問題を解決する方法を確認してください。

IAM 機能の詳細については、[「IAM ユーザーガイド」の CloudFormation 「 テンプレートでの IAM リソースの承認](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities)」を参照してください。 **

対応する UI: [設定] タブ/アドバンスト/**[機能]**

## parameter-overrides
<a name="deploy.action.cfn.parameter.overrides"></a>

(*DeployCloudFormationStack*/Configuration/**parameter-overrides**)

(オプション)

デフォルト値を持たない CloudFormation 、またはデフォルト値以外の値を指定するパラメータを または AWS SAM テンプレートで指定します。パラメータの詳細については、 * AWS CloudFormation ユーザーガイド*の[「パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)」を参照してください。

`parameter-overrides` プロパティは以下を受け入れます。
+ パラメータと値を含む JSON ファイル。
+ パラメータと値のカンマ区切りリスト。

**JSON ファイルを指定するには**

1. JSON ファイルで次のいずれかの構文を使用していることを確認します。

   ```
   {
     "Parameters": {
       "Param1": "Value1",
       "Param2": "Value2",
       ...
     }
   }
   ```

   または…

   ```
   [
     {
        "ParameterKey": "Param1",
        "ParameterValue": "Value1"
     },
     ...
   ]
   ```

   (他の構文もありますが、記述時に CodeCatalyst ではサポートされていません。) JSON ファイルで CloudFormation パラメータを指定する方法の詳細については、「*AWS CLI コマンドリファレンス*」の「[サポートされている JSON 構文](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/deploy/index.html#supported-json-syntax)」を参照してください。

1. 次のいずれかの形式を使用して、JSON ファイルへのパスを指定します。
   + JSON ファイルが前のアクションの出力アーティファクトに存在する場合は、以下を使用します。

     `file:///artifacts/current-action-name/output-artifact-name/path-to-json-file`

     詳細については、「**例 1**」を参照してください。
   + JSON ファイルがソースリポジトリにある場合は、以下を使用します。

     `file:///sources/WorkflowSource/path-to-json-file`

     詳細については、「**例 2**」を参照してください。

     **例 1** – JSON ファイルは出力アーティファクトにあります

     ```
     ##My workflow YAML
     ...
     Actions:
       MyBuildAction:
         Identifier: aws/build@v1
         Outputs:
           Artifacts:
             - Name: ParamArtifact
               Files:
                 - params.json
         Configuration:
         ...
       MyDeployCFNStackAction:
         Identifier: aws/cfn-deploy@v1
         Configuration:
           parameter-overrides: file:///artifacts/MyDeployCFNStackAction/ParamArtifact/params.json
     ```

     **例 2** – JSON ファイルは、ソースリポジトリの「`my/folder`」という名前のフォルダにあります。

     ```
     ##My workflow YAML
     ...
     Actions:
       MyDeployCloudFormationStack:
         Identifier: aws/cfn-deploy@v1
         Inputs:
           Sources:
             - WorkflowSource
         Configuration:
           parameter-overrides: file:///sources/WorkflowSource/my/folder/params.json
     ```

**パラメータのカンマ区切りリストを使用するには**
+ 次の形式を使用して、`parameter-overrides` プロパティにパラメータ名と値のペアを追加します。

  `param-1=value-1,param-2=value-2`

  たとえば、次の CloudFormation テンプレートがあるとします。

  ```
  ##My CloudFormation template
  
  Description: My CloudFormation template
  
  Parameters:
    InstanceType:
      Description: Defines the Amazon EC2 compute for the production server.
      Type: String
      Default: t2.micro
      AllowedValues:
        - t2.micro
        - t2.small
        - t3.medium
      
  Resources:
  ...
  ```

  ...`parameter-overrides` プロパティは次のように設定できます。

  ```
  ##My workflow YAML
  ...
  Actions:
  ...
    DeployCloudFormationStack:
      Identifier: aws/cfn-deploy@v1
      Configuration:
        parameter-overrides: InstanceType=t3.medium,UseVPC=true
  ```
**注記**  
パラメータ名は、`undefined` を値として使用して、対応する値なしで指定できます。例えば、次のようになります。  
`parameter-overrides: MyParameter=undefined`  
 スタックの更新中に、CloudFormation は指定されたパラメータ名に既存のパラメータ値を使用するという効果があります。

対応する UI:
+ [設定] タブ/アドバンスト/**[パラメータのオーバーライド]**
+ ファイルを使用して[設定] タブ/アドバンスト/パラメータオーバーライド/**[オーバーライドを指定]**
+ 値セットを使用して[設定] タブ/アドバンスト/パラメータオーバーライド/**値セットを使用してオーバーライドを指定**

## no-execute-changeset
<a name="deploy.action.cfn.noexecutechangeset"></a>

(*DeployCloudFormationStack*/Configuration/**no-execute-changeset**)

(オプション)

CodeCatalyst で CloudFormation 変更セットを作成し、実行する前に停止するかどうかを指定します。これにより、CloudFormation コンソールで変更セットを確認できます。変更セットが正常に見える場合は、このオプションを無効にしてからワークフローを再実行し、CodeCatalyst が停止することなく変更セットを作成および実行できるようにします。デフォルトでは、停止せずに変更セットを作成して実行します。詳細については、*AWS CLI 「 コマンドリファレンス」の* CloudFormation [「deploy](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html) パラメータ」を参照してください。変更セットの表示の詳細については、「*AWS CloudFormation ユーザーガイド*」の「[変更セットの表示](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets-view.html)」を参照してください。

対応する UI: [設定] タブ/詳細/**[実行なしの変更セット]**

## fail-on-empty-changeset
<a name="deploy.action.cfn.failonemptychangeset"></a>

(*DeployCloudFormationStack*/Configuration/**fail-on-empty-changeset**)

(オプション)

CloudFormation 変更セットが空の場合、CodeCatalyst が** CloudFormation スタックのデプロイ**アクションを失敗させるかどうかを指定します。(変更セットが空の場合、最新のデプロイ中にスタックに変更が行われなかったことを意味します。) デフォルトでは、変更セットが空の場合にアクションを続行し、スタックが更新されていなくても `UPDATE_COMPLETE` メッセージを返すことを許可します。

この設定の詳細については、*AWS CLI 「 コマンドリファレンス*」の CloudFormation [「deploy](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html) パラメータ」を参照してください。変更セットの詳細については、「*AWS CloudFormation ユーザーガイド*」の「[変更セットを使用したスタックの更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)」を参照してください。

対応する UI: [設定] タブ/アドバンスト/**[空の変更セットで失敗]**

## disable-rollback
<a name="deploy.action.cfn.disablerollback"></a>

(*DeployCloudFormationStack*/Configuration/**disable-rollback**)

(オプション)

CodeCatalyst がスタックデプロイに失敗した場合にロールバックするかどうかを指定します。ロールバックは、スタックを最後に既知の安定状態に戻します。デフォルトでは、ロールバックを有効にします。この設定の詳細については、*AWS CLI 「 コマンドリファレンス*」の CloudFormation [「deploy](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html) パラメータ」を参照してください。

** CloudFormation スタックのデプロイ**アクションがロールバックを処理する方法の詳細については、「」を参照してください[ロールバックの設定](deploy-consumption-enable-alarms.md)。

スタックのロールバックの詳細については、*「AWS CloudFormation ユーザーガイド*」の「[スタック失敗オプション](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html)」を参照してください。

対応する UI: [設定] タブ/アドバンスト/**[ロールバックを無効化]**

## termination-protection
<a name="deploy.action.cfn.terminationprotection"></a>

(*DeployCloudFormationStack*/Configuration/**termination-protection**)

(オプション)

**Deploy CloudFormation スタック**で、デプロイするスタックに終了保護を追加するかどうかを指定します。削除保護を有効にした状態でスタックを削除しようとすると、削除は失敗し、ステータスを含め、スタックが変更されることはありません。終了保護はデフォルトで無効になっています。詳細については、「*AWS CloudFormation ユーザーガイド*」の「[スタックが削除されないように保護する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html)」を参照してください。

対応する UI: [設定] タブ/アドバンスト/**[終了保護]**

## timeout-in-minutes
<a name="deploy.action.cfn.timeoutinminutes"></a>

(*DeployCloudFormationStack*/Configuration/**timeout-in-minutes**)

(オプション)

CloudFormation がスタック作成オペレーションのタイムアウトまでに割り当て、スタックのステータスを `CREATE_FAILED` に設定する時間を分で指定します。CloudFormation が割り当てられた時間内にスタック全体を作成できない場合、スタックの作成がタイムアウトで失敗し、スタックはロールバックされます。

デフォルトでは、スタックの作成にタイムアウトはありません。ただし、個々のリソースには、実装するサービスの性質に基づいて、独自のタイムアウトがある可能性があります。例えば、スタック内の個々のリソースがタイムアウトになった場合、スタックの作成に指定されたタイムアウトに到達していない場合でも、スタックの作成もタイムアウトになります。

対応する UI: [設定] タブ/アドバンスト/**[CloudFormation タイムアウト]**

## notification-arns
<a name="deploy.action.cfn.notificationarns"></a>

(*DeployCloudFormationStack*/Configuration/**notification-arns**)

(オプション)

CodeCatalyst が通知メッセージを送信する Amazon SNS トピックの ARN を指定します。例えば、`arn:aws:sns:us-east-1:111222333:MyTopic`。** CloudFormation スタックのデプロイ**アクションが実行されると、CodeCatalyst は CloudFormation と連携して、スタックの作成または更新プロセス中に発生する CloudFormation イベントごとに 1 つの通知を送信します。(イベントは、スタックの CloudFormation コンソールの**イベント**タブに表示されます）。最大 5 つのトピックを追加できます。詳細については、「[Amazon SNS とは](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)」を参照してください。

対応する UI: [設定] タブ/アドバンスト/**[通知 ARN]**

## monitor-alarm-arns
<a name="deploy.action.cfn.monitoralarmarns"></a>

(*DeployCloudFormationStack*/Configuration/**monitor-alarm-arns**)

(オプション)

ロールバックトリガーを追加するには、Amazon CloudWatch アラームの Amazon リソースネーム (ARN) を指定します。例えば、`arn:aws:cloudwatch::123456789012:alarm/MyAlarm`。最大 5 個のロールバックトリガーを持つことができます。

**注記**  
CloudWatch アラーム ARN を指定する場合は、アクションが CloudWatch にアクセスできるようにする追加のアクセス許可も設定する必要があります。詳細については、「[ロールバックの設定](deploy-consumption-enable-alarms.md)」を参照してください。

対応する UI: [設定] タブ/アドバンスト/**[モニターアラーム ARN]**

## monitor-timeout-in-minutes
<a name="deploy.action.cfn.monitortimeinminutes"></a>

(*DeployCloudFormationStack*/Configuration/**monitor-timeout-in-minutes**)

(オプション)

CloudFormation が指定されたアラームをモニタリングする 0 ～ 180 分の時間を指定します。モニタリングは、すべてのスタックリソースがデプロイされた*後に*開始します。アラームが指定されたモニタリング時間内に発生した場合、デプロイは失敗し、CloudFormation はスタックオペレーション全体をロールバックします。

デフォルト: 0。CloudFormation は、スタックリソースがデプロイされている間だけアラームをモニタリングします。その後はモニタリングしません。

対応する UI: [設定] タブ/アドバンスト/**[モニタリング時間]**

## tags
<a name="deploy.action.cfn.tags"></a>

(*DeployCloudFormationStack*/Configuration/**tags**)

(オプション)

CloudFormation スタックにアタッチするタグを指定します。タグは、コスト配分など、スタックを識別する目的で使用できる任意のキーと値のペアです。タグとその使用方法の詳細については、「Amazon EC2 ユーザーガイド」の「[リソースのタグ付け](https://docs.aws.amazon.com/)」を参照してください。CloudFormation でのタグ付けの詳細については、*AWS CloudFormation 「 ユーザーガイド*」の[CloudFormation 「スタックオプションの設定](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html)」を参照してください。

キーには英数字またはスペースを含めることができ、最大 127 文字を使用できます。値には英数字またはスペースを含めることができ、最大 255 文字を使用できます。

スタックごとに最大 50 個の一意のタグを追加できます。

対応する UI: [設定] タブ/アドバンスト/**[タグ]**