我正在开发一个具有开发环境和登台环境的项目,因此每个环境都有自己的服务器,数据库,每个环境也应该有自己的Pub / Subs和Cloud Functions。
我有一个名为jsonToCsv
的云函数,它导出一个名为jsonToCsv
的函数,我想部署相同的代码,但名称不同,jsonToCsv_staging
,但是,GCloud不允许我导出名称与Cloud Function的名称不同的函数
ERROR: (gcloud.beta.functions.deploy) OperationError: code=3,
message=Function load error: Node.js module defined by file index.js is
expected to export function named jsonToCsv-staging
来自AWS背景,我认为有一种方法可以让我调用不同版本的云功能(即最新版本是开发版本,我可以使用staging
标记版本另一个production
),但我无法找到办法。
我能想到解决这个问题的一种方法是使用具有相同名称的相同函数,但使用不同的Pub / Subs或触发环境变量的触发器。如果开发人员想要部署一些开发代码而不影响升级,那将无法工作。你对此有何看法?这种情况下的最佳做法是什么?
答案 0 :(得分:6)
在Google Cloud Platform(以及Firebase)中隔离环境的推荐方法是为每个环境创建不同的项目。
GCP项目中的环境多租户是一个坏主意,因为它可以让您轻松地将生产数据和代码损坏到开发实践的日常工作中。
答案 1 :(得分:1)
通过documentation您可以看到,除非您指定--entry-point
选项,否则您的模块必须导出具有相同名称的函数。
将--entry-point
添加到命令将允许您使用具有相同导出功能的云功能的不同名称。
您的命令应如下所示:
gcloud beta functions deploy jsonToCsv_staging --entry-point jsonToCsv --trigger-resource <my-topic> --trigger-event google.pubsub.topic.publish