从Lambda并行触发多Lambda遇模块导入错误求助
针对你遇到的cannot import name 'apply_request_checksum' from 'botocore.client'错误,以下是具体解决思路:
排查版本兼容性冲突
Lambda运行时自带固定版本的botocore,即便你本地安装的版本和Lambda环境显示版本一致,打包时若将botocore纳入部署包,仍会和内置版本冲突。先在Lambda控制台运行以下代码确认内置botocore版本:import botocore print(botocore.__version__)然后查看aiobotocore/aioboto3的官方依赖说明,选择与该版本兼容的库版本。例如,若Lambda内置botocore为1.29.x,可尝试使用aiobotocore 2.5.0版本(该版本依赖botocore>=1.29.0,<1.30.0)。
打包时排除Lambda内置依赖
打包依赖时,不要将botocore、boto3等Lambda已内置的库包含进去。使用以下命令将依赖安装到指定目录:pip install --target ./package --no-deps aiobotocore再将该目录下的文件和你的Lambda函数代码一起打包成zip,确保部署包中只有aiobotocore及其专属依赖,无与内置库重复的文件。
使用Lambda层管理依赖
将aiobotocore/aioboto3打包为Lambda层,避免直接将依赖打包到函数代码中。打包层时同样遵循“排除内置依赖”的原则,再将层附加到目标Lambda函数上,层中的依赖会被优先加载,规避版本冲突。检查打包结构是否正确
确保部署包结构符合Lambda要求:Python代码文件(如lambda_function.py)在zip根目录,依赖包放在python/lib/pythonX.X/site-packages目录下(X.X为Python版本,如3.9)。错误的结构可能导致Lambda加载依赖时出现异常。
内容的提问来源于stack exchange,提问作者Stealthily

