【问题标题】:How to set AWS S3 credentials in a Google Firebase cloud function?如何在 Google Firebase 云功能中设置 AWS S3 凭证?
【发布时间】:2020-04-08 05:47:26
【问题描述】:

我希望我的 Firebase 云功能能够访问 AWS S3。为此,在我的 index.js 文件中,我试图告诉 AWS 查看 awscred.json 文件以获取连接凭据,如下所示:

// Load the SDK for JavaScript
var AWS = require('aws-sdk');
// Set the Region
AWS.config.loadFromPath('./awscred.json');

当我在本地测试它时效果很好,但是当我尝试部署到云端时,我得到了这个错误:

错误:ENOENT:没有这样的文件或目录,打开 './awscred.json'

如何将文件“awscred.json”添加到云功能包中?我需要在 package.json 文件中添加一些内容吗?

【问题讨论】:

    标签: google-cloud-functions


    【解决方案1】:

    您可以从终端将凭据设置为环境变量:

    firebase functions:config:set aws.aws_access_key_id="XXXXX" aws.secret_access_key="YYYYY"
    

    然后,像这样在你的函数中读取它们:

    const functions = require("firebase-functions")
    const AWS = require('aws-sdk')
    
    const { aws: { secret_access_key, aws_access_key_id } } = functions.config()
    
    AWS.config.update({
        region: 'us-east-1',
        accessKeyId: aws_access_key_id,
        secretAccessKey: secret_access_key
    })
    

    如果你愿意,你可以看到当前的环境变量:

    firebase functions:config:get
    

    Firebase 不允许大写命名的环境变量,所以我不得不使用上面的策略。

    【讨论】:

      【解决方案2】:

      事实证明,在部署过程中(即从本地计算机到 Google 的服务器),index.js 文件在我的本地计算机上运行。生成错误是因为我正在运行“firebase deploy”命令的目录中没有“awscred.json”文件,因此解决方案是在我的函数目录中执行该命令。

      【讨论】:

      • 我目前正在尝试设置它。您是否将凭据以纯文本形式存储在 awscred.json 文件中?这安全吗?
      【解决方案3】:

      只需将 awscred.json 文件与源代码一起放在您的函数源代码部署文件夹中即可。它将与所有其他源代码一起部署,以便在 Cloud Functions 中运行时可以使用它。如果你想从相对路径“./awecred.json”加载它,那么它应该存在于源文件旁边。

      【讨论】:

      • 感谢您的回答 - 我原以为只会部署 .js 文件,但您的回答帮助我了解也可以部署 .json 文件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2018-06-30
      • 2021-09-16
      相关资源
      最近更新 更多