在API网关部署上更新阶段变量时,如何避免停机?

时间:2019-01-28 13:50:33

标签: amazon-web-services amazon-cloudformation aws-api-gateway boto3

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

我想更新其阶段变量之一,并确保已部署更改。该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阶段。

谢谢

1 个答案:

答案 0 :(得分:0)

问题在于云形成模板已经使用Deployment资源的StageDescription属性创建了阶段,而我无法正确理解部署/阶段的关系。

资源阶段DEV最初与部署名称000绑定。

我的第一个update_stack调用用于更新阶段变量,但也将阶段DEV重新绑定到初始部署(Named000)。从那时起,所有新路线均未应用任何更改。

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