首页 > 解决方案 > 在 API 网关部署上更新阶段变量时如何避免停机?

问题描述

我有一个 API example_api 当前部署在 AWS API 网关的阶段 DEV 上。

我想更新其阶段变量之一并确保部署更改。API 由 CloudFormation 提供,阶段变量映射到模板参数。

我使用 boto3 和 CloudFormation(使用 UsePreviousTemplate 标志)更新堆栈并提供新值。

然后,我使用 boto3 为 DEV 上的 example_api 调用 create_deployment(以更新 DEV 上已部署的 example_api)。

此时,我的 API 在 15-20 秒左右变得不可用。我不断收到 {"message":"Missing Authentication Token"} 响应。

我想我在这里做错了什么。我是否要避免这样的停机时间并确保新的 API 尽快可用?

注意:我的 API 是通过 API 网关中的自定义域名访问的。基本路径映射到 DEV 阶段。

谢谢

标签: amazon-web-servicesamazon-cloudformationaws-api-gatewayboto3

解决方案


问题是云形成模板使用部署资源的 StageDescription 属性创建了阶段,我没有正确理解部署/阶段关系。

Resource Stage DEV 最初与 Deployment Named000 绑定。

我的第一个 update_stack 调用用于更新阶段变量,但也将阶段 DEV 重新绑定到初始部署 (Named000)。丢失此后应用的任何更改(任何新路线)。

通过创建部署资源并将时间戳附加到其名称以确保每次使用对流层生成堆栈时都会创建新资源,我能够更新阶段变量并在不停机的情况下正确部署。然后使用新的阶段变量更新堆栈将使阶段与最新部署绑定并避免引入停机时间。


推荐阅读