是否可以在 "project-b" 中部署后台函数 "myBgFunctionInProjectB" 并由我的主题 "my-topic-project-a" 从 "project-a" 触发
Is it possible to deploy a background Function "myBgFunctionInProjectB" in "project-b" and triggered by my topic "my-topic-project-a" from "project-a"
可以在项目 "project-a" 中创建主题 "my-topic-project-a" 以便公开可见(这是通过将角色 "pub/sub subscriber" 设置为 "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-b" 中创建链接到 "project-a" 中的 "my-topic-project-a" 的订阅时,这是可能的。
在我的用例中,我希望能够在 "project-b" 中部署后台函数 "myBgFunctionInProjectB" 并由我的主题 "my-topic-project-a" 从 [=45] 触发=]
但是...这似乎是不可能的,因为当您在部署云功能时提供完整的主题名称时,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 已经表明这是不可能的。
- Public 问题跟踪器中已经有一个关于这个问题的 open issue。请记住,它没有预计到达时间。
我也试过从 gcloud
这样做,就像你试过的那样。我显然得到了相同的结果。然后我尝试从我的命令中删除 projects/project-a/topics/
位,但这会在您创建该函数的同一项目中创建一个新主题,因此,这不是您想要的。
可以在项目 "project-a" 中创建主题 "my-topic-project-a" 以便公开可见(这是通过将角色 "pub/sub subscriber" 设置为 "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-b" 中创建链接到 "project-a" 中的 "my-topic-project-a" 的订阅时,这是可能的。
在我的用例中,我希望能够在 "project-b" 中部署后台函数 "myBgFunctionInProjectB" 并由我的主题 "my-topic-project-a" 从 [=45] 触发=]
但是...这似乎是不可能的,因为当您在部署云功能时提供完整的主题名称时,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 已经表明这是不可能的。
- Public 问题跟踪器中已经有一个关于这个问题的 open issue。请记住,它没有预计到达时间。
我也试过从 gcloud
这样做,就像你试过的那样。我显然得到了相同的结果。然后我尝试从我的命令中删除 projects/project-a/topics/
位,但这会在您创建该函数的同一项目中创建一个新主题,因此,这不是您想要的。