You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CDK Lambda无法导入orjson模块的问题排查求助

问题:Lambda依赖层无法导入orjson导致502错误

环境与操作背景

我在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'

我的操作流程:

  1. 用Poetry导出依赖到requirements-poetry.txt
  2. 执行pip install -r requirements-poetry.txt -t ./vendor把依赖安装到vendor文件夹
  3. 将vendor打包为vendor.zip作为Lambda Layer关联到函数

错误原因分析

  1. Windows安装的依赖与Lambda运行环境不兼容
    Lambda的运行环境是Linux,而Windows下pip安装的带C扩展的包(比如orjson)是Windows版本,Linux系统无法识别加载。

  2. 依赖层的zip包结构不符合Lambda要求
    Lambda要求Python层的zip包根目录必须包含python文件夹,所有依赖文件要放在这个python目录下。你直接打包vendor文件夹,结构错误,Lambda无法将依赖路径加入Python的sys.path。

  3. 导出的依赖包含冗余内容
    你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:07:10