S3 Lambda触发器不会为每个文件上传触发

Joh*_*all 5 django file-upload amazon-s3 amazon-web-services aws-lambda

在 Python Django 中,我保存了多个视频文件。

保存1:

  • 长视频
  • 短视频

保存2:

  • 长视频
  • 短视频

保存3:

  • 长视频
  • 短视频

我有一个 lambda 触发器,它使用媒体转换器向这些视频添加 HLS 格式并生成缩略图。这 3 次保存是在非常短的时间内完成的,因为它们是社交媒体帖子对象的资产。

出于某种原因,S3 仅针对某些文件触发。

保存 1 会触发 S3 Lambda,但不会触发保存 2。保存 3 也会触发 S3 Lambda。

我的假设是 S3 触发器在识别新文件上传之间有某种停机时间(在这种情况下,我认为这些文件上传之间的时间段几乎是即时的)。

这个假设是否正确,我该如何规避它?

Joh*_*ein 4

它应该对所有对象触发。

当 Amazon S3 触发 AWS Lambda 函数时,有关引发触发的对象的信息将在字段中传递events

{
  "Records": [
    {
      "eventSource": "aws:s3",
      "awsRegion": "us-west-2",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "eventName": "ObjectCreated:Put",
      "s3": {
        "bucket": {
          "name": "my-s3-bucket",
          "arn": "arn:aws:s3:::example-bucket"
        },
        "object": {
          "key": "HappyFace.jpg",
          "size": 1024,
          ...
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个数组,因此可以将多个对象传递给一个 Lambda 函数。我从来没有明确地看到过这种情况发生,但来自 AWS 的示例代码肯定会根据他们的示例代码假设这种情况可能发生:

def lambda_handler(event, context):
  for record in event['Records']:   # <-- Looping here
      bucket = record['s3']['bucket']['name']
      key = unquote_plus(record['s3']['object']['key'])
      ...
Run Code Online (Sandbox Code Playgroud)

因此,我建议:

  • event在函数开始处打印 ,将其放入日志中以供以后检查
  • 使用循环遍历所有可能通过的记录
  • 让我们知道您发现了什么!