Python 3.13 Lambda使用wkhtmltopdf遇部署包解压失败求助
AWS Lambda部署wkhtmltopdf包解压失败排查方案
问题描述
在Python 3.13版本的AWS Lambda函数中部署wkhtmltopdf相关包时,收到错误:
Failed to update the function ___: AWS Lambda could not unzip the deployment package
已执行的操作:
- 下载指定仓库并执行
./build.sh,生成包含bin和lib文件夹的压缩包 - 因压缩包超过10MB限制,上传至S3并使用其URL进行部署
可能遗漏的操作及解决方法
1. 检查压缩包结构是否符合Lambda要求
Lambda层的压缩包必须将bin、lib等核心文件夹放在根目录,不能嵌套在子文件夹内。执行./build.sh生成压缩包后,本地解压验证:如果解压后看到的是一个父文件夹(比如仓库名称),再在里面找到bin和lib,则需要重新打包,直接将bin和lib文件夹压缩为zip包。
2. 配置Lambda对S3对象的读取权限
Lambda服务需要具备读取该S3压缩包的权限:
- 给Lambda的执行角色添加权限策略,包含
s3:GetObject动作,资源指定为该S3对象的ARN(格式:arn:aws:s3:::bucketname/wkhtmltopdf.zip) - 避免直接设置S3对象为公开可读(生产环境不推荐)
3. 验证压缩包完整性
上传到S3的压缩包可能在传输过程中损坏,导致Lambda无法解压:
- 从S3下载压缩包到本地,尝试手动解压,确认文件无损坏
- 重新执行
./build.sh生成新的压缩包,再重新上传到S3
4. 确认编译版本与Python 3.13运行时兼容
Python 3.13对应的Lambda运行时是Amazon Linux 2023,需确认该仓库的build.sh脚本是否针对该环境编译wkhtmltopdf。如果编译环境不匹配,可能导致依赖库不兼容,间接引发解压或运行问题。可以尝试在Amazon Linux 2023环境中重新编译生成压缩包。
5. 确认部署方式正确
如果是将该包作为Lambda层部署:需在创建层时选择“从S3上传”,并正确填写S3对象URL;如果是直接合并到Lambda函数部署包中,需确保总大小符合Lambda限制(未解压最大250MB,解压后最大512MB),且包结构符合Python函数的部署要求。
内容的提问来源于stack exchange,提问作者marcosfandrade
相关产品推荐
相关产品推荐

