【问题标题】:Sending message to HTTP Google Cloud Function向 HTTP Google Cloud 函数发送消息
【发布时间】:2021-10-14 06:52:19
【问题描述】:

我想将message 发送到HTTP triggered Google Cloud Function。具体来说,我想在文件版本发生变化时告诉函数,以便函数将新版本的文件加载到内存中。

我考虑过更新environment variable 作为发送该消息的一种方式,但运行update-env-vars 并不是那么简单,因为这需要在函数项目的上下文中完成。

我还想过使用database,这对于单个变量来说听起来太多了,而在当前版本的存储中使用简单的text file,这听起来太少了。还有什么想法吗?

【问题讨论】:

  • 你能再描述一下吗?您想向云功能“发送”什么消息? “收到”该消息后,云功能应该做什么?
  • 所以想法是有一个文件的版本,如果该版本发生变化,我需要再次加载文件。所以我需要将新版本传达给云功能,消息是文件的版本。另一种选择是数据库,但认为它只对一个变量来说是一种矫枉过正。
  • @al-dann 检查以上
  • 这些文件是否在 Cloud Storage 中?
  • @FrancoPiccolo 你在实现什么样的功能?看起来如果您尝试在其中保留一些状态,这与函数概念的“精神”背道而驰。例如,为什么不创建一个基于http 的函数,并将所有必要的信息作为调用参数传递?

标签: google-cloud-platform google-cloud-functions


【解决方案1】:

根据 cmets 部分的对话,我认为实现您所寻找的最佳方法是触发 PubSub 的 gcs 通知。

gsutil notification create -t TOPIC_NAME -f json gs://BUCKET_NAME

PubSub 将根据事件类型收到通知,我相信这将取决于您认为文件的新版本(元数据更改?将创建新 blob?)

基本上,您可以在上面的命令中传递 -e 标志来指示事件类型:

OBJECT_FINALIZE 当一个新对象(或一个新生成的 现有对象)在存储桶中成功创建。这包括 复制或重写现有对象。上传失败不会 触发此事件。

OBJECT_METADATA_UPDATE 当已有对象的元数据时发送 变化。

这意味着,GCS 中的任何文件上传或元数据更改都会触发 PubSub,从而触发您的 Cloud Function。从 PubSub 中提取消息的函数示例

def hello_pubsub(event, context):
    
    import base64

    print("""This Function was triggered by messageId {} published at {} to {}
    """.format(context.event_id, context.timestamp, context.resource["name"]))

    if 'data' in event:
        name = base64.b64decode(event['data']).decode('utf-8')
    else:
        name = 'World'
    print('Hello {}!'.format(name))

参考文件:

https://cloud.google.com/storage/docs/pubsub-notifications https://cloud.google.com/functions/docs/calling/pubsub#functions_calling_pubsub-python

【讨论】:

  • Hey CaioT 感谢您的详细回答,但我的用例不是触发函数,而是更改 jccampanero 在评论中提到的函数的“状态”。
  • 刚刚编辑了导致混淆的问题措辞抱歉。
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多