Cloud Pub / Sub:即使在注册域之后,也不会注册HTTP URL

时间:2018-07-19 02:32:01

标签: google-cloud-pubsub

我有一个Google Pub / Sub项目,并创建了一个主题和一个简单的订阅。

但是,当指定用于推送的URL时,我不断收到以下错误。我已经完成了网站验证过程,并按照https://cloud.google.com/pubsub/docs/push#other-endpoints中的说明在API和服务中注册了该域:

ERROR: Failed to create subscription [projects/<project-id>/subscriptions/my-sub-2]: The supplied HTTP URL is not registered in the subscription's parent project (url="https://us-central1-<project-id>.cloudfunctions.net/xxxx", project_id="<project id number>").
ERROR: (gcloud.pubsub.subscriptions.create) Failed to create the following: [my-sub-2].

请帮忙!

3 个答案:

答案 0 :(得分:1)

可以通过设置--trigger-topic命令行参数来将Cloud函数设置为明确订阅here中所述的Cloud Pub / Sub主题,而无需显式域验证。

答案 1 :(得分:0)

我遇到了这个确切的问题,但是使用了应用引擎。遵循此guide之后,创建订阅时遇到了相同的错误:

gcloud pubsub subscriptions create <subscription_name> \
                --topic <topic_name> \
                --push-endpoint \
                    https://<PROJECT_ID>.appspot.com/_ah/push-handlers/receive_messages/token=<TOKEN> \
                --ack-deadline 30

经过实验并阅读了上面列出的一些注释(来自Iñigo的this one尤其有用),我意识到这并不是我的URL错误,但是我没有包含各种订阅中的项目参数。

此版本对我有用:

gcloud pubsub subscriptions create projects/<PROJECT_ID>/subscriptions/<subscription_name> \
            --topic projects/<PROJECT_ID>/topics/<topic_name> \
            --push-endpoint \
                https://<PROJECT_ID>.appspot.com/_ah/push-handlers/receive_messages/token=<TOKEN> \
            --ack-deadline 30

答案 2 :(得分:0)

我无数次地谈到了这个问题,确实很烦人。这全部与注册http端点的所有权有关。 Google可以通过这种方式验证您是所提供端点的所有者。您可以在域所有权验证下的here中找到有关如何注册端点的信息。我将此包含在我的函数中,以便Google可以验证注册:

if request.method == 'GET':
    return '''
        <html>
            <head>
                <meta name="google-site-verification" content="{token}" />
            </head>
            <body>
            </body>
        </html>
    '''.format(token=config.SITE_VERIFICATION_CODE)