

# `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)}}"
              ]
            }
          }
        }
      ]
    }
  }
}
```

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

逻辑 ID（也称为*逻辑名称*）  
在模板的 `Hooks` 部分中声明的钩子。逻辑 ID 必须为字母数字 (A-Za-z0-9)，并且在模板中具有唯一性。  
*是否必需*：是    
`Type`  
挂钩的类型。`AWS::CodeDeploy::BlueGreen`  
*是否必需*：是  
`Properties`  
挂钩的属性。  
*是否必需*：是    
`TrafficRoutingConfig`  
流量路由配置设置。  
*必需*：否  
默认配置为基于时间的 canary 流量转移，具有 15% 的步骤百分比和五分钟的稳定时间。    
`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` 结果。有关更多信息，请参阅《Amazon CodeDeploy 用户指南》中的 [AppSpec 的“hooks”部分](https://docs.amazonaws.cn/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html)。  
*必需*：否    
`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`  
运行包含 Amazon ECS 应用程序的 Docker 容器所用的 [https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskdefinition.html) 资源的逻辑 ID。  
*是否必需*：是  
`TaskSets`  
用作应用程序任务集的 [https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-ecs-taskset.html](https://docs.amazonaws.cn/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。  
*是否必需*：是