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

AWS Lambda层添加Brotli包失败:无法导入_brotli模块

问题描述

我需要在AWS Lambda函数中使用Brotli包,因此尝试将其添加到Lambda层中,操作步骤如下:

  • 启动x86架构EC2实例
  • 执行命令:
mkdir layer
cd layer
pip install --target ./package brotli
cd ./package
zip -r ../package.zip .
  • 用unzip -l package.zip验证package.zip中包含Brotli
  • 将package.zip上传至S3
  • 通过S3对象创建Lambda层
  • 运行调用import brotli的Lambda函数

运行时出现如下错误:

{
  "errorMessage": "Unable to import module 'lambda_function': No module named '_brotli'",
  "errorType": "Runtime.ImportModuleError",
  "requestId": "9e09618c-4eaa-41a5-8926-0c18f78f87d7",
  "stackTrace": []
}

已尝试的操作:

  • 使用相同步骤添加其他依赖,可正常导入该包
  • 本地运行导入Brotli的Lambda处理程序,未出现错误

预期结果:Lambda函数可正常导入Brotli包,无报错


解决方案

这个错误的核心原因是Brotli包含_brotli这个C扩展组件,你当前使用的EC2实例环境与Lambda的运行环境(Amazon Linux 2)不兼容,导致编译生成的扩展文件无法在Lambda中加载。以下是两种可靠的解决方法:

方法1:使用Amazon Linux 2 EC2实例构建层

Lambda的x86运行环境基于Amazon Linux 2,必须在相同环境下安装Brotli才能生成兼容的扩展文件:

  1. 启动Amazon Linux 2的x86架构EC2实例(不要用其他Linux发行版)
  2. 先安装Python及依赖工具:
sudo yum install -y python3-pip zip
  1. 执行安装打包命令:
mkdir layer
cd layer
pip3 install --target ./package brotli
cd ./package
zip -r ../package.zip .
  1. 后续上传S3、创建Lambda层的步骤保持不变

方法2:用Docker模拟Lambda环境构建(无需EC2)

如果不想启动EC2,可以用AWS官方的Lambda运行时镜像来构建:

  1. 本地安装Docker后,拉取对应Python版本的Lambda镜像(示例为Python 3.9):
docker pull public.ecr.aws/lambda/python:3.9
  1. 创建临时目录,运行容器并安装Brotli:
mkdir -p ./layer/package
docker run -v "$PWD/layer/package:/package" public.ecr.aws/lambda/python:3.9 pip install brotli --target /package
  1. 进入package目录打包:
cd ./layer/package
zip -r ../package.zip .
  1. 上传S3并创建Lambda层

验证步骤

打包完成后,可通过unzip -l package.zip检查是否存在_brotli.cpython-XXX-x86_64-linux-gnu.so这类文件(XXX对应你的Python版本),存在则说明扩展文件已正确生成。

内容的提问来源于stack exchange,提问作者Robert Luttrell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:03:19