

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

# `AWS::CodeDeploy::BlueGreen` 勾點語法
<a name="blue-green-hook-syntax"></a>

下列語法說明 ECS 藍/綠部署的 `AWS::CodeDeploy::BlueGreen` 勾點結構。

## 語法
<a name="cfn-blue-green-hook-syntax"></a>

```
"Hooks": {
  "{{Logical ID}}": {
    "Type": "AWS::CodeDeploy::BlueGreen",
    "Properties": {
      "TrafficRoutingConfig": {
        "Type": "{{Traffic routing type}}",
        "TimeBasedCanary": {
          "StepPercentage": {{Integer}},
          "BakeTimeMins": {{Integer}}
        },
        "TimeBasedLinear": {
          "StepPercentage": {{Integer}},
          "BakeTimeMins": {{Integer}}
        }
      },
      "AdditionalOptions": {"TerminationWaitTimeInMinutes": {{Integer}}},
      "LifecycleEventHooks": {
        "BeforeInstall": "{{FunctionName}}",
        "AfterInstall": "{{FunctionName}}",
        "AfterAllowTestTraffic": "{{FunctionName}}",
        "BeforeAllowTraffic": "{{FunctionName}}",
        "AfterAllowTraffic": "{{FunctionName}}"
      },
      "ServiceRole": "{{CodeDeployServiceRoleName}}",
      "Applications": [
        {
          "Target": {
            "Type": "AWS::ECS::Service",
            "LogicalID": "{{Logical ID of AWS::ECS::Service}}"
          },
          "ECSAttributes": {
            "TaskDefinitions": [
              "{{Logical ID of AWS::ECS::TaskDefinition (Blue)}}",
              "{{Logical ID of AWS::ECS::TaskDefinition (Green)}}"
            ],
            "TaskSets": [
              "{{Logical ID of AWS::ECS::TaskSet (Blue)}}",
              "{{Logical ID of AWS::ECS::TaskSet (Green)}}"
            ],
            "TrafficRouting": {
              "ProdTrafficRoute": {
                "Type": "AWS::ElasticLoadBalancingV2::Listener",
                "LogicalID": "{{Logical ID of AWS::ElasticLoadBalancingV2::Listener (Production)}}"
              },
              "TestTrafficRoute": {
                "Type": "AWS::ElasticLoadBalancingV2::Listener",
                "LogicalID": "{{Logical ID of AWS::ElasticLoadBalancingV2::Listener (Test)}}"
              },
              "TargetGroups": [
                "{{Logical ID of AWS::ElasticLoadBalancingV2::TargetGroup (Blue)}}",
                "{{Logical ID of AWS::ElasticLoadBalancingV2::TargetGroup (Green)}}"
              ]
            }
          }
        }
      ]
    }
  }
}
```

## Properties
<a name="cfn-blue-green-hook-properties"></a>

邏輯 ID (也稱為*邏輯名稱*)  
範本的 `Hooks` 區段中宣告之勾點的邏輯 ID。邏輯 ID 必須是英數字元 (A-Za-z0-9)，而且在範本內必須是唯一的。  
*必要*：是    
`Type`  
掛接的類型。`AWS::CodeDeploy::BlueGreen`  
*必要*：是  
`Properties`  
掛接的屬性。  
*必要*：是    
`TrafficRoutingConfig`  
流量路由組態設定。  
*必要*：否  
預設組態是以時間為基礎的 Canary 流量轉移，具有 15% 步驟百分比和 5 分鐘的封裝時間。    
`Type`  
部署組態所使用的流量轉移類型。  
有效值：AllAtOnce \| TimeBasedCanary \| TimeBasedLinear  
*必要*：是    
`TimeBasedCanary`  
指定將流量以兩個增量為單位，從一個版本的部署轉移到另一個版本的規劃。  
*必要*：有條件：如果您將 `TimeBasedCanary` 指定為流量路由類型，則必須包含 `TimeBasedCanary` 參數。    
`StepPercentage`  
在 `TimeBasedCanary` 部署的第一個增量中，要轉移的流量百分比。步驟百分比必須是 14% 或更大。  
*必要*：否  
`BakeTimeMins`  
`TimeBasedCanary` 部署第一次和第二次流量轉移之間的分鐘數。  
*必要*：否  
`TimeBasedLinear`  
指定將流量從一個版本的部署轉移到另一個版本的組態，每個增量之間的分鐘數相等。  
*必要*：有條件：如果您將 `TimeBasedLinear` 指定為流量路由類型，則必須包含 `TimeBasedLinear` 參數。    
`StepPercentage`  
每個 `TimeBasedLinear` 部署增量開始時移動的流量百分比。步驟百分比必須是 14% 或更大。  
*必要*：否  
`BakeTimeMins`  
`TimeBasedLinear` 部署的每個遞增流量轉移之間的分鐘數。  
*必要*：否  
`AdditionalOptions`  
藍/綠部署的其他選項。  
*必要*：否    
`TerminationWaitTimeInMinutes`  
指定終止藍色資源之前的等待時間 (以分鐘為單位)。  
*必要*：否  
`LifecycleEventHooks`  
使用生命週期事件掛接來指定 CodeDeploy 可呼叫以驗證部署的 Lambda 函數。針對部署生命週期事件，您可以使用相同的函數或不同的函數。完成驗證測試後，Lambda `AfterAllowTraffic` 函數會回呼 CodeDeploy，並傳送 `Succeeded` 或 `Failed` 的結果。如需詳細資訊，請參閱[《AWS CodeDeploy 使用者指南》](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html)中的 *AppSpec 「勾點」* 章節。  
*必要*：否    
`BeforeInstall`  
在建立替換任務之前，用來執行任務的函數。  
*必要*：否  
`AfterInstall`  
建立替代任務集後，用來執行任務，且與其中一個目標群組相關的函數。  
*必要*：否  
`AfterAllowTestTraffic`  
在測試接聽程式將流量轉發至替換任務集後，用來執行任務的函數。  
*必要*：否  
`BeforeAllowTraffic`  
在第二個目標群組與替換任務集建立關聯後，但在流量轉移到替換任務集前，用來執行任務的函數。  
*必要*：否  
`AfterAllowTraffic`  
在第二個目標群組將流量轉發至替換任務集後，用來執行任務的函數。  
*必要*：否  
`ServiceRole`  
CloudFormation 用來執行藍/綠部署的執行角色。如需必要許可的清單，請參閱 [藍/綠部署的 IAM 許可](about-blue-green-deployments.md#blue-green-iam)。  
*必要*：否  
`Applications`  
指定 Amazon ECS 應用程式的屬性。  
*必要*：是    
`Target`  
  
*必要*：是    
`Type`  
資源的類型。  
*必要*：是  
`LogicalID`  
資源的邏輯 ID。  
*必要*：是  
`ECSAttributes`  
代表 Amazon ECS 應用程式部署各種需求的資源。  
*必要*：是    
`TaskDefinitions`  
[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) 資源的邏輯 ID，以執行包含 Amazon ECS 應用程式的 Docker 容器。  
*必要*：是  
`TaskSets`  
用作應用程式任務集的 [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) 資源邏輯 ID。  
*必要*：是  
`TrafficRouting`  
指定用於流量路由的資源。  
*必要*：是    
`ProdTrafficRoute`  
供負載平衡器用來將流量導向到您目標群組的接聽程式。  
*必要*：是    
`Type`  
資源的類型。`AWS::ElasticLoadBalancingV2::Listener`  
*必要*：是  
`LogicalID`  
資源的邏輯 ID。  
*必要*：是  
`TestTrafficRoute`  
供負載平衡器用來將流量導向到您目標群組的接聽程式。  
*必要*：是    
`Type`  
資源的類型。`AWS::ElasticLoadBalancingV2::Listener`  
*必要*：是  
`LogicalID`  
資源的邏輯 ID。  
*必要*：否  
`TargetGroups`  
用作目標群組的資源邏輯 ID，以將流量路由至已登記的目標。  
*必要*：是