无法复现可用Python CDK Layer压缩包,Lambda报requests导入错误
Lambda Layer导入requests失败的问题解决
问题描述
- Lambda函数依赖
requests库,旧版package.zip部署后可正常运行,但无法复现其生成方式 - 新生成的压缩包部署后,Lambda抛出错误:
"errorMessage": "Unable to import module 'lambdaHanlder': No module named 'requests'" - 当前生成流程:
- 执行
pip install --target=package -r requirements.txt生成package文件夹 - 压缩
package内文件得到package.zip
- 执行
requirements.txt内容:constructs>=10.0.0,<11.0.0 requests- CDK部署代码:
const lambdaLayer = new lambda.LayerVersion(this, 'layer', { code: lambda.Code.fromAsset('package.zip'), description: 'Libraries needed.' }); const fn = new lambda.Function(this, 'function', { runtime: lambda.Runtime.PYTHON_3_9, code: lambda.Code.fromAsset('lib/lambda'), handler: 'lambda.handler', description: new Date().toString(), layers: [lambdaLayer] }) - 已尝试无效操作:
- 通过pyenv切换Python 3.7/3.8/3.9/3.11/3.12版本重新生成压缩包
- 切换Node版本重新部署
解决步骤
1. 精简依赖清单
constructs是CDK的开发依赖,无需打包进Lambda Layer,修改requirements.txt仅保留:
requests
2. 按Lambda Layer规范生成压缩包
Lambda要求Python层的依赖必须放在python子目录下,正确生成步骤:
- 创建临时目录:
mkdir -p layer-python/python - 安装适配Lambda环境的依赖(指定平台避免本地架构不兼容):
pip install requests --target=layer-python/python --platform manylinux2014_x86_64 --only-binary=:all: - 进入
layer-python目录,压缩内部的python文件夹:cd layer-python zip -r ../package.zip python
3. 验证压缩包结构
解压package.zip后需确保结构如下:
python/ ├── requests/ ├── certifi/ ├── charset_normalizer/ ├── idna/ └── urllib3/
所有依赖库必须直接位于python目录下,Lambda会自动将此路径加入Python的模块搜索路径。
4. 重新部署
替换旧的package.zip后,执行CDK部署:
cdk deploy
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

