首页 > 解决方案 > 是否可以在“project-b”中部署后台功能“myBgFunctionInProjectB”并由“project-a”中的我的主题“my-topic-project-a”触发

问题描述

可以在项目“project-a”中创建一个主题“my-topic-project-a” ,这样它就可以公开可见(这是通过将角色“pub/ subsubscriber”设置为“allUsers”来完成的) . 然后从项目"project-b"我可以创建对"my-topic-project-a"的订阅并从" my-topic-project-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-a”中链接到“my-topic-project-a”的“project-b”中创建订阅时,这是可能的。

在我的用例中,我希望能够在“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.

有没有办法做到这一点,或者这实际上是不可能的?

谢谢

标签: google-cloud-platformgoogle-cloud-functionsgoogle-cloud-pubsub

解决方案


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

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

{

“事件触发器”:{

“资源”:“项目/PROJECT_FOR_TOPIC/topics/YOUR_TOPIC”,

“eventType”:“google.pubsub.topic.publish”

},

“名称”:“项目/PROJECT_FOR_FUNCTION/locations/PREFERRED-LOCATION/functions/NAME_FOR_FUNTION

}

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

{

"field": "event_trigger.resource",

"description": "主题必须和函数在同一个项目中。"

}

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

  • 在 Public Issue Tracker 中已经有一个针对同一问题的未解决问题。请记住,它没有预计到达时间。

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


推荐阅读