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

在AWS Lambda中用Node.js访问Google Sheets时凭证文件找不到问题

AWS Lambda访问Google Sheet找不到凭证文件的解决办法

核心问题

你遇到的问题本质是部署Lambda时,google-credentials.json没被正确打包到部署包里,导致Lambda执行环境的/var/task目录下没有这个文件——本地测试时相对路径能找到是因为文件就在你的本地项目根目录,但Lambda的工作目录就是/var/task,如果文件没打包进去,自然会报找不到的错误。

解决步骤

1. 确保凭证文件被包含在部署包中

不同部署方式的检查点:

  • 手动打包(zip压缩):进入项目根目录,把所有文件(包括google-credentials.json、代码文件、依赖包)一起压缩成zip,不要把整个项目文件夹打包。比如项目结构是project/下有index.js、google-credentials.json,就进project目录,选中所有内容压缩,这样解压后/var/task下会直接出现google-credentials.json。
  • 用SAM/Serverless Framework:检查配置文件(template.yaml或serverless.yml),确认CodeUri指向的目录包含该文件,且没有在Exclude列表里把它排除。

2. 验证路径正确性

你用的./google-credentials.json相对路径本身没问题,但可以试试直接写绝对路径/var/task/google-credentials.json测试,不过只要文件打包正确,相对路径就能正常识别。

3. 文件权限排查

一般不需要额外配置权限,Lambda解压后的文件默认是可读的。如果确实遇到权限问题,打包前给文件加可读权限:

  • Linux/macOS:执行chmod 644 google-credentials.json
  • Windows:右键文件→属性→确保“读取”权限已开启

4. 更安全的替代方案(推荐)

不把凭证文件打包到部署包,而是把凭证内容存到AWS Secrets Manager或Parameter Store,代码直接从这些服务读取,避免凭证泄露:
以Python为例,代码示例:

import boto3
import json
from google.oauth2 import service_account

def lambda_handler(event, context):
    # 从Secrets Manager读取凭证
    secrets_manager = boto3.client('secretsmanager')
    secret_response = secrets_manager.get_secret_value(SecretId='你的Google凭证Secret名称')
    google_creds = json.loads(secret_response['SecretString'])
    
    # 用凭证初始化Google客户端
    credentials = service_account.Credentials.from_service_account_info(google_creds)
    # 后续Google Sheet操作...

注意要给Lambda角色添加访问Secrets Manager的权限(比如secretsmanager:GetSecretValue)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:40:00