403拒绝从PubSub访问AutoML的权限

问题描述 投票:2回答:2

我正在尝试使用Google Cloud Platform AutoML使用Python构建一个应用程序。我的整体代码流如下所示:

用户交互 - >发送到PubSub的数据 - >回调调用我的AutoML - >结果

调用pubsub的片段如下所示:

blob=blob+bytes(doc_type,'utf-8')
        publisher.publish(topic,blob)
        future=subscriber.subscribe(subscription,callback=callback)
        #flash("The object is "+future,'info')
        try:
            future.result()
        except Exception as ex:
            subscriber.close()

PubSub回调:

def callback(message):
     new_message=message.data
     display_name,score=predict_value(new_message,"modelID","projectid",'us-central1')
     message.ack()

而我的predict_value得到model_idproject id和计算region并执行预测。

当我直接调用predict_value而不使用PubSub它工作正常。如果我喜欢这个,我收到以下错误:

google.api_core.exceptions.PermissionDenied: 403 Permission 'automl.models.predict' denied on resource 'projects/projectID/locations/us-central1/models/' (or it may not exist).

请帮我解决这个问题

python google-cloud-platform publish-subscribe google-cloud-pubsub google-cloud-automl
2个回答
2
投票

非常感谢您的所有回复。我刚刚使用下面的代码段示例解决了这个问题

def receive_messages_synchronously(project, subscription_name):
"""Pulling messages synchronously."""
# [START pubsub_subscriber_sync_pull]
# project           = "Your Google Cloud Project ID"
# subscription_name = "Your Pubsub subscription name"
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
    project, subscription_name)

# Builds a pull request with a specific number of messages to return.
# `return_immediately` is set to False so that the system waits (for a
# bounded amount of time) until at lease one message is available.
response = subscriber.pull(
    subscription_path,
    max_messages=3,
    return_immediately=False)

ack_ids = []
for received_message in response.received_messages:
    print("Received: {}".format(received_message.message.data))
    ack_ids.append(received_message.ack_id)

# Acknowledges the received messages so they will not be sent again.
subscriber.acknowledge(subscription_path, ack_ids)
# [END pubsub_subscriber_sync_pull]

创建订阅的原因是使用pull请求。我想使用的回调方法概念主要是“推”,这可能是因为我没有给端点和令牌发布消息。希望我猜的是正确的。让我也知道你的看法。


0
投票

这可能是由于以下两个因素之一:

  • 将请求发送到AutoML API时使用的凭据无效 - 很可能pubsub在其他上下文中执行而无法获取默认凭据
  • 无效的模型资源名称(确保它是正确的) - 它应该类似于:“projects / 12423534 / locations / us-central1 / models / 23432423”
© www.soinside.com 2019 - 2024. All rights reserved.