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

AWS Lambda函数出现[Errno 30]只读文件系统错误,请求排查

解决Lambda中“只读文件系统”的IO错误

为什么会出现这个错误?

你正在AWS Lambda环境中运行代码,而Lambda的默认工作目录(/var/task)是只读的——这是Lambda的安全设计,防止函数意外修改部署包内的文件。你代码里直接写open('data.json','w'),是尝试往这个只读目录里写文件,自然会触发Errno 30的权限错误。

两种解决思路

1. 用Lambda唯一可写的/tmp目录(如果必须用文件存储)

Lambda给每个函数分配了一个临时可写目录/tmp,你只需要把文件路径改成这个目录即可:

import json

# 假设doc是pdfminer提取的文本数据
with open('/tmp/data.json', 'w') as f:
    json.dump(doc, f)

# 读取临时文件
with open('/tmp/data.json', 'r') as f:
    dataj = json.load(f)
doc_data = dataj[:]

注意:/tmp目录的存储空间有限(目前是512MB),而且函数执行结束后,这个目录里的文件可能会被清理,只适合临时存数据用。

2. 跳过文件IO,直接操作内存数据(更高效,推荐)

看你的代码逻辑,你其实只是想把doc转成JSON格式后再读出来——这完全是多余的步骤!直接在内存里处理数据就行,既省时间又避免文件操作的麻烦:

import json

# 假设doc是提取出的纯文本字符串,先包装成Elasticsearch需要的结构
doc_data = {"content": doc}  # 这里可以根据你的ES索引结构调整字段名

# 如果doc本身就是字典/列表类型,直接用就行,连json.dump/load都不需要
# doc_data = doc.copy()  # 或者直接用doc本身

这样你可以直接拿着doc_data去做Elasticsearch的索引操作,效率高多了。

额外提醒

  • 如果你的PDF文件很大,处理时要注意Lambda的内存上限,避免内存溢出;
  • 不要在/tmp目录里存储需要持久化的数据,真要存的话,还是用S3这类存储服务更靠谱。

内容的提问来源于stack exchange,提问作者Maheswar Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:10:34