【问题标题】:How to pass certificate key file when deploying cloud function?部署云功能时如何传递证书密钥文件?
【发布时间】:2020-03-28 18:02:56
【问题描述】:

在我的 TypeScript 文件中,我有以下内容:

import * as admin from 'firebase-admin'
import * as functions from 'firebase-functions'
const serviceAccountKey = "serviceAccountKey.json"
const databaseURL = "https://blahblah.firebaseio.com"

admin.initializeApp({
    credential: admin.credential.cert(serviceAccountKey),
    databaseURL: databaseURL
});

我的函数在模拟器中运行良好(只有成功传递 json 密钥才会发生这种情况)但是当我尝试部署它们时,我收到以下错误:

Error: Error occurred while parsing your function triggers.
Error: Failed to parse certificate key file: Error: ENOENT: no such file or directory, open 'serviceAccountKey.json'

我尝试将 json 文件移动到根文件夹、lib 文件夹(index.js 文件所在的位置)、functions 文件夹,但没有任何运气。部署时如何传递密钥?

【问题讨论】:

  • 你的包目录结构是什么样的?这可能有助于stackoverflow.com/questions/43117124/…
  • @Kolban 检查编辑文件夹结构
  • 你提出了一个很好的问题......让我想知道从文件系统的角度来看,云函数的运行环境是什么样的。我做了一些测试并得到了一些结果。我的建议是查看以下内容...stackoverflow.com/questions/59167743/… 并将其作为测试。
  • @Kolban 你帮了很多忙!谢谢!
  • 你找到答案了吗?它以前如何?也许发布您自己问题的答案?

标签: typescript firebase google-cloud-functions


【解决方案1】:

当您使用 Firebase CLI 将内容部署到 Cloud Functions 时,它将上传您的函数文件夹的全部内容(node_modules 除外,它将使用您的 package.json 的内容进行重建)。该文件夹将成为您部署的根目录。当您的函数执行时,它会准备好所有这些文件以供使用,但您必须使用相对路径正确引用它们。

使用它作为透视图,我可以看到您的 serviceAccount.json 和编译后的 index.js 都在一个名为“lib”的文件夹中。如果您希望 index.js 中的代码能够从同一文件夹中的其他文件中加载 JSON,您需要做的是使用相对路径引用它,如下所示:

const serviceAccountKey = "./serviceAccountKey.json"

注意路径开头的“./”。这告诉节点您要引用与当前源文件位于同一文件夹中的文件。

我将提出一项建议:对于 TypeScript 项目,lib 通常保留用于已编译的代码。我会避免将您的服务帐户文件放在那里,因为可以在干净构建期间删除该文件夹。最好将其放在部署的根目录中,并将其称为“../serviceAccount.json”,这是我的惯用做法。

【讨论】:

  • Howdy Doug ... const serviceAccountKey = "serviceAccountKey.json" 和 const serviceAccountKey = "./serviceAccountKey.json" 之间是否存在语义差异
  • @Kolban 需要具体告知 Admin SDK 文件所在的位置。
  • @DougStevenson 我要补充一点,如果您使用打字稿编写云函数,并且使用相对路径,则必须将 .json 文件夹放在 index.js 所在的 lib 文件夹中文件所在的位置,而不是 index.ts 所在的 src 文件中。
  • @HudsonKim 或者,您可以按照我在这里的建议将其放在函数文件夹中,既不在 src 也不在 lib 中,并将其称为“../file.json”。这样,包含文件放在哪里都没有关系,而且你不必将非编译文件的文件放在lib中。
猜你喜欢
  • 1970-01-01
  • 2019-06-26
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多