使用CodeBuild构建Zip包后,AWS Python Lambda无法导入模块
Lambda找不到CodeBuild构建包中依赖项的常见原因
- 架构不兼容:如果CodeBuild用x86_64环境安装依赖,而Lambda运行在arm64架构(反之亦然),像cytoolz这类带C扩展的二进制依赖会因为架构不匹配无法被识别。必须保证CodeBuild的环境架构和Lambda函数的运行架构完全一致,比如都选x86_64或arm64。
- 依赖安装未适配Lambda环境:安装依赖时没指定对应Lambda架构的平台参数,比如针对x86_64要加
--platform manylinux2014_x86_64,arm64加--platform manylinux2014_aarch64。没加的话,pip会安装适配CodeBuild本地系统的依赖,而非Lambda兼容版本。 - CodeBuild安装路径错误:执行
pip install时没加--target .参数,依赖会被装到系统默认路径,而非项目根目录,打包时自然没包含进去。正确命令应该是pip install -r requirements.txt --target .,确保依赖被放到Zip包顶层。 - Zip包结构不符合要求:看似按文档把文件放顶层,但实际打包可能出现嵌套。比如用
zip -r function.zip .打包时,如果当前目录下有子目录,依赖可能被塞进子文件夹。建议解压打包后的Zip包,检查cytoolz文件夹是否直接在根目录,而非子目录下。 - 依赖损坏或版本不兼容:安装时网络问题可能导致包损坏,或者requirements.txt里的版本和Lambda的Python运行时不兼容。可以在CodeBuild里加验证步骤,比如安装后跑
pip check检查依赖完整性,或者指定适配Lambda Python版本的依赖版本。
内容的提问来源于stack exchange,提问作者Ramón J Romero y Vigil
相关产品推荐
相关产品推荐

