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

基于Docker的AWS Lambda使用CrewAI时出现只读文件系统错误

问题分析与解决方案

从错误栈可以明确:错误发生在embedchain库初始化阶段,它尝试写入默认的/home/sbx_user1051目录(Lambda只读环境),而你设置的CONFIG_DIR环境变量没有在embedchain加载前生效。

核心原因

你的代码中,导入crew模块的操作早于CONFIG_DIR环境变量的设置。当from crew import PTECrew执行时,会触发crewai的导入,进而触发embedchain的初始化,此时CONFIG_DIR还是默认值(指向只读的用户主目录),导致写入失败。

具体修复步骤

1. 调整代码执行顺序,优先设置环境变量

修改app.py,确保在导入任何依赖embedchain的模块前,先完成环境变量配置:

import os
from dotenv import load_dotenv

# 第一步:先设置所有需要的环境变量
os.environ["CONFIG_DIR"] = "/tmp/config_dir"
os.environ["HOME"] = "/tmp"  # 额外设置HOME到/tmp,避免其他库写入只读主目录
os.makedirs(os.environ["CONFIG_DIR"], exist_ok=True)

# 第二步:加载环境变量并导入依赖模块
load_dotenv()
from crew import PTECrew

def handler(event, context):
    # 调用crew逻辑
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }

2. 在Dockerfile中提前注入环境变量(可选但更稳妥)

在容器构建阶段就设置环境变量,确保程序启动时所有依赖库都能读取到正确的路径:

FROM public.ecr.aws/lambda/python:3.12

# 提前设置环境变量,覆盖默认路径
ENV CONFIG_DIR /tmp/config_dir
ENV HOME /tmp

RUN microdnf install -y gcc gcc-c++ 

COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip install -r requirements.txt

COPY .env ${LAMBDA_TASK_ROOT}
COPY *.py ${LAMBDA_TASK_ROOT}

CMD [ "app.handler" ]

3. 验证embedchain的其他写入路径

如果仍有写入错误,检查embedchain文档确认是否有其他需要配置的路径(如数据存储目录),同样将其指向/tmp下的子目录。

为什么之前的自定义Crew类无效?

你的MyCrewApp类初始化逻辑是在handler执行阶段才运行的,但embedchain的初始化发生在模块导入阶段(远早于handler调用),所以这个设置根本没机会生效。

内容的提问来源于stack exchange,提问作者Sulove Dahal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:30:19