AWS CDK Lambda无法导入orjson模块的问题排查求助
环境与操作背景
我在Windows环境下基于AWS CDK开发项目,项目结构如下:
my-project/ ├─ stack/ │ ├─ src/ │ │ ├─ functions/ │ │ │ ├─ lambda.py │ ├─ __init__.py │ ├─ my_stack.py ├─ app.py ├─ poetry.lock ├─ pyproject.toml
通过CDK定义了/package GET端点,关联Lambda函数,同时将依赖打包为Lambda Layer。但调用端点时返回502错误,Lambda日志显示:
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda': No module named 'orjson'
我的操作流程:
- 用Poetry导出依赖到
requirements-poetry.txt - 执行
pip install -r requirements-poetry.txt -t ./vendor把依赖安装到vendor文件夹 - 将vendor打包为
vendor.zip作为Lambda Layer关联到函数
错误原因分析
Windows安装的依赖与Lambda运行环境不兼容
Lambda的运行环境是Linux,而Windows下pip安装的带C扩展的包(比如orjson)是Windows版本,Linux系统无法识别加载。依赖层的zip包结构不符合Lambda要求
Lambda要求Python层的zip包根目录必须包含python文件夹,所有依赖文件要放在这个python目录下。你直接打包vendor文件夹,结构错误,Lambda无法将依赖路径加入Python的sys.path。导出的依赖包含冗余内容
你的requirements-poetry.txt里包含了constructs、jsii、docker等CDK部署相关的依赖,这些是部署时用的,Lambda运行时根本不需要,属于冗余内容,还可能引发冲突。
解决方案
1. 安装Linux兼容的依赖(二选一)
方法一:用Docker模拟Lambda环境安装
执行以下命令,通过Lambda官方镜像安装适配Linux的依赖:
docker run -v "$(pwd):/var/task" lambci/lambda:build-python3.9 pip install -r requirements-poetry.txt -t ./vendor/python
方法二:通过WSL2安装
切换到Windows子系统Linux的项目目录,执行:
pip install -r requirements-poetry.txt -t ./vendor/python
2. 正确打包依赖层
进入vendor目录,将python文件夹打包成zip:
cd vendor zip -r ../vendor.zip python/
这样生成的zip包根目录是python,Lambda会自动识别并添加到Python路径。
3. 清理冗余依赖
修改Poetry导出命令,只导出Lambda运行需要的依赖:
poetry export --without-hashes --without dev --format=requirements.txt > requirements-poetry.txt
或者手动编辑requirements-poetry.txt,删除constructs、jsii、docker等与Lambda运行无关的依赖。
4. 修复CDK代码的小问题
你的my_stack.py中使用了os.environ但未导入os模块,需要在文件开头添加:
import os
内容的提问来源于stack exchange,提问作者Firefly

