

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用金丝雀流量转移
<a name="deployment-guardrails-blue-green-canary"></a>

借助金丝雀流量转移，您可以在新实例集上测试部分端点流量，而旧实例集为其余流量提供服务。此测试步骤是一个安全防护机制，可在将所有流量转移到新实例集之前验证新实例集是否正常运转。您仍然可以从 blue/green 部署中受益，并且添加的金丝雀功能使您可以确保新（绿色）队列能够在让其处理 100% 的流量之前提供推理。

在您的绿色实例集内，开启接收流量的部分称为金丝雀，您可以选择此金丝雀的大小。请注意，金丝雀的大小应小于或等于新实例集容量的 50%。烘焙期结束并且没有预先指定的Amazon CloudWatch 警报响起后，其余流量就会从旧（蓝色）车队转移到绿色车队。金丝雀流量转移可在部署期间提供更高的安全性，因为更新后模型的任何问题都只会影响金丝雀。

下图显示了金丝雀流量转移如何管理蓝色实例集和绿色实例集之间的流量分布。

![成功完成的从旧实例集到新实例集的两步金丝雀流量转移。](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/deployment-guardrails-blue-green-canary.png)


一旦 SageMaker AI 配置了绿色舰队， SageMaker AI 就会将部分传入流量（例如 25%）路由到金丝雀。然后开始烘焙期，在此期间，您的 CloudWatch 警报会监控绿色车队的性能。在此期间，蓝色实例集和绿色实例集均有一部分资源处于活动状态来接收流量。如果在烘焙期间有任何警报跳动，则 SageMaker AI 会启动回滚，所有流量都会返回到蓝色舰队。如果没有触发任何警报，那么所有的流量都会转移到绿色实例集，并且还有最后的烘焙期。如果最后的烘焙周期在没有触发任何警报的情况下结束，那么绿色车队将为所有流量提供服务， SageMaker 人工智能终止蓝色舰队。

## 先决条件
<a name="deployment-guardrails-blue-green-canary-prereqs"></a>

在设置带有金丝雀流量转移的部署之前，您必须创建 Amazon CloudWatch 警报以监控来自终端节点的指标。警报在烘焙期间处于活动状态，如果触发了警报，则所有端点流量都会回滚到蓝色实例集。要了解如何在端点上设置 CloudWatch警报，请参阅先决条件页面[Auto-Rollback 配置和监控](deployment-guardrails-configuration.md)。要了解有关 CloudWatch 警报的更多信息，请参阅[亚马逊* CloudWatch 用户指南中的使用亚马逊 CloudWatch *警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

## 配置金丝雀流量转移
<a name="deployment-guardrails-blue-green-canary-configure"></a>

准备好部署并已为终端节点设置亚马逊 CloudWatch 警报后，即可使用 Amazon A [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)I AP SageMaker I 或 [update-endpoin](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) t 命令 AWS CLI 来启动部署。

**Topics**
+ [如何更新端点 (API)](#deployment-guardrails-blue-green-canary-configure-api-update)
+ [如何使用现有更新政策 (API) blue/green 更新终端节点](#deployment-guardrails-blue-green-canary-configure-api-existing)
+ [如何更新端点 (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### 如何更新端点 (API)
<a name="deployment-guardrails-blue-green-canary-configure-api-update"></a>

以下 [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API 示例显示了如何使用灰度流量转移来更新终端节点。

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="{{<your-endpoint-name>}}",
    EndpointConfigName="{{<your-config-name>}}",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "CANARY",
                "CanarySize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 30
                },
                "WaitIntervalInSeconds": 600
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "{{<your-cw-alarm>}}"
                }
            ]
        }
    }
)
```

要配置金丝雀流量转移选项，请执行以下操作：
+ 对于 `EndpointName`，请使用要更新的现有端点的名称。
+ 对于 `EndpointConfigName`，请使用要使用的端点配置的名称。
+ 在 `DeploymentConfig` 和 `BlueGreenUpdatePolicy` 下的 `TrafficRoutingConfiguration` 中，将 `Type` 参数设置为 `CANARY`。这指定了部署使用金丝雀流量转移。
+ 在 `CanarySize` 字段中，您可以通过修改 `Type` 和 `Value` 参数来更改金丝雀的大小。对于 `Type`，请使用 `CAPACITY_PERCENT`，此值表示您要用作金丝雀的绿色实例集的百分比，然后将 `Value` 设置为 `30`。在此示例中，您将绿色实例集的 30% 容量用作金丝雀。请注意，金丝雀规模应等于或小于绿色实例集容量的 50%。
+ 对于 `WaitIntervalInSeconds`，请使用 `600`。该参数告诉 SageMaker AI 在每次间隔偏移之间等待指定的时间（以秒为单位）。此间隔是金丝雀烘焙期的持续时间。在前面的示例中， SageMaker AI 在金丝雀移位后等待 10 分钟，然后完成第二次也是最后一次流量转移。
+ 对于 `TerminationWaitInSeconds`，请使用 `600`。此参数告诉 SageMaker AI 在您的绿色队列完全激活后等待指定的时间（以秒为单位），然后再终止蓝色队列中的实例。在此示例中， SageMaker AI 在最后的烘焙期结束后等待 10 分钟，然后才终止蓝舰队。
+ 对于 `MaximumExecutionTimeoutInSeconds`，请使用 `1800`。此参数设置部署在超时之前可以运行的最长时间。在前面的示例中，您的部署的完成时间限制为 30 分钟。
+ 在该`Alarms`字段中，您可以按名称添加 CloudWatch 警报。`AutoRollbackConfiguration`为要使用的每个警报创建一个 `AlarmName: {{<your-cw-alarm>}}` 条目。

### 如何使用现有更新政策 (API) blue/green 更新终端节点
<a name="deployment-guardrails-blue-green-canary-configure-api-existing"></a>

使用 [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API 创建终端节点时，您可以选择指定部署配置，以便在将来的终端节点更新中重复使用。您可以使用与前面的 UpdateEndpoint API 示例相同的`DeploymentConfig`选项。 CreateEndpoint API 行为没有变化。指定部署配置不会自动在终端节点上执行 blue/green 更新。

使用 [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API 更新您的终端节点时，可以选择使用先前的部署配置。更新端点时，您可以使用 `RetainDeploymentConfig` 选项，以保留创建端点时您指定的部署配置。

调用 [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API 时，请`RetainDeploymentConfig`将设置`True`为以保留原始端点配置中的`DeploymentConfig`选项。

```
response = client.update_endpoint(
    EndpointName="{{<your-endpoint-name>}}",
    EndpointConfigName="{{<your-config-name>}}",
    RetainDeploymentConfig=True
)
```

### 如何更新端点 (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

如果您使用的是 AWS CLI，则以下示例说明如何使用 [update-endp](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) oint 命令启动 blue/green 金丝雀部署。

```
update-endpoint
--endpoint-name {{<your-endpoint-name>
}}--endpoint-config-name {{<your-config-name>}} 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "CANARY",
    "CanarySize": {"Type": "CAPACITY_PERCENT", "Value": 30}, "WaitIntervalInSeconds": 600},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "{{<your-alarm>}}"}]}'
```

要配置金丝雀流量转移选项，请执行以下操作：
+ 对于 `endpoint-name`，请使用要更新的端点的名称。
+ 对于 `endpoint-config-name`，请使用要使用的端点配置的名称。
+ 对于`deployment-config`，请使用 [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html)JSON 对象。

**注意**  
如果您想将 JSON 对象保存在文件中，请参阅*AWS CLI 用户指南*中的[生成 AWS CLI 框架和输入参数](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html)。