【问题标题】:Is there a way to execute a command in a Firebase function?有没有办法在 Firebase 函数中执行命令?
【发布时间】:2021-10-20 14:18:39
【问题描述】:

我编写了一堆部署为 Firebase 函数的代码。其中一些可以替换为对可执行 CLI 的简单调用。即cat x | xargs ... 但该函数的许多代码仍然需要存在才能处理结果。有没有办法让 Firebase 函数在 CLI 上执行某些操作,如下所示:

const { exec } = require("child_process");

exec("ls -la", (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);
        return;
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);
        return;
    }
    console.log(`stdout: ${stdout}`);
});

我的函数代码在nodejs中。

【问题讨论】:

  • 这里的措辞令人困惑:您提到,在您看来,“[The firebase function] 可以用一个简单的调用替换”,但随后立即遵循该声明“仍然需要存在很多该函数的代码来处理结果”,这在我看来是相互矛盾的。它是哪一个?无论如何,为什么这些信息与核心问题相关?
  • 您可以像通常期望的节点进程一样在 Cloud Functions 中执行命令。没有什么特别的事情发生。该命令必须存在。如果您的问题实际上是在询问为什么您的代码不起作用,那么这里没有足够的信息可以说明。我们需要一个完整的复制。
  • @esqew 谢谢!我知道我措辞不好,但我不知道在哪里。
  • @DougStevenson 问题是该命令不是本机安装的(它是一个带有 CLI 的节点应用程序)。我将如何安装它?请记住,我在这里谈论的是 Firebase 函数。
  • 您可以使用spawn 调用现有的二进制文件,例如我们在转换图像的示例中这样做:github.com/firebase/functions-samples/blob/main/convert-images/…。您可以将自定义二进制文件包含到您的 Cloud Functions 部署中。在此处查看一些示例:serverfault.com/q/993790 和此处:stackoverflow.com/a/60256010 和此处:stackoverflow.com/a/42777596

标签: node.js firebase google-cloud-functions


【解决方案1】:
  • 您可以按照通常的预期在 Cloud Functions 中执行命令 用于节点进程。
  • 虽然没有安装任何第三方库的限制 对于具有包管理器的相关编程语言(npm, pip),有时甚至这还不够。 Cloud Functions 构建在 Ubuntu 18.04 映像之上,并提供了一些有用的系统包,这是一个不常提及的功能,这是我要重点关注的主题。

注意Cloud Functions runtimes have pre-installed system packages 因为 Cloud Functions 运行时基于 Ubuntu 18.04 映像,所以就像在您的函数下方有一个 Ubuntu 沙箱。所有运行时都包含相同的系统包。但是,您可以请求将包添加到运行时。在请求包之前,请在issue tracker 中检查该包的现有请求。如果没有现有请求,请在 new issue 中说明您的用例。这将作为功能请求添加。

这里有一个小建议:您应该真正考虑将 Cloud Run 用于此用例。 Cloud Run 让您可以灵活地创建自己的容器映像,其中可以包含所需的二进制文件和库。 您可以在 Cloud Run here 上找到捆绑自定义二进制文件的教程@

【讨论】:

  • 感谢您的回答。 “所有运行时都包含相同的系统包。但是,您可以请求将包添加到运行时。”你是怎么做到的?
  • “您真的应该考虑将 Cloud Run 用于此用例。”为什么这是一个更好的用例?如您所知,我正在下载和转换视频,类似于第三个要点。
  • Google Cloud 提供 Cloud Run,它是一个无服务器容器平台,允许在 Docker 容器中安装任何包/库/程序,它更适合您想要运行自己的自定义软件,但 Cloud Functions 感觉更轻巧。我希望this 回答为什么 Cloud Run 是更好的选择,this 解释如何将 Cloud Run 用作图像文件转换器。
猜你喜欢
  • 2022-10-21
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多