You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

通过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要求的标准路径里:

  1. src/layers/下创建严格符合要求的目录结构:
    src/layers/
    └── python/
        └── lib/
            └── python3.9/
                └── site-packages/
    
  2. 运行pip命令把依赖安装到这个路径:
    pip install -r src/layers/requirements.txt -t src/layers/python/lib/python3.9/site-packages/
    
  3. 检查一下site-packages目录里,能看到jsonsstructlog这些安装好的模块
  4. 重新部署CDK,这次打包的Layer就会包含所有实际依赖了

额外注意事项

  • 确保你的aws-cdk-libaws-cdk.aws-lambda-python-alpha包是最新版本,旧版本可能存在依赖安装的bug
  • 部署完成后,可以再用aws lambda get-layer-version-by-arn命令下载Layer包,解压后确认python/lib/python3.9/site-packages/下有所有依赖模块,这样Lambda运行时就能正常找到它们了

备注:内容来源于stack exchange,提问作者Guillaume

火山引擎 最新活动