

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

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

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

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

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

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


SageMaker AI 预调配新实例集之后，将弃用绿色实例集的第一部分并接收流量。SageMaker AI 在蓝色实例集内停用相同大小的部分，烘焙期开始。如果触发了任意警报，所有端点流量都会回滚到蓝色实例集。如果烘焙期结束，则开始下一步。继续激活绿色实例集的另一部分并接收流量，停用一部分蓝色实例集，开始下一个烘焙期。重复相同的流程，直到蓝色实例集完全停用，绿色实例集全部处于活动状态并接收所有流量。如果在任何时间触发了警报，SageMaker AI 就会终止切换过程，所有流量将回滚到蓝色实例集。

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

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

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

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

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

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

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

使用 [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-endpoint](https://docs.aws.amazon.com/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": "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.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)。