pub_sub Google 示例代码错误中的操作,缺少 1 个必需的位置参数:'callback'



我正在一个大查询表上设置谷歌DLP扫描,以查找可识别的个人信息。我一直在研究谷歌样本代码,但在代码的pub/sub元素方面遇到了问题

这是针对一个调用googledlp的python谷歌云函数,使用这里的谷歌示例,使用方法inspect_bigquery。

actions = [{
'pub_sub': {'topic': '{}/topics/{}'.format(parent, topic_id)},
'save_findings': {
'output_config': {
'table': {
'project_id': project,
'dataset_id': dataset_id,
'table_id': table_id + '_inspection_results',
}
}
},
}]

subscriber = google.cloud.pubsub.SubscriberClient()
subscription_path = subscriber.subscription_path(
project, subscription_id)
#    subscription = subscriber.subscribe(subscription_path, callback)
subscription = subscriber.subscribe(subscription_path)

def callback(message):
try:
if (message.attributes['DlpJobName'] == operation.name):
# This is the message we're looking for, so acknowledge it.
message.ack()
# Now that the job is done, fetch the results and print them.
job = dlp.get_dlp_job(operation.name)
if job.inspect_details.result.info_type_stats:
for finding in job.inspect_details.result.info_type_stats:
print('Info type: {}; Count: {}'.format(
finding.info_type.name, finding.count))
else:
print('No findings.')
# Signal to the main thread that we can exit.
job_done.set()
else:
# This is not the message we're looking for.
message.drop()
except Exception as e:
# Because this is executing in a thread, an exception won't be
# noted unless we print it manually.
print(e)
raise
# Register the callback and wait on the event.
subscription.open(callback)
finished = job_done.wait(timeout=timeout)
if not finished:
print('No event received before the timeout. Please verify that the '
'subscription provided is subscribed to the topic provided.')

我遇到了两个错误,当我只保留订阅路径的订阅方法时,它会出现TypeError:subscribe()缺少1个必需的位置参数:"callback"的错误。

当我将回调放入subscribe方法时,它会失败函数执行耗时60002毫秒,已完成,状态为"超时"超时前未收到任何事件。请验证所提供的订阅是否订阅了所提供的主题。

但是,保存结果操作确实有效,几秒钟后我就可以在bigquery中看到结果了。

感谢

两件事:1.正如你所知,如果你不想参与生成它们的业务,你可以将table_id留空。

但对于你的实际问题:

  1. 您是否偶然在云函数中运行此功能,因为它有执行截止日期?(https://cloud.google.com/functions/docs/concepts/exec#timeout)

如果是,您实际上希望让云函数通过触发器订阅pub/sub(https://cloud.google.com/functions/docs/calling/pubsub),而不是在代码中以避免超时。这里有一个特定的DLP解决方案指南https://cloud.google.com/solutions/automating-classification-of-data-uploaded-to-cloud-storage#create_pubsub_topic_and_subscription

有帮助吗?

相关内容

  • 没有找到相关文章

最新更新