S3 put()事件lambda触发器中可以有多少条记录?

roe*_*gol 17 amazon-s3 amazon-web-services aws-lambda

我需要一些lambda函数来获得这个流程:

触发S3 put文件事件 - > lambda函数 - >将行插入DynamoDB

当我从lambda屏幕使用AWS创建测试时,我得到了这个示例,Records列表中只有1条记录:

{
  "Records": [    //  <<<----------------only 1 element 
    {
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "s3": {
        "configurationId": "testConfigRule",
        "object": {
          "eTag": "0123456789abcdef0123456789abcdef",
          "sequencer": "0A1B2C3D4E5F678901",
          "key": "HappyFace.jpg",
          "size": 1024
        },
        "bucket": {
          "arn": "arn:aws:s3:::mybucket",
          "name": "roeyg-oregon-s3-bucket",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          }
        },
        "s3SchemaVersion": "1.0"
      },
      "responseElements": {
        "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
        "x-amz-request-id": "EXAMPLE123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来查看是否可以在此列表中获得包含多个元素的列表,例如使用CLI或将多个文件一起上传甚至整个文件夹,在所有这些场景中,我每个事件都有一个项目.

我的问题是要知道是否有一个场景我可以在一个事件中获得多个文件?

通过这种方式,我会改变我的代码以获得循环,而不是像AWS建议的那样引用第一个元素.

Ant*_*ace 19

根据您当前的配置,每次调用只能获得一条记录.这是因为每个不同的S3 Put Event都会以您的AWS Lambda函数作为收件人触发不同的S3事件通知.然后,Lambda 默认情况下最多可以处理100个并发执行,这个限制可以根据您的传入事件率自动提高.

AWS Lambda Records作为集合接收,因为它使用S3事件通知将事件发送到lambda,从而使用S3通知事件消息结构.在预期可能返回多个记录的事件类型时,格式作为集合存在.您可以在此处查看 S3事件通知类型的完整列表.

这不会影响来自事件的S3通知s3:ObjectCreated:Put,因此您可以按原样保留该功能,因为这是Put通知的工作方式 - one event -> one notification -> one invokation.


也就是说,如果你仍然希望你的代码能够在每次调用时处理多个记录,那么将它写入以下任何一个都没有害处:

  • 处理循环中的记录(文档中有一个示例:AWS提供循环的python示例部署代码,而不是仅抓取第一个记录).如果您采用这种方法,如果您的应用程序无法容忍它们,请考虑添加更多逻辑来过滤重复项.
  • 在> 1条记录上记录错误.

  • 2022 年链接 404:“预期可能返回多条记录的事件类型” (7认同)