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

Python Lambda使用yahoo-oauth库写入根目录报错解决方案咨询

解决Lambda中yahoo-oauth库写入只读文件系统的问题

我使用yahoo-oauth库拉取Yahoo Fantasy的数据,将Lambda函数打包为Docker镜像上传至ECR并部署到Lambda,期望该函数每日运行一次,但出现以下错误:该库试图写入Lambda环境的根目录,而Lambda仅允许写入/tmp目录,且我无法控制该库的写入路径,求可行解决方案。

错误日志

{
  "errorMessage": "[Errno 30] Read-only file system: 'secrets.json'",
  "errorType": "OSError",
  "requestId": "65a32608-80ea-4c68-923c-ec395a996da8",
  "stackTrace": [
    "  File \"/var/task/app.py\", line 56, in handler\n    oauth = OAuth2(\n",
    "  File \"/var/lang/lib/python3.12/site-packages/yahoo_oauth/oauth.py\", line 236, in __init__\n    super(OAuth2, self).__init__('oauth2', consumer_key, consumer_secret, **kwargs)\n",
    "  File \"/var/lang/lib/python3.12/site-packages/yahoo_oauth/oauth.py\", line 102, in __init__\n    write_data(data, vars(self).get('from_file', 'secrets.json'))\n",
  ]
}

可行解决方案

  • 指定自定义文件路径:从报错栈可以看到,库的初始化逻辑会读取from_file参数,默认值为secrets.json。初始化OAuth2时直接传入该参数,指定到Lambda允许写入的/tmp目录即可:

    oauth = OAuth2(consumer_key="你的密钥", consumer_secret="你的密钥", from_file="/tmp/secrets.json")
    
  • 使用AWS Secrets Manager存储凭证:绕过库的本地文件存储逻辑,自行处理OAuth流程,将token等凭证存储在AWS Secrets Manager中,每次函数运行时从Secrets Manager读取凭证,直接传入库(若支持)或手动构建请求。

  • Docker镜像中创建软链接:在构建Docker镜像时,将根目录的secrets.json软链接到/tmp目录,让库的写入操作实际指向允许的路径。在Dockerfile中添加以下命令:

    RUN ln -s /tmp/secrets.json /secrets.json
    
  • 修改库源码:若上述方法都不适用,可fork yahoo-oauth库的源码,将默认的secrets.json路径改为/tmp/secrets.json,再使用修改后的库构建Docker镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:07