通过AWS CDK部署Python Lambda Layer时仅打包requirements.txt而非实际依赖模块的问题解决
通过AWS CDK部署Python Lambda Layer时仅打包requirements.txt而非实际依赖模块的问题解决
嘿,这个问题我之前踩过坑!其实核心是Lambda Layer对Python依赖的目录结构有严格要求,再加上CDK的PythonLayerVersion组件的处理逻辑得匹配上,才会出现只打包了requirements.txt却没装实际模块的情况。给你几个靠谱的解决办法:
方法一:让CDK自动帮你安装依赖(推荐)
这是最省心的方式,CDK本身就支持自动处理Python依赖的安装和打包,只要目录结构符合它的预期:
- 确保你的
src/layers/目录下直接存放requirements.txt,不要提前创建python这类子目录 - 重新执行CDK部署命令,它会自动运行
pip install,把依赖包安装到python/lib/python3.9/site-packages/(对应你指定的Python 3.9 runtime)路径下,再打包进Layer - 你之前只看到requirements.txt,大概率是因为layers目录里有其他不符合预期的结构(比如已经存在
python文件夹),CDK会直接打包现有目录,跳过依赖安装步骤
方法二:手动安装依赖到指定路径
如果不想让CDK自动处理,也可以手动把依赖装到Lambda要求的标准路径里:
- 在
src/layers/下创建严格符合要求的目录结构:src/layers/ └── python/ └── lib/ └── python3.9/ └── site-packages/ - 运行pip命令把依赖安装到这个路径:
pip install -r src/layers/requirements.txt -t src/layers/python/lib/python3.9/site-packages/ - 检查一下
site-packages目录里,能看到jsons、structlog这些安装好的模块 - 重新部署CDK,这次打包的Layer就会包含所有实际依赖了
额外注意事项
- 确保你的
aws-cdk-lib和aws-cdk.aws-lambda-python-alpha包是最新版本,旧版本可能存在依赖安装的bug - 部署完成后,可以再用
aws lambda get-layer-version-by-arn命令下载Layer包,解压后确认python/lib/python3.9/site-packages/下有所有依赖模块,这样Lambda运行时就能正常找到它们了
备注:内容来源于stack exchange,提问作者Guillaume




