【问题标题】:AWS lambda event parameters: When does Records hold multiple items in it?AWS lambda 事件参数:Records 何时在其中保存多个项目?
【发布时间】:2019-12-27 07:42:23
【问题描述】:

我有这样的基础设施:S3 -> SQS -> Lambda。当文件被拖放到 S3 时,它会将事件放入 SQS 队列,然后由 lambda 函数使用。

Lambda 是用 .net 核心编写的。在 lambda handlers 参数中,我收到一个 SQSEvent 并在其主体内收到一个序列化为 Json 的 S3Event

类结构大致如下。它们直接来自 AWS .net SDK。

class SQSEvent
{
    public List<SQSMessage> Records;
    ...
}

class SQSMessage
{
    public string Body; // json serialized S3Event is put into here
    ...
}

class S3Event
{
    public List<S3EventNotification> Records;
    ...
}

我很好奇的是,SQSEventS3Event 都有一个记录列表。在我的实验中,我总是在这些列表中收到一个项目。是否知道在哪些情况下这些Records 列表将包含多个项目?我找不到说明此行为的文档。

【问题讨论】:

  • 我自己也经常这样想。我总是用它来处理多条记录,但我只看到过一条记录。

标签: amazon-web-services amazon-s3 aws-lambda amazon-sqs aws-sdk-net


【解决方案1】:

如果在很短的时间内生成了许多记录,例如,如果同时上传了许多 S3 文件,那么亚马逊可能会在单个事件中发送记录列表。

【讨论】:

  • 我认为这不是真的。这只是许多不同服务使用的通用格式。来自 CloudFront 的 Lambda@Edge 触发事件使用 the exact same outer structure,除了event.Records 的 1 个成员之外,永远不会呈现任何内容。
  • @Michael-sqlbot SQS 集成绝对是正确的,它是问题中列出的事件类型之一。您肯定会从 SQS 获得多条记录,除非您明确将其配置为一次仅向 Lambda 发送一条消息。我相信亚马逊以这样一种方式构建所有这些数据结构,以便他们可以将消息排队,以防发生一段时间内他们无法调用 Lambda 函数的情况,之后他们可能会在单个事件中发送多个消息为了快速清理队列。
  • 在 SQS 上确实如此 >> Lambda 集成,但对于 S3 事件......这是我怀疑几年前让我得出结论的原因:“目前,所有 S3 事件通知都有一个每个通知消息的事件。我们可能会在将来添加新的事件类型时包含多个记录。这也是在其他 AWS 服务之间共享的消息格式,其他服务可以包含多个记录。" forums.aws.amazon.com/thread.jspa?messageID=592080&#592080
  • @Michael-sqlbot 这就是我正在寻找的答案。谢谢你。老实说,我的应用程序更关心 s3event 而不是 sqsevent,所以你的发现对我非常有用。您可能想整理一个答案,以便我接受。
猜你喜欢
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多