【问题标题】:How to run C++ files on the Google Cloud Functions?如何在 Google Cloud Functions 上运行 C++ 文件?
【发布时间】:2023-03-28 22:18:01
【问题描述】:

据我所知,Google Cloud Functions 仅允许您部署 NodeJ 或 Python 脚本。

问题:如何在 Google Cloud Functions 上部署一个简单的 Hello_World.cpp?例如,编写一个 hello world HTTP 函数。

有哪些替代方法可以做到这一点?我想使用无服务器方法,因为它是最便宜的方法。因此,这就是我使用 Google Cloud Functions 的原因。我是否必须使用 docker 才能运行 C++ 文件?我已经在这方面停留了一段时间,如果有任何指导或帮助,我们将不胜感激。

【问题讨论】:

标签: c++ google-cloud-platform google-cloud-functions gcloud


【解决方案1】:

您可以使用 emscripten 将 C++ 函数编译成 WebAssembly 模块。然后你可以从一个小的 nodejs 胶水代码中调用它。

我在这里为您构建了一个示例: https://github.com/ArthurSonzogni/gcloud-cpp-starter

【讨论】:

    【解决方案2】:

    您可以通过 node.js 在谷歌云函数上运行 C++ 代码(使用 node.js 10 测试)

    1. 如何使用 C++ 和 N-API (node-addon-api) https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f

    2. 使用https://console.cloud.google.com/functions并点击CREATE FUNCTION上传.zip或gcloud函数deploy --runtime nodejs10 --trigger-http

    诀窍是当您压缩文件时,您需要删除 /build 和 /node_modules 文件夹,然后使用命令行通过 cd 到 index.js 文件夹和 'zip your_name.zip -r *'

    ps。当我使用 firebase deploy --only 函数时,它会出错,因为它不知道文件 addon.node 格式(实际上它不应该读取这个文件,因为它需要重新编译)但我认为如果我们使用 gcloud functions 命令行将 .gcloudignore 用于 /build 和 /node_modules 它将成功https://cloud.google.com/functions/docs/deploying/filesystem

    它是如何工作的

    我认为当您将 node.js 源代码部署到云函数时,它将运行 npm install 并且您的 C++ 代码也将被编译(例如 npm run build 将在 npm install 后自动运行)

    【讨论】:

    • 这是最好的答案。它使用 gyp 和 n-api 作为节点构建过程的一部分。适用于 GCF 中的 C/C++。
    【解决方案3】:

    您不能在 Cloud Functions 上使用 C++,期间。您只能使用 Node.js 6.14、Node.js 8.11.1(测试版)和 Python 3.7(也是测试版)。

    如果您希望通过无服务器方法在 GCP 中使用 C++,我最好的建议是在 App Engine 中运行您自己的 Custom Runtime。您仍然需要配置一些实例选项,但您不必管理服务器等。

    【讨论】:

    • 嗨@mangu。因此,您为自定义运行时链接的本教程,这将允许我在 GCP 中作为无服务器方法运行 c++。谢谢。任何进一步的提示或指示?
    • 抱歉@tnet 我对 C++ 没有那么丰富的经验,所以,我不知道您是否会遇到任何警告或问题。我已经将 CR 与其他语言一起使用。我建议您在 Dockerfile 中使用 Docker 映像,其中包含您需要的所有库或几乎所有库,以使这部分更容易。例如,a gcc image
    • 也许我们可以使用 Google Cloud Run,它是 K8 和 Docker 之间的中间点。我知道它在内部由 K8 支持,但谷歌会为你管理
    【解决方案4】:

    您只能使用 App Engine 灵活环境(当然,也可以使用标准 VM 架构、Compute Engine)。摘自文档 (https://cloud.google.com/appengine/docs/flexible/):

    Runtimes - The flexible environment includes native support for Java 8 
    (with no web-serving framework), Eclipse Jetty 9, Python 2.7 and Python 3.6,
     Node.js, Ruby, PHP, .NET core, and Go. Developers can customize these 
    runtimes or provide their own runtime by supplying a custom Docker image 
    or Dockerfile from the open source community.
    

    有趣的是,Google Serverless Containers 将让您有机会部署您的 dockerized 应用程序,但采用无服务器风格(实际上它是基于 Google Cloud Functions 技术构建的)。目前处于 Alpha 阶段。

    【讨论】:

    • 嗨,关于 alpha 阶段。你有这方面的信息吗?我想使用 alpha 阶段,无服务器风格。所以我想实现并运行一个包含我的静态二进制文件(c++)的docker容器,例如hello world。
    • 您可以在这里注册抢先体验:services.google.com/fb/forms/serverlesscontainers
    • 谢谢,我申请了,所以我们看看需要多长时间。关于你之前所说的,只能在我已经尝试过的AppP Engine/VM中完成。这里唯一的问题是,这意味着我必须管理服务器以及成本。我只想实现谷歌功能。如果你知道任何相关的事情,请告诉我。谢谢。
    • 据我所知,无服务器容器将是最佳选择。
    • 我已经注册了,但在此期间,我能做些什么吗?既然无服务器容器是要走的路,难道我不必等待谷歌允许我访问它吗?我注册了它,但还没有收到任何电子邮件。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多