Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

保护 Canary 版本

提升金丝雀版本,使其在正测试的 API 版本的生产阶段中可用。操作涉及到以下任务:

  • 使用金丝雀版本的部署 ID 设置重置阶段的部署 ID。这会使用金丝雀版本的快照更新阶段的 API 快照,使得测试版本也成为生产版本。

  • 使用金丝雀版本阶段变量更新阶段变量 (如有)。这会使用金丝雀版本的内容更新阶段的 API 执行上下文。没有此更新时,如果测试版本使用不同的阶段变量或者现有阶段变量的不同值,新 API 版本可能会造成意外的结果。

  • 将金丝雀版本流量的百分比设置为 0.0%。

提升金丝雀版本不会在阶段上禁用金丝雀版本。要禁用金丝雀版本,您必须在阶段上删除金丝雀版本设置。

使用 API Gateway 控制台提升金丝雀版本

要使用 API Gateway 控制台提升金丝雀版本部署,请执行以下步骤:

  1. 登录到 API Gateway 控制台并在主导航窗格中选择现有 API。

  2. 在 API 下选择 Stages (阶段),然后在 Stages (阶段) 列表下选择现有阶段以打开 Stage Editor (阶段编辑器)

  3. Stage Editor (阶段编辑器) 中选择 Canary (金丝雀版本) 选项卡。

  4. 选择 Promote Canary (提升金丝雀版本)

  5. 确认所做更改,然后选择更新

提升之后,生产版本引用相同的 API 版本 (deploymentId) 作为 Canary 版本。您可以使用 AWS CLI 验证此项。有关示例,请查看使用 AWS CLI 提升 Canary 版本

使用 AWS CLI 提升 Canary 版本

要使用 AWS CLI 命令将 Canary 版本提升到生产版本,请调用 update-stage 命令以将与 Canary 版本关联的 deploymentId 复制到与阶段关联的 deploymentId,将 Canary 版本流量百分比重置为零 (0.0),并且将任意 Canary 版本绑定阶段变量复制到对应的阶段绑定变量。

假设我们有一个金丝雀版本部署,由类似于以下内容的阶段描述:

{ "_links": { ... }, "accessLogSettings": { ... }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "canarySettings": { "deploymentId": "eh1sby", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" }, "percentTraffic": 10.5 }, "createdDate": "2017-11-20T04:42:19Z", "deploymentId": "nfcn0x", "lastUpdatedDate": "2017-11-22T00:54:28Z", "methodSettings": { ... }, "stageName": "prod", "variables": { "sv1": "val1" } }

我们调用以下 update-stage 请求来提升它:

aws apigateway update-stage \ --rest-api-id {rest-api-id} \ --stage-name '{stage-name}' \ --patch-operations '[{ \ "op": "replace", \ "value": "0.0" \ "path": "/canarySettings/percentTraffic", \ }, { \ "op": "copy", \ "from": "/canarySettings/stageVariableOverrides", \ "path": "/variables", \ }, { \ "op": "copy", \ "from": "/canarySettings/deploymentId", \ "path": "/deploymentId" \ }]'

提升后,阶段现在看起来与以下内容类似:

{ "_links": { ... }, "accessLogSettings": { ... }, "cacheClusterEnabled": false, "cacheClusterStatus": "NOT_AVAILABLE", "canarySettings": { "deploymentId": "eh1sby", "useStageCache": false, "stageVariableOverrides": { "sv2": "val3", "sv1": "val2" }, "percentTraffic": 0 }, "createdDate": "2017-11-20T04:42:19Z", "deploymentId": "eh1sby", "lastUpdatedDate": "2017-11-22T05:29:47Z", "methodSettings": { ... }, "stageName": "prod", "variables": { "sv2": "val3", "sv1": "val2" } }

正如您所看到的,将金丝雀版本提升到阶段并不会禁用该金丝雀版本,部署仍然是金丝雀版本部署。要使其成为常规生产版本部署,您必须禁用金丝雀设置。有关如何禁用金丝雀版本部署的更多信息,请参阅 禁用 Canary 版本