我有一个应用程序可以定期将照片上传到GCS存储桶。上传这些照片后,我需要添加缩略图并进行一些分析。如何为存储桶设置通知?
答案 0 :(得分:11)
执行此操作的方法是为新对象创建Cloud Pub / Sub主题,并配置GCS存储桶以在创建新对象时将消息发布到该主题。
首先,让我们创建一个水桶PHOTOBUCKET:
$ gsutil mb gs://PHOTOBUCKET
现在,请确保您activated the Cloud Pub/Sub API。
接下来,让我们创建一个Cloud Pub / Sub主题,并使用gsutil
将其连接到我们的GCS存储桶:
$ gsutil notification create \
-t uploadedphotos -f json \
-e OBJECT_FINALIZE gs://PHOTOBUCKET
-t
指定发布/订阅主题。如果该主题尚未存在,gsutil
将为您创建该主题。
-e
指定您只对OBJECT_FINALIZE消息(正在创建的对象)感兴趣。否则,您将在主题中收到各种消息。
-f
指定您希望消息的有效负载成为JSON API的对象元数据。
请注意,这需要最新版本的gsutil,因此请确保更新到最新版本的gcloud
,或者如果您使用独立的gsutil,请运行gsutil update
。
现在我们已经配置了通知和抽水,但我们希望看到它们。让我们创建一个Pub / Sub订阅:
$ gcloud beta pubsub subscriptions create processphotos --topic = uploadedphotos
现在我们只需要阅读这些消息。 Here's a Python example做到这一点。以下是相关内容:
def poll_notifications(subscription_id):
client = pubsub.Client()
subscription = pubsub.subscription.Subscription(
subscription_id, client=client)
while True:
pulled = subscription.pull(max_messages=100)
for ack_id, message in pulled:
print('Received message {0}:\n{1}'.format(
message.message_id, summarize(message)))
subscription.acknowledge([ack_id])
def summarize(message):
# [START parse_message]
data = message.data
attributes = message.attributes
event_type = attributes['eventType']
bucket_id = attributes['bucketId']
object_id = attributes['objectId']
return "A user uploaded %s, we should do something here." % object_id
以下是关于该系统如何运作的更多内容:
https://cloud.google.com/storage/docs/reporting-changes https://cloud.google.com/storage/docs/pubsub-notifications
答案 1 :(得分:1)
GCP还提供了一个名为“对象更改通知”的Pub / Sub云存储更改通知的早期版本。当该桶中的对象发生更改时,此功能将直接POST到所需的端点。 Google推荐Pub / Sub方法。
https://cloud.google.com/storage/docs/object-change-notification
答案 2 :(得分:0)
同时使用this example! 记住两件事 1)他们已经将代码升级到python 3.6 pub_v1,这可能无法在python 2.7上运行 2)在调用poll_notifications(projectid,subscriptionname)时 传递您的GCP项目ID:例如,粗体字和订阅名称,例如Asrtopic