可以在项目 “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/