CloudFormation更新是否先创建新资源再删除旧资源?SNS-Lambda场景求证
CloudFormation 更新顺序与消息不丢失保障方案
首先明确:CloudFormation 的默认更新逻辑确实倾向于先创建新增资源、再更新现有资源、最后删除已移除资源,但AWS官方文档并未将此列为绝对的既定规则,依赖默认顺序存在潜在风险。
针对你要在SNS与Lambda间新增SQS队列且不丢消息的场景,最稳妥的方案是分两次执行CloudFormation更新:
- 第一次更新:仅添加SQS队列和SNS到该SQS的订阅,保留原有的SNS→Lambda订阅。这一步中,CloudFormation会优先创建新的SQS和订阅资源,原订阅不受影响,消息会同时发送到Lambda和SQS,你的Lambda已兼容两种格式,不会出现问题。
- 第二次更新:确认SQS及其下游消费逻辑(比如Lambda从SQS拉取消息)运行正常后,再移除原有的SNS→Lambda订阅。
如果一定要在单次更新内完成操作,需要通过显式依赖强制顺序:
你可以给原有的SNS→Lambda订阅资源添加DependsOn属性,依赖新创建的SQS队列和SNS→SQS订阅。不过要注意,这种方式虽然能强制CloudFormation先完成新资源的创建再处理旧资源的删除,但AWS对删除操作的依赖处理不如创建/更新稳定,因此分两次更新的风险更低。
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

