

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon Elastic Container Service 和 CodeDeploy 藍綠部署動作參考
<a name="action-reference-ECSbluegreen"></a>

您可以在 中設定管道 AWS CodePipeline ，以使用藍/綠部署來部署容器應用程式。在藍/綠部署中，您可以與舊版本一起啟動應用程式的新版本，並在重新路由流量到新版本之前進行測試。您也可以監控部署程序，並在發生問題時快速轉返。

已完成的管道會偵測映像或任務定義檔案的變更，並使用 CodeDeploy 將流量路由和部署到 Amazon ECS 叢集和負載平衡器。CodeDeploy 會在您的負載平衡器上建立新的接聽程式，該接聽程式可以透過特殊連接埠將新任務設為目標。您也可以將管道設定為使用來源位置，例如儲存 Amazon ECS 任務定義的 CodeCommit 儲存庫。

建立管道之前，您必須已建立 Amazon ECS 資源、CodeDeploy 資源，以及負載平衡器和目標群組。您必須已經在映像儲存庫中標記並存放映像，並將任務定義和 AppSpec 檔案上傳到您的檔案儲存庫。

**注意**  
本主題說明 CodePipeline 的 Amazon ECS 至 CodeDeploy 藍/綠部署動作。如需 CodePipeline 中 Amazon ECS 標準部署動作的參考資訊，請參閱 [Amazon Elastic Container Service 部署動作參考](action-reference-ECS.md)。

**Topics**
+ [動作類型](#action-reference-ECSbluegreen-type)
+ [組態參數](#action-reference-ECSbluegreen-config)
+ [Input artifacts (輸入成品)](#action-reference-ECSbluegreen-input)
+ [輸出成品](#action-reference-ECSbluegreen-output)
+ [服務角色許可：`CodeDeployToECS`動作](#edit-role-codedeploy-ecs)
+ [動作宣告](#action-reference-ECSbluegreen-example)
+ [另請參閱](#action-reference-ECSbluegreen-links)

## 動作類型
<a name="action-reference-ECSbluegreen-type"></a>
+ 類別：`Deploy`
+ 擁有者：`AWS`
+ 提供者：`CodeDeployToECS`
+ 版本：`1`

## 組態參數
<a name="action-reference-ECSbluegreen-config"></a>

**ApplicationName**  
必要：是  
CodeDeploy 中的應用程式名稱。建立管道之前，您必須已在 CodeDeploy 中建立應用程式。

**DeploymentGroupName**  
必要：是  
針對您為 CodeDeploy 應用程式建立的 Amazon ECS 任務集指定的部署群組。在建立管道之前，您必須已在 CodeDeploy 中建立部署群組。

**TaskDefinitionTemplateArtifact**  
必要：是  
將任務定義檔案提供給部署動作的輸入成品名稱。這通常是來源動作的輸出成品名稱。當您使用 主控台時，來源動作輸出成品的預設名稱為 `SourceArtifact`。

**AppSpecTemplateArtifact**  
必要：是  
將 AppSpec 檔案提供給部署動作的輸入成品名稱。當您的管道執行時，此值即會更新。這通常是來源動作的輸出成品名稱。當您使用 主控台時，來源動作輸出成品的預設名稱為 `SourceArtifact`。對於 AppSpec 檔案中`TaskDefinition`的 ，您可以保留`<TASK_DEFINITION>`預留位置文字，[如下所示](tutorials-ecs-ecr-codedeploy.md#tutorials-ecs-ecr-codedeploy-taskdefinition)。

**AppSpecTemplatePath**  
必要：否  
存放在管道來源檔案位置的 AppSpec 檔案的檔案名稱，例如管道的 CodeCommit 儲存庫。預設檔案名稱為 `appspec.yaml`。如果您的 AppSpec 檔案具有相同的名稱，且存放在檔案儲存庫的根層級，則不需要提供檔案名稱。如果路徑不是預設值，請輸入路徑和檔案名稱。

**TaskDefinitionTemplatePath**  
必要：否  
存放在管道檔案來源位置的任務定義檔案名稱，例如管道的 CodeCommit 儲存庫。預設檔案名稱為 `taskdef.json`。如果您的任務定義檔案具有相同的名稱，且存放在檔案儲存庫的根層級，則不需要提供檔案名稱。如果路徑不是預設值，請輸入路徑和檔案名稱。

**Image<Number>ArtifactName**  
必要：否  
將映像提供給部署動作的輸入成品名稱。這通常是影像儲存庫的輸出成品，例如來自 Amazon ECR 來源動作的輸出。  
的可用值`<Number>`為 1 到 4。

**Image<Number>ContainerName**  
必要：否  
可從映像儲存庫取得的映像名稱，例如 Amazon ECR 來源儲存庫。  
的可用值`<Number>`為 1 到 4。

## Input artifacts (輸入成品)
<a name="action-reference-ECSbluegreen-input"></a>
+ **成品數量：**`1 to 5`
+ **描述：**`CodeDeployToECS`動作會先在來源檔案儲存庫中尋找任務定義檔案和 AppSpec 檔案，接著在映像儲存庫中尋找映像，然後動態產生任務定義的新修訂，最後執行 AppSpec 命令，將任務集和容器部署到叢集。

  `CodeDeployToECS` 動作會尋找將映像 URI 映射至映像`imageDetail.json`的檔案。當您將變更遞交至 Amazon ECR 映像儲存庫時，管道 ECR 來源動作會為該遞交建立 `imageDetail.json` 檔案。您也可以為未自動化動作的管道手動新增 `imageDetail.json` 檔案。如需 `imageDetail.json` 詳細資訊，請參閱 [Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案](file-reference.md#file-reference-ecs-bluegreen)。

  `CodeDeployToECS` 動作會動態產生任務定義的新修訂。在此階段中，此動作會將任務定義檔案中的預留位置取代為從 imageDetail.json 檔案擷取的影像 URI。例如，如果您將 *IMAGE1\_NAME* 設定為 Image1ContainerName 參數，則應將預留位置 *<IMAGE1\_NAME>* 指定為任務定義檔案中影像欄位的值。在此情況下，CodeDeployToECS 動作會將預留位置 *<IMAGE1\_NAME>* 取代為您指定為 Image1ArtifactName 的成品中，從 imageDetail.json 擷取的實際影像 URI。

  對於任務定義更新，CodeDeploy `AppSpec.yaml` 檔案包含 `TaskDefinition` 屬性。

  ```
  TaskDefinition: <TASK_DEFINITION>
  ```

  建立新任務定義後，`CodeDeployToECS`動作會更新此屬性。

  對於 `TaskDefinition` 欄位的值，預留位置文字必須是 <TASK\_DEFINITION>。`CodeDeployToECS` 動作會將此預留位置取代為動態產生的任務定義的實際 ARN。

## 輸出成品
<a name="action-reference-ECSbluegreen-output"></a>
+ **成品數量：**`0`
+ **描述：**輸出成品不適用於此動作類型。

## 服務角色許可：`CodeDeployToECS`動作
<a name="edit-role-codedeploy-ecs"></a>

對於 `CodeDeployToECS`動作 （藍/綠部署），以下是使用 CodeDeploy 建立管道到 Amazon ECS 藍/綠部署動作所需的最低許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCodeDeployDeploymentActions",
            "Action": [
                "codedeploy:CreateDeployment",
                "codedeploy:GetDeployment"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:{{111122223333}}:deploymentgroup:[[ApplicationName]]/*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowCodeDeployApplicationActions",
            "Action": [
                "codedeploy:GetApplication",
                "codedeploy:GetApplicationRevision",
                "codedeploy:RegisterApplicationRevision"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:{{111122223333}}:application:[[ApplicationName]]",
                "arn:aws:codedeploy:*:{{111122223333}}:application:[[ApplicationName]]/*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowCodeDeployDeploymentConfigAccess",
            "Action": [
                "codedeploy:GetDeploymentConfig"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:{{111122223333}}:deploymentconfig:*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowECSRegisterTaskDefinition",
            "Action": [
                "ecs:RegisterTaskDefinition"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowPassRoleToECS",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::{{111122223333}}:role/[[PassRoles]]"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "ecs.amazonaws.com",
                        "ecs-tasks.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

您可以選擇在 Amazon ECS 中使用標記授權。選擇加入後，您必須授予下列許可：`ecs:TagResource`。如需如何選擇加入和判斷是否需要許可和是否強制執行標籤授權的詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》中的[標記授權時間表](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#tag-resources-timeline)。

您還必須新增`iam:PassRole`許可，才能將 IAM 角色用於任務。如需詳細資訊，請參閱 [Amazon ECS 任務執行 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)和[任務的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。

您也可以將 `ecs-tasks.amazonaws.com`新增至`iam:PassedToService`條件下的 服務清單，如上述範例所示。

## 動作宣告
<a name="action-reference-ECSbluegreen-example"></a>

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

```
Name: Deploy
Actions:
  - Name: Deploy
    ActionTypeId:
      Category: Deploy
      Owner: AWS
      Provider: CodeDeployToECS
      Version: '1'
    RunOrder: 1
    Configuration:
      AppSpecTemplateArtifact: SourceArtifact
      ApplicationName: ecs-cd-application
      DeploymentGroupName: ecs-deployment-group
      Image1ArtifactName: MyImage
      Image1ContainerName: IMAGE1_NAME
      TaskDefinitionTemplatePath: taskdef.json
      AppSpecTemplatePath: appspec.yaml
      TaskDefinitionTemplateArtifact: SourceArtifact
    OutputArtifacts: []
    InputArtifacts:
      - Name: SourceArtifact
      - Name: MyImage
    Region: us-west-2
    Namespace: DeployVariables
```

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

```
{
    "Name": "Deploy",
    "Actions": [
        {
            "Name": "Deploy",
            "ActionTypeId": {
                "Category": "Deploy",
                "Owner": "AWS",
                "Provider": "CodeDeployToECS",
                "Version": "1"
            },
            "RunOrder": 1,
            "Configuration": {
                "AppSpecTemplateArtifact": "SourceArtifact",
                "ApplicationName": "ecs-cd-application",
                "DeploymentGroupName": "ecs-deployment-group",
                "Image1ArtifactName": "MyImage",
                "Image1ContainerName": "IMAGE1_NAME",
                "TaskDefinitionTemplatePath": "taskdef.json",
                "AppSpecTemplatePath": "appspec.yaml",
                "TaskDefinitionTemplateArtifact": "SourceArtifact"
            },
            "OutputArtifacts": [],
            "InputArtifacts": [
                {
                    "Name": "SourceArtifact"
                },
                {
                    "Name": "MyImage"
                }
            ],
            "Region": "us-west-2",
            "Namespace": "DeployVariables"
        }
    ]
}
```

------

## 另請參閱
<a name="action-reference-ECSbluegreen-links"></a>

以下相關資源可協助您使用此動作。
+ [教學課程：使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道](tutorials-ecs-ecr-codedeploy.md) – 本教學課程會逐步引導您建立藍/綠部署所需的 CodeDeploy 和 Amazon ECS 資源。本教學課程說明如何將 Docker 映像推送至 Amazon ECR，並建立列出 Docker 映像名稱、容器名稱、Amazon ECS 服務名稱和負載平衡器組態的 Amazon ECS 任務定義。此教學課程接著會逐步引導您建立部署的 AppSpec 檔案和管道。
**注意**  
本主題和教學課程說明 CodePipeline 的 CodeDeploy/ECS 藍/綠動作。 CodePipeline 如需 CodePipeline 中 ECS 標準動作的相關資訊，請參閱[教學課程：使用 CodePipeline 持續部署](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cd-pipeline.html)。
+ *AWS CodeDeploy 使用者指南* – 如需如何在藍/綠部署中使用負載平衡器、生產接聽程式、目標群組和 Amazon ECS 應用程式的詳細資訊，請參閱[教學課程：部署 Amazon ECS 服務](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment.html)。*AWS CodeDeploy 使用者指南*中的此參考資訊提供使用 Amazon ECS 和 進行藍/綠部署的概觀 AWS CodeDeploy。
+ *Amazon Elastic Container Service 開發人員指南* – 如需有關使用 Docker 映像和容器、ECS 服務和叢集，以及 ECS 任務集的詳細資訊，請參閱[什麼是 Amazon ECS？](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/)