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

Serverless Python插件:CI/CD容器中Lambda Layer无代码变更版本递增问题

问题描述

我正在使用Serverless Framework部署Lambda函数与Lambda Layers。

创建Lambda Layers时,我们为每个层单独创建文件夹,每个文件夹内包含定义Lambda层的serverless.yaml文件,以及定义Python依赖库的requirements.txt文件,该文件供已安装的python requirements插件使用。

文件夹结构:

├── layers
│   ├── <layer_name1>
│   │   ├── requirements.txt
│   │   └── serverless.yaml
│   ├── <layer_name2>
│   │   ├── requirements.txt
│   │   └── serverless.yaml
│   └── <layer_name3>
│       ├── requirements.txt
│       └── serverless.yaml
├── serverless.yaml
├── <app_folder>

我们发现每次触发应用的CI/CD流水线时,无论serverless.yaml和requirements.txt文件是否更新,Lambda Layer版本都会递增。流水线每次都会基于Ubuntu 22.04镜像的新容器执行serverless deploy命令。

在本地电脑执行serverless deploy部署Lambda Layer时表现正常:无代码变更则不会创建CloudFormation栈变更请求。但在新容器中执行相同命令时,首次部署会更新Lambda Layer版本号,再次执行则表现正常,不会创建变更请求。

停止容器并创建新容器后,重复上述现象:首次部署无代码变更却版本递增,后续执行则正常。

复现步骤
  • 基于基础Docker镜像启动新容器($docker run <image_name>)
  • 将仓库内容复制到容器中($docker cp <folder_name> <container_name>:<folder_path>)
  • 在Docker容器中配置AWS凭证($aws configure)
  • 在仓库根目录安装Python requirements插件($cd <folder_path> && serverless plugin install -n serverless-python-requirements)
  • 进入layers/<layer_name>目录($cd layers/<layer_name>)
  • 尝试部署新的Lambda Layer($serverless deploy)

结果:

即使代码与上次部署无变更,Layer版本仍会递增。再次执行部署命令时,系统识别到无代码变更,不会更新版本号。

注意: 每次执行上述复现流程时,都会创建新的.serverless文件夹,其中包含pythonRequierements.zip和cloudformation-template-update-stack.json文件。

再次执行复现流程时,生成的pythonRequierements.zip文件大小略有差异,但解压后内容完全一致(文件数量、大小均相同)。

分析cloudformation-template-update-stack.json文件,发现以下代码片段中的PythonRequirementsLambdaLayerHash值也不同:

"PythonRequirementsLambdaLayerHash": {
  "Description": "Current Lambda layer hash",
  "Value": "**c4e6c87314753740433442c351cb57f503240bce**",
  "Export": {
    "Name": "sls-contributor-backend-layer-utils-dev-PythonRequirementsLambdaLayerHash"
  }
}

是否可能是Serverless Framework生成Lambda Layer哈希的算法依赖于运行操作系统?

预期行为:

若Lambda Layer代码(serverless.yaml和requirements.txt文件)无变更,执行serverless deploy后版本号应保持不变。

这应该是CI/CD集成中的常见问题,是否存在通用解决方案?

版本信息:
  • Node版本:v14.21.3
  • Serverless Framework版本:3.30.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:32:39