You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFormation创建变更集失败:无法找到SSM参数旧版本

解决CloudFormation因SSM旧版本参数被清理导致的变更集创建失败问题

核心原因

CloudFormation生成变更集时,会基于栈的历史状态快照做对比,旧快照里保留了已被清理的SSM参数版本(167)的引用。即便你修改了当前模板,系统仍会尝试验证历史依赖的存在,从而触发报错。

可行解决方案

1. 直接部署跳过变更集

放弃生成变更集的流程,直接执行部署操作:

  • AWS CLI方式:aws cloudformation deploy --template-file your-template.yml --stack-name your-stack
  • Serverless Framework方式:sls deploy --no-confirm-changes
    这种方式会直接基于当前模板和栈的最新状态生成部署计划,绕开对旧SSM版本的验证。

2. 部署过渡版本覆盖历史快照

  • 第一步:部署一个过渡模板,模板中使用**存在的SSM版本(如最新的400)**或硬编码镜像地址,同时添加一个无业务影响的冗余变更(比如给ECS任务定义加一个临时环境变量TEMP_FIX: "true")。这会让CloudFormation生成新的栈状态快照,覆盖掉包含旧SSM版本引用的历史记录。
  • 第二步:部署最终目标模板(可恢复SSM动态引用或保持硬编码),此时生成变更集时会基于最新的快照,不会再查找已被清理的旧版本参数。

3. 编辑变更集移除旧依赖(进阶操作)

  • 生成变更集时添加--no-execute-changeset参数,避免自动执行:
    aws cloudformation create-change-set --stack-name your-stack --change-set-name temp-fix --template-file your-template.yml --no-execute-changeset
    
  • 通过AWS控制台找到该变更集,编辑其中的资源定义,移除所有涉及旧SSM版本(167)的引用项,再执行变更集。注意:此操作需要熟悉CloudFormation变更集结构,建议先在测试环境验证。

4. 调整SSM参数版本保留策略(预防后续问题)

如果业务允许,修改SSM参数的最大保留版本数,避免旧版本被过早清理:

aws ssm put-parameter --name "param-name" --type "String" --value "current-image-tag" --version-history-enabled --max-version 200

设置的版本数建议大于你的部署周期内可能产生的版本数量,确保历史变更集依赖的版本不会被清理。

内容的提问来源于stack exchange,提问作者yaKashif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:30:59