

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

# 使用线性流量转移
<a name="deployment-guardrails-blue-green-linear"></a>

利用线性流量转移，您可以逐步将流量从旧实例集（蓝色实例集）转移到新实例集（绿色实例集）。通过线性流量转移，您可以分多个步骤转移流量，从而最大限度地减少端点中断的可能性。此 blue/green部署选项可让您对流量转移进行最精细的控制。

您可以选择在每个步骤中，激活的实例数或者绿色实例集容量的百分比。每个线性步骤选择的容量只应为绿色实例集容量的 10-50% 之间。对于每个步骤，都有一个烘焙期，在此期间，您预先指定的Amazon CloudWatch 警报会监控绿色车队的指标。烘焙期结束并且没有触发警报后，绿色实例集的活跃部分将继续接收流量，并开始新的步骤。如果在任意烘焙期中触发警报，则所有端点流量回滚到蓝色实例集。

下图显示了线性流量转移如何将流量路由到蓝色和绿色实例集。

![成功完成的从旧实例集到新实例集的三步线性流量转移。](http://docs.amazonaws.cn/sagemaker/latest/dg/images/deployment-guardrails-blue-green-linear.png)


一旦 SageMaker 人工智能配置了新的舰队，绿色舰队的第一部分就会开启并接收流量。 SageMaker 人工智能会停用蓝色舰队中相同规模的部分，烘焙期开始了。如果触发了任意警报，所有端点流量都会回滚到蓝色实例集。如果烘焙期结束，则开始下一步。继续激活绿色实例集的另一部分并接收流量，停用一部分蓝色实例集，开始下一个烘焙期。重复相同的流程，直到蓝色实例集完全停用，绿色实例集全部处于活动状态并接收所有流量。如果警报在任何时候响起， SageMaker 人工智能就会终止换档过程，100% 的流量会回滚到蓝色车队。

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

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

## 配置线性流量转移
<a name="deployment-guardrails-blue-green-linear-configure"></a>

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

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

### 如何更新端点 (API)
<a name="deployment-guardrails-blue-green-linear-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": "LINEAR",
                "LinearStepSize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 20
                },
                "WaitIntervalInSeconds": 300
            },
            "TerminationWaitInSeconds": 300,
            "MaximumExecutionTimeoutInSeconds": 3600
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "{{<your-cw-alarm>}}"
                }
            ]
        }
    }
)
```

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

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

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

使用 [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-endp](https://docs.amazonaws.cn/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": "LINEAR",
    "LinearStepSize": {"Type": "CAPACITY_PERCENT", "Value": 20}, "WaitIntervalInSeconds": 300},
    "TerminationWaitInSeconds": 300, "MaximumExecutionTimeoutInSeconds": 3600},
    "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)。