google-cloud-platform - 是否可以在 "myBgFunctionInProjectB"中部署后台函数 "project-b"并由我的主题 "my-topic-project-a"从 "project-a"触发

标签 google-cloud-platform google-cloud-functions google-cloud-pubsub

可以在项目 “project-a” 中创建一个主题“my-topic-project-a”,这样它就可以公开可见(已完成通过将角色“pub/sub subscriber” 设置为“allUsers”)。 然后从项目 “project-b” 我可以创建对 “my-topic-project-a” 的订阅并从 “my-topic-项目-a”。这是使用以下 gcloud 命令完成的: (这些命令在项目“project-b”上执行)

gcloud pubsub subscriptions create subscription-to-my-topic-project-a --topic projects/project-a/topics/my-topic-project-a
gcloud pubsub subscriptions pull subscription-to-my-topic-project-a --auto-ack

好吧,当在“project-b”中创建链接到“project-a”中的“my-topic-project-a”的订阅时,这是可能的。

在我的用例中,我希望能够在“project-b”中部署后台函数“myBgFunctionInProjectB”,并由“project-a”中的主题“my-topic-project-a”触发

但是……这似乎是不可能的,因为当您在部署云功能时提供完整的主题名称时,gcloud CLI 不满意:

gcloud beta functions deploy myBgFunctionInProjectB --runtime nodejs8 --trigger-topic projects/project-a/topics/my-topic-project-a --trigger-event google.pubsub.topic.publish

ERROR: (gcloud.beta.functions.deploy) argument --trigger-topic: Invalid value 'projects/project-a/topics/my-topic-project-a': Topic must contain only Latin letters (lower- or upper-case), digits and the characters - + . _ ~ %. It must start with a letter and be from 3 to 255 characters long.

有没有办法实现,或者这实际上是不可能的?

谢谢

最佳答案

所以,似乎实际上不可能做到这一点。我通过两种不同的方式检查发现了它:

  • 如果您尝试通过 the API explorer 创建函数,您需要填写要运行它的位置,例如 projects/PROJECT_FOR_FUNCTION/locations/PREFERRED-LOCATION,然后提供请求正文,如下所示:

{

"eventTrigger": {

"resource": "projects/PROJECT_FOR_TOPIC/topics/YOUR_TOPIC",

"eventType": "google.pubsub.topic.publish"

},

"name": "projects/PROJECT_FOR_FUNCTION/locations/PREFERRED-LOCATION/functions/NAME_FOR_FUNTION

}

这将导致 400 错误代码,并显示一条消息:

{

"field": "event_trigger.resource",

"description": "Topic must be in the same project as function."

}

它还会说您错过了源代码,但是尽管如此,API 已经表明这是不可能的。

  • 已经有一个 open issue在同一问题的公共(public)问题跟踪器中。请记住,它没有预计到达时间。

我也尝试过从 gcloud 执行此操作,正如您所尝试的那样。我显然得到了相同的结果。然后我尝试从我的命令中删除 projects/project-a/topics/ 位,但这会在您创建函数的同一项目中创建一个新主题,因此,这不是您想要的。

关于google-cloud-platform - 是否可以在 "myBgFunctionInProjectB"中部署后台函数 "project-b"并由我的主题 "my-topic-project-a"从 "project-a"触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51963857/

相关文章:

python - Google Cloud Storage bucket list_blobs 前缀太宽泛

android - 批量更新会触发多少次 onUpdate 函数?

firebase - Firebase Cloud Functions 如何确认 Cloud pub/sub

此模型的 Firebase 替代数据库设计

google-app-engine - Google App Engine 灵活 - 路由到特定服务

node.js - 使用 Cloud Functions 从 onCreate 触发器检索 Firestore 文档

Firebase:我可以在 Firebase 云函数中 "not acknowledge"发布一条 PubSub 消息吗?

node.js - 在应用引擎上使用 node.js,使用任务队列还是发布/订阅更好

google-cloud-platform - Google PubSub-计算主题中的邮件

firebase - Cloud Firestore 和 Firebase 实时数据库有什么区别?