

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

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

借助金丝雀流量转移，您可以在新实例集上测试部分端点流量，而旧实例集为其余流量提供服务。此测试步骤是一个安全防护机制，可在将所有流量转移到新实例集之前验证新实例集是否正常运转。您仍然可获得蓝绿部署的益处，而增加的金丝雀功能则在让新（绿色）实例集处理全部流量之前，确保该实例集可以处理推理请求。

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

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

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


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

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

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

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

在您准备好部署并为端点设置了 Amazon CloudWatch 警报之后，您可以使用 Amazon SageMaker AI [UpdateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API 或 Amazon CLI 中的 [update-endpoint](https://docs.amazonaws.cn/cli/latest/reference/sagemaker/update-endpoint.html) 命令来启动部署。

**Topics**
+ [如何更新端点 (API)](#deployment-guardrails-blue-green-canary-configure-api-update)
+ [如何使用现有的蓝绿更新政策更新端点 (API)](#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.amazonaws.cn/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 分钟。
+ 在 `AutoRollbackConfiguration` 的 `Alarms` 字段中，您可以按名称添加 CloudWatch 警报。为要使用的每个警报创建一个 `AlarmName: <your-cw-alarm>` 条目。

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

使用 [CreateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateEndpoint.html) API 创建端点时，您可以选择指定部署配置，以便在以后的端点更新中重复使用。您可以使用与之前的 UpdateEndpoint API 示例中相同的 `DeploymentConfig` 选项。CreateEndpoint API 的行为不会改变。指定部署配置不会自动在端点上执行蓝绿更新。

使用 [UpdateEndpoint](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_UpdateEndpoint.html) API 更新您的端点时，会出现使用以前部署配置的选项。更新端点时，您可以使用 `RetainDeploymentConfig` 选项，以保留创建端点时您指定的部署配置。

调用 [UpdateEndpoint](https://docs.amazonaws.cn/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>

如果您使用的是 Amazon CLI，以下示例展示了如何使用 [update-endpoint](https://docs.amazonaws.cn/cli/latest/reference/sagemaker/update-endpoint.html) 命令启动蓝绿金丝雀部署。

```
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.amazonaws.cn/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html) JSON 对象。

**注意**  
如果您希望将 JSON 对象保存在文件中，请参阅《Amazon CLI 用户指南》**中的[生成 Amazon CLI 骨架和输入参数](https://docs.amazonaws.cn/cli/latest/userguide/cli-usage-skeleton.html)。