为 Google Cloud Functions 创建开发和暂存环境

Creating a development and staging environments for Google Cloud Functions

我正在做一个有开发环境和暂存环境的项目,因此每个环境都有自己的服务器、数据库,每个环境也应该有自己的 Pub/Subs 和 Cloud Functions。

我有一个名为 jsonToCsv 的云函数,它导出一个具有相同名称 jsonToCsv 的函数,我想部署相同的代码但使用不同的名称,即 jsonToCsv_staging,但是,GCloud 不允许我导出名称不同于云函数

的函数
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 背景,我认为我可以调用不同版本的 Cloud Function(即最新的是开发版本,我可以用 staging 标记一个版本另一个 production) 但我找不到办法做到这一点。

我能想到的解决此问题的一种方法是使用具有相同名称但不同 Pub/Subs 的相同函数或将传递环境变量的触发器。如果开发人员想在不影响暂存的情况下部署一些开发代码,那将行不通。你对此有何看法?这种情况下的最佳做法是什么?

在 Google Cloud Platform(以及 Firebase)中隔离环境的推荐方法是为每个环境创建不同的项目。

GCP 项目中的环境 multi-tenancy 是个坏主意,因为它使您的生产数据和代码相对容易损坏到开发实践的日常工作中。

通过documentation可以看出,除非指定--entry-point选项,否则您的模块必须导出同名函数。

在命令中添加 --entry-point 将允许您为具有相同导出功能的 Cloud Functions 使用不同的名称。

您的命令应如下所示:

gcloud beta functions deploy jsonToCsv_staging --entry-point jsonToCsv --trigger-resource <my-topic> --trigger-event google.pubsub.topic.publish