【问题标题】:Passing payload through AWS S3/Lambda Trigger通过 AWS S3/Lambda 触发器传递有效负载
【发布时间】:2018-03-08 02:24:45
【问题描述】:

我是 AWS 平台的新手。我已经通过 AWS CLI 调用了一个 lambda 函数。

aws lambda invoke --function-name CFT ... --payload file://${DATA_TMP}/affl_ftp_config.json ${DATA_LOG}/outfile.txt

这里,Payload 是一个 json 文件

{
  "s3_bucket": "fanatics.dev.internal.confidential",
  ....
  "date": "20160813"
}

这个 json 文件在我的 lambda 处理程序中被用作事件对象的一部分。

是否可以在上传 S3 文件并自动触发 Lambda 函数时配置此行为?

例如,

我在 S3_bucket 中上传了一个文件,该文件将使用上面显示的 json 有效负载触发一个 lambda 函数。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda


    【解决方案1】:

    不,你不能。

    由 S3 上传触发的 Lambda 函数提供有关新对象的信息(区域、存储桶、密钥、版本 ID,如果存储桶是版本化的),但不提供对象负载。

    请参阅记录在案的 S3 Event Message Structure。这就是 S3 调用的 Lambda 函数将收到的内容。

    因此,S3 事件调用的 Lambda 函数必须从 S3 获取对象才能访问有效负载。

    因此,要么您现有的 lambda 函数需要修改,要么您需要一个新的 lambda 函数来响应事件、获取负载,然后调用原始函数。

    另请注意,如果这些事件是由覆盖现有对象触发的,那么您需要在存储桶上启用版本控制,并且您需要使用 GetObjectVersion 来获取事件中具有显式 versionId 的负载,因为 GetObject(没有指定版本)可能会在覆盖时返回陈旧数据。

    【讨论】:

      【解决方案2】:

      是的,你可以。 S3 是 Lambda 触发器之一。请阅读更多详情here

      【讨论】:

      • 次要评论:触发 Lambda 函数的事件将包含对触发事件的 S3 对象的引用,而不是包含 S3 对象的主体作为有效负载,但检索对象的内容(参见stackoverflow.com/questions/30651502/…)。
      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2019-02-26
      • 2022-06-16
      • 2021-07-17
      • 2019-12-22
      • 1970-01-01
      • 2020-02-09
      相关资源
      最近更新 更多