

# 更新 Canary 版本
<a name="update-canary-deployment"></a>

 在部署了 Canary 版本之后，您可能需要调整 Canary 流量的百分比，或者启用或禁用阶段缓存以优化测试性能。在更新执行上下文时，您还可以修改在 Canary 版本中使用的阶段变量。要进行此类更新，请在 [canarySettings](https://docs.amazonaws.cn/apigateway/latest/api/API_Stage.html#canarySettings) 上使用新值调用 [https://docs.amazonaws.cn/apigateway/latest/api/API_UpdateStage.html](https://docs.amazonaws.cn/apigateway/latest/api/API_UpdateStage.html) 操作。

您可以使用 API Gateway 控制台、Amazon CLI [update-stage](https://docs.amazonaws.cn/cli/latest/reference/apigateway/update-stage.html) 命令或Amazon开发工具包更新 Canary 版本。

**Topics**
+ [使用 API Gateway 控制台更新 Canary 版本](#update-canary-deployment-using-console)
+ [使用 Amazon CLI 更新 Canary 版本](#update-canary-deployment-using-cli)

## 使用 API Gateway 控制台更新 Canary 版本
<a name="update-canary-deployment-using-console"></a>

要使用 API Gateway 控制台更新阶段上的现有 Canary 设置，请执行以下操作：

**更新现有的金丝雀设置**

1.  登录 API Gateway 控制台并选择现有的 REST API。

1.  在主导航窗格中，选择**阶段**，然后选择一个现有阶段。

1.  选择**金丝雀**选项卡，然后选择**编辑**。您可能需要选择右箭头按钮以显示**金丝雀**选项卡。

1.  通过在 0.0 到 100.0 之间（含）增加或减少百分比数字，更新**请求分布**。

1.  选中或清除**阶段缓存**复选框。

1.  添加、移除或修改**金丝雀阶段变量**。

1.  选择**保存**。

## 使用 Amazon CLI 更新 Canary 版本
<a name="update-canary-deployment-using-cli"></a>

要使用 Amazon CLI 更新金丝雀，请使用 [https://docs.amazonaws.cn/cli/latest/reference/apigateway/update-stage.html](https://docs.amazonaws.cn/cli/latest/reference/apigateway/update-stage.html) 命令，修改金丝雀的每个参数的补丁操作。

以下 [update-stage](https://docs.amazonaws.cn/cli/latest/reference/apigateway/update-stage.html) 命令更新金丝雀是否使用阶段缓存：

```
aws apigateway update-stage \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}' \
    --patch-operations op=replace,path=/canarySettings/useStageCache,value=true
```

以下 [update-stage](https://docs.amazonaws.cn/cli/latest/reference/apigateway/update-stage.html) 命令更新金丝雀流量百分比：

```
aws apigateway update-stage \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}' \
    --patch-operations op=replace,path=/canarySettings/percentTraffic,value=25.0
```

以下 [update-stage](https://docs.amazonaws.cn/cli/latest/reference/apigateway/update-stage.html) 更新阶段变量。示例演示如何创建名为的 `newVar` 的新阶段变量，覆盖 `var2` 阶段变量，然后删除 `var1` 阶段变量：

```
aws apigateway update-stage  \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}'  \
    --patch-operations '[{                                      
        "op": "replace",                                        
        "path": "/canarySettings/stageVariableOverrides/newVar", 
        "value": "newVal"                                      
      }, { 
        "op": "replace",                                        
        "path": "/canarySettings/stageVariableOverrides/var2",   
        "value": "val4"                                        
      }, {                                                      
        "op": "remove",                                         
        "path": "/canarySettings/stageVariableOverrides/var1"    
      }]'
```

您可以通过将操作组合到单个 `patch-operations` 值中，更新以上所有内容。

```
aws apigateway update-stage  \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}' \
    --patch-operations '[{                                       
        "op": "replace",                                         
        "path": "/canarySettings/percentTraffic",                        
        "value": "20.0"                                          
    }, {                                                         
        "op": "replace",                                         
        "path": "/canarySettings/useStageCache",                        
        "value": "true"                                          
    }, {                                                         
        "op": "remove",                                          
        "path": "/canarySettings/stageVariableOverrides/var1"    
    }, {                                                         
        "op": "replace",                                         
        "path": "/canarySettings/stageVariableOverrides/newVar", 
        "value": "newVal"                                        
    }, {                                                         
        "op": "replace",                                         
        "path": "/canarySettings/stageVariableOverrides/val2",   
        "value": "val4"                                          
      }]'
```

