

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 中編寫的範本，或 AWS SAM 可與**部署 CloudFormation 堆疊**動作搭配使用的範本，都沒有任何限制。

**提示**  
如需說明如何使用部署** 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 堆疊。

本教學課程中的應用程式是一個簡單的 Web 應用程式，會輸出 '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：將 AWS 角色新增至 CodeCatalyst](#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>

在此步驟中，您會建立下列 AWS IAM 角色：
+ **部署角色** – 授予 CodeCatalyst **部署 CloudFormation 堆疊**動作許可，以存取您將部署無伺服器應用程式的 AWS 帳戶和 CloudFormation 服務。**部署 CloudFormation 堆疊**動作是工作流程的一部分。
+ **組建角色** – 授予 CodeCatalyst 組建動作許可，以存取 AWS 您的帳戶並寫入 Amazon S3，其中將存放無伺服器應用程式套件。建置動作是工作流程的一部分。
+ **堆疊角色** – 授予 CloudFormation 許可，以讀取和修改稍後將提供之 AWS SAM 範本中指定的資源。同時授予 CloudWatch 許可。

如需 IAM 角色的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

**注意**  
若要節省時間，您可以建立稱為角色的單一`CodeCatalystWorkflowDevelopmentRole-spaceName`角色，而不是先前列出的三個角色。如需詳細資訊，請參閱[為您的帳戶和空間建立 **CodeCatalystWorkflowDevelopmentRole-*spaceName***角色](ipa-iam-roles.md#ipa-iam-roles-service-create)。了解該`CodeCatalystWorkflowDevelopmentRole-spaceName`角色具有非常廣泛的許可，可能會帶來安全風險。我們建議您只在安全性較少的教學課程和案例中使用此角色。本教學假設您正在建立先前列出的三個角色。

**注意**  
[Lambda 執行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)也是必要的，但您不需要立即建立，因為`sam-template.yml`檔案會在步驟 5 中執行工作流程時為您建立。



**建立部署角色**

1. 建立角色的政策，如下所示：

   1. 登入 AWS。

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

   1. 在導覽窗格中，選擇**政策**。

   1. 選擇 **Create policy** (建立政策)。

   1. 請選擇 **JSON** 標籤。

   1. 刪除現有的程式碼。

   1. 貼上以下程式碼：
**注意**  
第一次使用該角色執行工作流程動作時，請在資源政策陳述式中使用萬用字元，然後在資源名稱可用後縮小政策的範圍。  

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

   1. 選擇下**一步：標籤**。

   1. 選擇下**一步：檢閱**。

   1. 在**名稱**中，輸入：

      ```
      codecatalyst-deploy-policy
      ```

   1. 選擇**建立政策**。

      您現在已建立許可政策。

1. 建立部署角色，如下所示：

   1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   1. 選擇**自訂信任政策**。

   1. 刪除現有的自訂信任政策。

   1. 新增下列自訂信任政策：

   1. 選擇**下一步**。

   1. 在**許可政策**中，搜尋`codecatalyst-deploy-policy`並選取其核取方塊。

   1. 選擇**下一步**。

   1. 針對**角色名稱**，輸入：

      ```
      codecatalyst-deploy-role
      ```

   1. 針對**角色描述**，輸入：

      ```
      CodeCatalyst deploy role
      ```

   1. 選擇建**立角色**。

   您現在已建立具有信任政策和許可政策的部署角色。

1. 取得部署角色 ARN，如下所示：

   1. 在導覽窗格中，選擇**角色**。

   1. 在搜尋方塊中，輸入您剛建立的角色名稱 (`codecatalyst-deploy-role`)。

   1. 從清單中選擇角色。

      角色的**摘要**頁面隨即出現。

   1. 在頂端複製 **ARN** 值。

   您現在已建立具有適當許可的部署角色，並取得其 ARN。

**建立建置角色**

1. 建立角色的政策，如下所示：

   1. 登入 AWS。

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

   1. 在導覽窗格中，選擇**政策**。

   1. 選擇 **Create policy** (建立政策)。

   1. 請選擇 **JSON** 標籤。

   1. 刪除現有的程式碼。

   1. 貼上以下程式碼：
**注意**  
第一次使用該角色執行工作流程動作時，請在資源政策陳述式中使用萬用字元，然後在資源名稱可用後縮小政策的範圍。  

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

   1. 選擇下**一步：標籤**。

   1. 選擇下**一步：檢閱**。

   1. 在**名稱**中，輸入：

      ```
      codecatalyst-build-policy
      ```

   1. 選擇**建立政策**。

      您現在已建立許可政策。

1. 建立建置角色，如下所示：

   1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   1. 選擇**自訂信任政策**。

   1. 刪除現有的自訂信任政策。

   1. 新增下列自訂信任政策：

   1. 選擇**下一步**。

   1. 在**許可政策**中，搜尋`codecatalyst-build-policy`並選取其核取方塊。

   1. 選擇**下一步**。

   1. 針對**角色名稱**，輸入：

      ```
      codecatalyst-build-role
      ```

   1. 針對**角色描述**，輸入：

      ```
      CodeCatalyst build role
      ```

   1. 選擇建**立角色**。

   您現在已建立具有信任政策和許可政策的建置角色。

1. 取得建置角色 ARN，如下所示：

   1. 在導覽窗格中，選擇**角色**。

   1. 在搜尋方塊中，輸入您剛建立的角色名稱 (`codecatalyst-build-role`)。

   1. 從清單中選擇角色。

      角色的**摘要**頁面隨即出現。

   1. 在頂端複製 **ARN** 值。

   您現在已建立具有適當許可的建置角色，並取得其 ARN。<a name="deploy-tut-lambda-cfn-roles-stack"></a>

**建立堆疊角色**

1.  AWS 使用您要部署堆疊的帳戶登入 。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 建立堆疊角色，如下所示：

   1. 在導覽窗格中，選擇 **Roles** (角色)。

   1. 選擇 **Create Role** (建立角色)。

   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. 在導覽窗格中，選擇**角色**。

   1. 在搜尋方塊中，輸入您剛建立的角色名稱 (`codecatalyst-stack-role`)。

   1. 從清單中選擇角色。

   1. 在**摘要**區段中，複製 **ARN** 值。供稍後使用。

   您現在已建立具有適當許可的堆疊角色，並且已取得其 ARN。

## 步驟 3：將 AWS 角色新增至 CodeCatalyst
<a name="deploy-tut-lambda-cfn-roles-add"></a>

在此步驟中，您將建置角色 (`codecatalyst-build-role`) 和部署角色 (`codecatalyst-deploy-role`) 新增至您空間中的 CodeCatalyst 帳戶連線。

**注意**  
您不需要將堆疊角色 (`codecatalyst-stack-role`) 新增至連線。這是因為 *CloudFormation* （非 CodeCatalyst) 使用堆疊角色，在 CodeCatalyst 與 AWS 使用部署角色之間建立連線*之後*。由於 CodeCatalyst 不會使用堆疊角色來存取 AWS，因此不需要與帳戶連線建立關聯。

**將建置和部署角色新增至您的帳戶連線**

1. 在 CodeCatalyst 中，導覽至您的空間。

1. 選擇**AWS 帳戶**。帳戶連線清單隨即顯示。

1. 選擇代表您建立建置和部署角色 AWS 的帳戶的帳戶連線。

1. **從管理主控台選擇 AWS 管理角色**。

   將 **IAM 角色新增至 Amazon CodeCatalyst 空間**頁面隨即出現。您可能需要登入才能存取頁面。

1. 選取**新增您在 IAM 中建立的現有角色**。

   下拉式清單隨即出現。清單會顯示具有信任政策的所有 IAM 角色，其中包含 `codecatalyst-runner.amazonaws.com``codecatalyst.amazonaws.com`和服務主體。

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>

在此步驟中，您會建立 Amazon S3 儲存貯體，存放無伺服器應用程式的部署套件 .zip 檔案。

**建立 Amazon S3 儲存貯體**

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在主窗格中，選擇**建立儲存貯**體。

1. 針對**儲存貯體名稱**，輸入：

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

1. 對於 **AWS 區域**，選擇一個區域。本教學假設您選擇了**美國西部 （奧勒岡） us-west-2**。如需 Amazon S3 支援之區域的相關資訊，請參閱《》中的 [Amazon Simple Storage Service 端點和配額](https://docs.aws.amazon.com/general/latest/gr/s3.html)*AWS 一般參考*。

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：//[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` 檔案包含有關節點專案的重要中繼資料，例如專案名稱、版本編號、描述、相依性，以及描述如何與應用程式互動和執行的其他詳細資訊。

本教學`package.json`課程中的 包含相依性和`test`指令碼的清單。測試指令碼會執行下列動作：
+ 使用 [mocha](https://mochajs.org/)，測試指令碼會執行 中指定的單元測試，`hello-world/tests/unit/`並使用 [xunit]() 報告程式將結果寫入`junit.xml`檔案。
+ 使用[伊斯坦堡 (nyc)](https://istanbul.js.org/)，測試指令碼會使用 [clover](https://openclover.org/doc/manual/4.2.0/general--about-openclover.html) 報告程式產生程式碼涵蓋範圍報告 (`clover.xml`)。如需詳細資訊，請參閱伊斯坦堡文件中[的使用替代報告程式](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 SAM 範本，而不是一般 CloudFormation 範本，因為 AWS SAM 提供實用的 [AWS：：Serverless：：Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) 資源類型。此類型會執行許多behind-the-scenes組態，您通常必須將其寫入才能使用基本 CloudFormation 語法。例如， `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
   ```

   在上述程式碼中，將 AWS *us-west-2* 取代為您的 區域。

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`命令。此命令會告知 npm 執行 `package.json` 檔案中定義的`test`指令碼。`test` 指令碼接著會執行單元測試，並產生兩個報告：測試報告 (`junit.xml`) 和程式碼涵蓋報告 (`clover.xml`)。如需詳細資訊，請參閱[package.json 檔案](#deploy-tut-lambda-cfn-files-package-json)。

  接下來，測試動作會將 XML 報告轉換為 CodeCatalyst 報告，並在測試動作**的報告**索引標籤下顯示在 CodeCatalyst 主控台中。

  如需測試動作的詳細資訊，請參閱 [使用工作流程進行測試使用工作流程進行測試](test-workflow-actions.md)。
+ 建置動作 (`BuildBackend`) – 測試動作完成後，建置動作會下載並安裝 AWS SAM CLI、封裝`hello-world`來源，並將套件複製到 Amazon S3 儲存貯體，Lambda 服務預期會是該儲存貯體。動作也會輸出名為 的新 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：將 AWS 角色新增至 CodeCatalyst](#deploy-tut-lambda-cfn-roles-add)。
   + *codecatalyst-build-role* 使用您在 中建立的建置角色名稱[步驟 2：建立 AWS 角色](#deploy-tut-lambda-cfn-roles)。
   + *codecatalyst-cfn-s3-bucket*，內含您在 中建立的 Amazon S3 儲存貯體名稱[步驟 4：建立 Amazon S3 儲存貯體](#deploy-tut-lambda-cfn-s3)。
   + Amazon S3 儲存貯體所在的區域 （第一個執行個體） 和堆疊將部署的區域 （第二個執行個體） 為 *us-west-2* 的兩個執行個體。這些區域可能不同。本教學假設兩個區域都設為 `us-west-2`。如需 Amazon S3 和 支援區域的詳細資訊 CloudFormation，請參閱《》中的[服務端點和配額](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)*AWS 一般參考*。
   + *codecatalyst-deploy-role* 使用您在 中建立的部署角色名稱[步驟 2：建立 AWS 角色](#deploy-tut-lambda-cfn-roles)。
   + *codecatalyst-cfn-environment*，其中包含您在 中建立的環境名稱[先決條件](#deploy-tut-lambda-cfn-prereqs)。
   + *arn：aws：iam：：111122223333：role/StackRole*，其中包含您在 中建立之堆疊角色的 Amazon Resource Name (ARN)[步驟 2：建立 AWS 角色](#deploy-tut-lambda-cfn-roles)。
**注意**  
如果您決定不建立建置、部署和堆疊角色，請將 *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. 選擇 **Commit** (遞交)。

1. 在**遞交工作流程**對話方塊中，輸入下列內容：

   1. 對於**工作流程檔案名稱**，請保留預設值 `codecatalyst-cfn-workflow`。

   1. 針對**遞交訊息**，輸入：

      ```
      add initial workflow file
      ```

   1. 針對**儲存庫**，選擇 **codecatalyst-cfn-source-repository**。

   1. 針對**分支名稱**，選擇**主要**。

   1. 選擇 **Commit** (遞交)。

   您現在已建立工作流程。由於工作流程頂端定義的觸發條件，工作流程執行會自動啟動。具體而言，當您將`codecatalyst-cfn-workflow.yaml`檔案遞交 （並推送） 到您的來源儲存庫時，觸發會啟動工作流程執行。

**檢視進行中工作流程執行**

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇您剛建立的工作流程：`codecatalyst-cfn-workflow`。

1. 選擇**執行**索引標籤。

1. 在**執行 ID** 欄中，選擇執行 ID。

1. 選擇**測試**以查看測試進度。

1. 選擇 **BuildBackend** 以查看建置進度。

1. 選擇 **DeployCloudFormationStack** 以查看部署進度。

   如需檢視執行詳細資訊的詳細資訊，請參閱 [檢視工作流程執行狀態和詳細資訊](workflows-view-run.md)。

1. 當 **DeployCloudFormationStack** 動作完成時，請執行下列動作：
   + 如果工作流程執行成功，請前往下一個程序。
   + 如果工作流程在**測試**或 **BuildBackend** 動作上執行失敗，請選擇**日誌**來疑難排解問題。
   + 如果在 **DeployCloudFormationStack** 動作上執行工作流程失敗，請選擇部署動作，然後選擇**摘要**索引標籤。捲動至 **CloudFormation 事件**區段以檢視詳細的錯誤訊息。如果發生轉返，請在重新執行工作流程之前，透過 中的 AWS CloudFormation 主控台刪除`codecatalyst-cfn-stack`堆疊。

**驗證部署**

1. 成功部署後，從頂端附近的水平選單列中選擇**變數 (7)**。（請勿在右側窗格中選擇**變數**。)

1. 在 **HelloWorldApi** 旁邊，將 `https://` URL 貼到瀏覽器。

   隨即顯示來自 Lambda 函數的 **hello world** JSON 訊息，指出工作流程已成功部署和設定 Lambda 函數和 API Gateway。
**提示**  
您可以使用幾個小型組態，讓 CodeCatalyst 在工作流程圖表中顯示此 URL。如需詳細資訊，請參閱[在工作流程圖表中顯示應用程式 URL](deploy-app-url.md)。

**驗證單位測試結果和程式碼涵蓋範圍**

1. 在工作流程圖表中，選擇**測試**，然後選擇**報告**。

1. 選擇 **TestReport** 以檢視單位測試結果，或選擇 **CoverageReport** 以檢視測試中檔案的程式碼涵蓋範圍詳細資訊，在此情況下為 `app.js`和 `test-handler.js`。

**驗證已部署的資源**

1. 登入 AWS 管理主控台 並開啟 API Gateway 主控台，網址為 https：//[https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/)。

1. 觀察 AWS SAM 範本建立的 **codecatalyst-cfn-stack** API。API 名稱來自工作流程定義檔案 () 中的 `Configuration/name`值`codecatalyst-cfn-workflow.yaml`。

1. 在 https：//[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. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇 `codecatalyst-cfn-workflow`，然後選擇**執行**。

1. 選擇最新執行的執行 ID。它應該仍在進行中。

1. 選擇**測試**、 **BuildBackend** 和 **DeployCloudFormationStack** 以查看工作流程執行進度。

1. 當工作流程完成時，請選擇頂端附近的**變數 (7)**。

1. 在 **HelloWorldApi** 旁邊，將 `https://` URL 貼到瀏覽器中。

   瀏覽器中會出現一`Tutorial complete!`則訊息，指出您的新應用程式已成功部署。

## 清除
<a name="deploy-tut-lambda-cfn-clean-up"></a>

清除本教學課程中使用的檔案和服務，以避免收取這些檔案和服務的費用。

**在 CodeCatalyst 主控台中清除**

1. 在 https：//[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：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

   1. 刪除`codecatalyst-cfn-stack`。

      刪除堆疊會從 API Gateway 和 Lambda 服務中移除所有教學課程資源。

1. 在 Amazon S3 中清除，如下所示：

   1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

   1. 選擇 `codecatalyst-cfn-s3-bucket`。

   1. 刪除儲存貯體內容。

   1. 刪除儲存貯體。

1. 在 IAM 中清除，如下所示：

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 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. 開啟 CodeCatalyst 主控台，網址為 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/)。

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：//[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. 請確定您的[工作流程](workflow.md)包含正常運作的**部署 CloudFormation 堆疊**動作。如需詳細資訊，請參閱[部署 CloudFormation 堆疊](deploy-action-cfn.md)。

1. 在**部署堆疊 CloudFormation **動作的堆疊**角色 - 選用**欄位中指定的角色中，請務必包含 **CloudWatchFullAccess** 許可。如需使用適當許可建立此角色的資訊，請參閱 [步驟 2：建立 AWS 角色](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles)。

**設定「部署 CloudFormation 堆疊」動作的轉返警示**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 選擇**部署 CloudFormation 堆疊**動作。

1. 在詳細資訊窗格中，選擇**組態**。

1. 在底部，展開**進階**。

1. 在**監控警示 ARNs**下，選擇**新增警示**。

1. 在下列欄位中輸入資訊。
   + **警示 ARN**

     指定 Amazon CloudWatch 警示的 Amazon Resource Name (ARN)，以用作轉返觸發。例如 `arn:aws:cloudwatch::123456789012:alarm/MyAlarm`。您最多可以有五個轉返觸發條件。
**注意**  
如果您指定 CloudWatch 警示 ARN，您還需要設定其他許可，以啟用 動作來存取 CloudWatch。如需詳細資訊，請參閱[設定轉返](#deploy-consumption-enable-alarms)。
   + **監控時間**

     指定 0 到 180 分鐘的時間量，在此期間CloudFormation 會監控指定的警示。監控會在部署所有堆疊資源*之後*開始。如果警示在指定的監控時間內發生，則部署會失敗，CloudFormation 會復原整個堆疊操作。

     預設：0. CloudFormation 只會在部署堆疊資源時監控警示，而不是在部署之後。

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

**設定「部署 CloudFormation 堆疊」動作的復原觸發**

1. 在 https：//[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：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇包含**部署 CloudFormation 堆疊**動作的工作流程名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選，或依工作流程名稱或狀態進行篩選。

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 選擇**部署 CloudFormation 堆疊**動作。

1. 在詳細資訊窗格中，選擇**組態**。

1. 在底部，展開**進階**。

1. 開啟**停用轉返**。

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

**關閉「部署 CloudFormation 堆疊」動作的轉返**

1. 在 https：//[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`。  | 
|  region  |  在工作流程執行期間 AWS 區域 部署至 的 區域碼。 範例：`us-west-2`  | 
|  stack-id  |  部署堆疊的 Amazon Resource Name (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**)

(選用)

指定必須成功執行的動作、動作群組或閘道，才能執行此動作。

如需 'depends on' 功能的詳細資訊，請參閱 [定序動作](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`。

如果您未指定帳戶連線：
+ 動作會使用 CodeCatalyst 主控台中環境指定的 AWS 帳戶 連線和預設 IAM 角色。如需將帳戶連線和預設 IAM 角色新增至環境的相關資訊，請參閱 [建立環境](deploy-environments-creating-environment.md)。
+ 預設 IAM 角色必須包含 動作所需的政策和許可。若要判斷這些政策和許可是什麼，請參閱動作 YAML 定義文件中**角色**屬性的描述。

如需帳戶連線的詳細資訊，請參閱 [允許存取已連線 AWS 的資源 AWS 帳戶](ipa-connect-account.md)。如需將帳戶連線新增至環境的相關資訊，請參閱 [建立環境](deploy-environments-creating-environment.md)。

對應的 UI：取決於動作版本，下列其中一項：
+ （較新版本） 組態tab/Environment/What是 *my-environment*？/三個點功能表/**切換角色**
+ （舊版本） 組態索引標籤/'Environment/account/role'/**AWS account connection**

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

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

（如果[Connections](#deploy.action.cfn.environment.connections)包含 則為必要）

指定帳戶連線的名稱。

對應的 UI：取決於動作版本，下列其中一項：
+ （較新版本） 組態tab/Environment/What是 *my-environment*？/三個點功能表/**切換角色**
+ （舊版本） 組態索引標籤/'Environment/account/role'/**AWS account connection**

## 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：取決於動作版本，下列其中一項：
+ （較新版本） 組態tab/Environment/What是 *my-environment*？/三個點功能表/**切換角色**
+ （舊版本） 組態索引標籤/'Environment/account/role'/**Role**

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

(*DeployCloudFormationStack*/**Inputs**)

(選用)

`Inputs` 區段定義工作流程執行期間 `DeployCloudFormationStack`所需的資料。

**注意**  
每個**部署 CloudFormation 堆疊**動作最多允許四個輸入 （一個來源和三個成品）。

如果您需要參考位於不同輸入中的檔案 （例如來源和成品），則來源輸入是主要輸入，而成品是次要輸入。對次要輸入中檔案的參考需要特殊的字首，才能將其從主要輸入中消除。如需詳細資訊，請參閱[範例：參考多個成品中的檔案](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 儲存貯體中。

如需來源的詳細資訊，請參閱 [將來源儲存庫連線至工作流程](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 Resource Name (ARN)。CloudFormation 使用此角色來存取和修改堆疊中的資源。例如：`arn:aws:iam::123456789012:role/StackRole`。

請確定堆疊角色包含：
+ 一或多個許可政策。這些政策取決於您在堆疊中擁有的資源。例如，如果您的堆疊包含 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)。如果您未將堆疊角色與帳戶連線建立關聯，堆疊角色就不會出現在視覺化編輯器的**堆疊角色**下拉式清單中；不過，仍然可以使用 YAML 編輯器在 `role-arn` 欄位中指定角色 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 功能清單。在大多數情況下，您可以使用預設值 `capabilities` 來離開 `CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND`。

如果您在**部署 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：
+ 組態索引標籤/進階/**參數覆寫**
+ 組態tab/Advanced/Parameter覆寫/**使用檔案指定覆寫**
+ 組態tab/Advanced/Parameter覆寫/**使用值集指定覆寫**

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

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

(選用)

指定您是否希望 CodeCatalyst 建立 CloudFormation 變更集，然後在執行之前停止。這可讓您在 CloudFormation 主控台中檢閱變更集。如果您判斷變更集看起來不錯，請停用此選項，然後重新執行工作流程，讓 CodeCatalyst 可以在不停止的情況下建立和執行變更集。預設值是在不停止的情況下建立和執行變更集。如需詳細資訊，請參閱《 *AWS CLI 命令參考*》中的 CloudFormation [部署](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 [部署](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 [部署](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**)

(選用)

指定您是否希望**部署 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 事件傳送一個通知。（事件會顯示在 CloudFormation 主控台的堆疊**事件**索引標籤中。) 您最多可以指定五個主題。如需詳細資訊，請參閱[什麼是 Amazon SNS？](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)。

對應的 UI：組態索引標籤/進階/**通知 ARNs**

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

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

(選用)

指定 Amazon CloudWatch 警示的 Amazon Resource Name (ARN)，以用作轉返觸發。例如 `arn:aws:cloudwatch::123456789012:alarm/MyAlarm`。您最多可以有五個轉返觸發。

**注意**  
如果您指定 CloudWatch 警示 ARN，您還需要設定其他許可，以啟用 動作來存取 CloudWatch。如需詳細資訊，請參閱[設定轉返](deploy-consumption-enable-alarms.md)。

對應的 UI：組態索引標籤/進階/**監控警示 ARNs **

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

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

(選用)

指定時間量，從 0 到 180 分鐘，在此期間CloudFormation 會監控指定的警示。部署所有堆疊資源*之後*，監控就會開始。如果警示在指定的監控時間內發生，則部署會失敗，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：組態索引標籤/進階/**標籤**