Google Cloud Functions是否支持单个部署包中的多个功能?

时间:2017-10-23 14:21:59

标签: google-cloud-functions

此外,鉴于需要多个相关功能,部署GCF解决方案的有效方法是什么? (并且考虑到每个部署步骤相当慢 - 10秒)

这听起来像一个直截了当的问题,但我无法找到一个确切的答案。我已经在SO上阅读了一些相关的答案,但它们并不是很清楚。

此处的Google文档提到导出“一个或多个功能”:https://cloud.google.com/functions/docs/writing/

但是到了部署的时候,CLI命令显然只部署了一个函数,据我所知:gcloud beta functions deploy OneFunctionNameHere

我错过了什么? 如果我在一个index.js中有几个相关的函数,我肯定不需要几个慢gcloud beta functions deploy命令? (或者我可以这样做,以便为每个人获得独立的报告???)

我猜其中一个可能就是答案,但我真的不确定:

  1. 从本地源推送/部署一次到GCP存储桶,然后从该存储桶部署其他功能? (更快?)
  2. 扩展访问URL,如“... / MyFunction / SomeSubFunction”,并使用request.params路由到正确的响应生成代码。 (有npm包...)
  3. parallel 中运行多个部署,以便“部署时间”不是一个大问题(带宽允许......)
  4. 感谢任何有关更好解决方案的智慧。

2 个答案:

答案 0 :(得分:2)

您可以在一个部署或单个index.js文件中拥有多个 Firebase云功能

index.js

 const functions = require('firebase-functions')
 const admin = require('firebase-admin')
 admin.initializeApp(functions.config().firebase)

 exports.sendNotification = functions.https.onRequest((req, res) => {
     res.end()
 })

 exports.saveToken = functions.https.onRequest((req, res) => {
     res.end()
 })

使用POST请求调用函数

https://us-central1-projectname.cloudfunctions.net/saveToken

https://us-central1-projectname.cloudfunctions.net/sendNotification

部署运行的功能

 npm run deploy

的package.json

{
  "name": "functions",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {   
    "deploy": "firebase deploy --only functions"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "firebase-admin": "^5.2.1",
    "firebase-functions": "^0.6.3"
  }
}

在云功能控制台中,您将它们视为单独的功能。

enter image description here

答案 1 :(得分:2)

我不认为可以使用一个命令为Google云部署多个功能 - 正如各个帖子所提到的那样。为了方便起见,我最终使用了以下命令:

sed -n 's/exports\.\([a-zA-Z0-9\-_#]*\).*/\1/p' index.js | xargs -I {} gcloud beta functions deploy {} --trigger-http

使用时要小心,具体来说,确保sed -n 's/exports\.\([a-zA-Z0-9\-_#]*\).*/\1/p' index.js的输出只是您要导出的函数的名称。