使用相同镜像摘要通过Serverless Framework部署时如何避免创建新Lambda版本
解决方案
以下是两种适配不同场景的操作方法:
方法1:全局关闭自动版本创建
适合不需要Lambda版本、灰度发布能力的场景,配置一次永久生效:
- 打开项目根目录的
serverless.yml文件,在provider配置块中添加versionFunctions: false参数:
provider: name: aws # 其他原有provider配置保持不变 versionFunctions: false
- 配置完成后重新部署,无论镜像摘要是否变化,都不会自动生成新的Lambda版本。
注意:该配置会对项目内所有Lambda函数生效,如果需要保留部分函数的版本创建能力,建议使用方法2。
方法2:仅在镜像摘要无变化时跳过版本创建
适合需要保留版本、别名能力,仅想避免无意义重复版本的场景:
- 首先确认你的Serverless Framework版本 >= 3.28.0,低于该版本不支持镜像哈希变更检测,需要先升级框架版本
- 在对应函数的配置块中添加如下参数:
functions: 你的函数名: image: 你的ECR镜像地址@sha256:xxxxxxx # 其他原有函数配置保持不变 package: individually: true
- 配置完成后框架会在部署前自动比对本地配置的镜像摘要和线上已部署版本的摘要,二者完全一致时会直接跳过版本创建流程。
异常排查
如果配置完成后仍然生成新版本,可以依次核对两项内容:
- 确认部署命令没有添加
--force参数,该参数会强制跳过所有变更检测,直接生成新版本 - 确认镜像构建逻辑没有写入可变元数据,部分构建工具会在每次构建时自动插入不同的时间戳、构建ID等元数据,即使代码未变更也会导致镜像摘要变化,需要调整构建参数关闭可变元数据写入。
内容的提问来源于stack exchange,提问作者Toru Uetani
相关产品推荐
相关产品推荐

