

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

# 關於藍/綠部署
<a name="about-blue-green-deployments"></a>

本主題概述如何使用 CloudFormation 執行藍/綠部署。它還說明如何為藍/綠部署準備 CloudFormation 範本。

**Topics**
+ [運作方式](#blue-green-how-it-works)
+ [啟動綠色部署的資源更新](#blue-green-resources)
+ [準備範本](#blue-green-setup)
+ [建模您的藍/綠部署](#blue-green-required)
+ [變更集](#blue-green-changesets)
+ [監控堆疊事件](#blue-green-events)
+ [IAM 許可](#blue-green-iam)

## 運作方式
<a name="blue-green-how-it-works"></a>

使用 CloudFormation 透過 CodeDeploy 執行 ECS 藍/綠部署時，首先要建立可定義藍色和藍/綠應用程式環境資源的堆疊範本，包括指定要使用的流量路由和穩定設定。接著，從該範本中建立堆疊。這會產生您的藍色 (目前) 應用程式。CloudFormation 只會在堆疊建立期間建立藍色資源。綠色部署的資源必須等到有需要時才會建立。

然後，如果在未來的堆疊更新中更新藍色應用程式中的工作定義或工作集資源，CloudFormation 會執行下列動作：
+ 產生所有必要的綠色應用程式環境資源
+ 根據指定的流量路由參數轉移流量
+ 刪除藍色資源

如果在綠色部署成功並完成之前的任何時間點發生錯誤，CloudFormation 會將堆疊復原為起始整個綠色部署之前的狀態。

## 啟動綠色部署的資源更新
<a name="blue-green-resources"></a>

當您執行更新特定 ECS 資源特定屬性的堆疊更新時，CloudFormation 會啟動綠色部署程序。啟動此程序的資源包括：
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskset.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskset.html) 

不過，如果這些資源的更新不涉及需要取代的屬性變更，則不會啟動綠色部署。如需詳細資訊，請參閱[了解更新堆疊資源的行為](using-cfn-updating-stacks-update-behaviors.md)。

無法在同一堆疊更新中包含上述資源的更新與其他資源的更新。如果需要同時更新列出的資源和相同堆疊中的其他資源，您有兩個選項：
+ 執行兩個獨立的堆疊更新操作：一個只包含上述資源的更新，另一個包含任何其他資源變更的單獨堆疊更新。
+ 從範本中移除 `Transform` 和 `Hooks` 區段，然後執行堆疊更新。在此情況下，CloudFormation 將不會執行綠色部署。

## 準備範本以執行 ECS 藍/綠部署
<a name="blue-green-setup"></a>

若要在堆疊上啟用藍/綠部署，請在執行堆疊更新之前，在堆疊範本中包含下列區段。
+ 將對 `AWS::CodeDeployBlueGreen` 轉換的參考新增到您的範本中：

  ```
  "Transform": [
    "AWS::CodeDeployBlueGreen"
  ],
  ```
+ 加入可叫用 `AWS::CodeDeploy::BlueGreen` 掛接的 `Hooks` 區段，並指定部署的內容。如需詳細資訊，請參閱[`AWS::CodeDeploy::BlueGreen` 勾點語法](blue-green-hook-syntax.md)。
+ 在 `Resources` 區段中定義了您部署的藍色和綠色資源。

您可以在第一次建立範本時 (也就是在建立堆疊本身之前) 加入這些區段，也可以在執行堆疊更新之前將這些區段加入至現有範本。如果您為新堆疊指定藍/綠部署，則 CloudFormation 只會在堆疊建立期間建立藍色資源 - 在堆疊更新期間需要綠色部署的資源前，系統不會建立這些資源。

## 使用 CloudFormation 資源建模您的藍/綠部署
<a name="blue-green-required"></a>

若要在 ECS 上執行 CodeDeploy 藍/綠部署，您的 CloudFormation 範本需要包含模型部署的資源，例如 Amazon ECS 服務和負載平衡器。如需有關這些資源所代表內容的詳細資訊，請見《AWS CodeDeploy 使用者指南》**中[在開始 Amazon ECS 部署之前](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps-ecs.html#deployment-steps-prerequisites-ecs)。


| 需求 | 資源 | 必要/選用 | 取代時是否啟動藍/綠部署？ | 
| --- | --- | --- | --- | 
| Amazon ECS 叢集 | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-cluster.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-cluster.html) | 選用。可以使用預設叢集。 | 否 | 
| Amazon ECS 服務 | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-service.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-service.html) | 必要. | 否 | 
| 應用程式或 Network Load Balancer | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-service-loadbalancer.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-service-loadbalancer.html) | 必要. | 否 | 
| 生產接聽程式 | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html) | 必要. | 否 | 
| 測試接聽程式  | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html) | 選用。 | 否 | 
| 兩個目標群組 | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-targetgroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-targetgroup.html) | 必要. | 否 | 
| Amazon ECS 任務定義  | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html) | 必要. | 是 | 
| Amazon ECS 應用程式的容器 | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name) | 必要. | 否 | 
| 取代任務集的連接埠 | [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport) | 必要. | 否 | 

## 變更集
<a name="blue-green-changesets"></a>

強烈建議您在執行將起始綠色部署的堆疊更新之前建立變更集。這可讓您在執行堆疊更新前，查看將對堆疊所做的實際變更。請注意，資源變更可能不會以堆疊更新期間執行的順序列出。如需詳細資訊，請參閱[透過變更集更新 CloudFormation 堆疊](using-cfn-updating-stacks-changesets.md)。

## 監控堆疊事件
<a name="blue-green-events"></a>

您可以使用 AWS CLI，在 **Stack** (堆疊) 頁面的 **Events** (事件) 索引標籤上檢視 ECS 部署每個步驟所產生的堆疊事件。如需詳細資訊，請參閱[監控堆疊進度](monitor-stack-progress.md)。

## 藍/綠部署的 IAM 許可
<a name="blue-green-iam"></a>

為了讓 CloudFormation 成功執行藍/綠部署，您必須具有以下 CodeDeploy 許可：
+ `codedeploy:Get*`
+ `codedeploy:CreateCloudFormationDeployment`

如需詳細資訊，請參閱*服務授權參考*中的 [CodeDeploy 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscodedeploy.html)。