为了账号安全,请及时绑定邮箱和手机立即绑定

从 PubSub 访问 AutoML 的 403 权限被拒绝

从 PubSub 访问 AutoML 的 403 权限被拒绝

慕丝7291255 2021-06-01 17:49:30
我正在尝试使用Google Cloud Platform AutoMLusing构建应用程序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_id,project 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).请帮我解决问题
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超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]

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


查看完整回答
反对 回复 2021-06-09
?
杨魅力

TA贡献1811条经验 获得超6个赞

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

  • 向 AutoML API 发送请求时使用的凭据无效 - pubsub 很可能在其他上下文中执行并且无法获取默认凭据

  • 无效的模型资源名称(确保它是正确的) - 它应该是这样的:“projects/12423534/locations/us-central1/models/23432423”


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信