S3 Lambda 触发器不会为每个文件上传触发
S3 Lambda Trigger not triggering for EVERY file upload
在Python Django中,我保存了多个视频文件。
保存 1:
- 长视频
- 短视频
保存 2:
- 长视频
- 短视频
保存 3:
- 长视频
- 短视频
我有一个 lambda 触发器,它使用媒体转换器将 HLS 格式添加到这些视频并生成缩略图。这 3 次保存彼此之间的时间间隔非常短,因为它们是社交媒体 Post 对象的资产。
出于某种原因,S3 仅针对部分文件触发。
Save 1 触发 S3 Lambda 但不触发 Save 2。
保存 3 也会触发 S3 Lambda。
我的假设是 S3 触发器在识别新文件上传之间有某种停机时间(在这种情况下,我认为这些文件上传之间的时间段接近即时)。
这个假设是否正确,我该如何规避它?
它应该为 所有 个对象触发。
当 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,
...
}
}
}
]
}
请注意,这是一个数组,因此可能会将多个对象传递到一个 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'])
...
因此,我建议:
- 打印函数开头的
event
,将其放入日志中供以后检查
- 使用循环遍历所有可能传递的记录
- 让我们知道您发现了什么!
在Python Django中,我保存了多个视频文件。
保存 1:
- 长视频
- 短视频
保存 2:
- 长视频
- 短视频
保存 3:
- 长视频
- 短视频
我有一个 lambda 触发器,它使用媒体转换器将 HLS 格式添加到这些视频并生成缩略图。这 3 次保存彼此之间的时间间隔非常短,因为它们是社交媒体 Post 对象的资产。
出于某种原因,S3 仅针对部分文件触发。
Save 1 触发 S3 Lambda 但不触发 Save 2。 保存 3 也会触发 S3 Lambda。
我的假设是 S3 触发器在识别新文件上传之间有某种停机时间(在这种情况下,我认为这些文件上传之间的时间段接近即时)。
这个假设是否正确,我该如何规避它?
它应该为 所有 个对象触发。
当 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,
...
}
}
}
]
}
请注意,这是一个数组,因此可能会将多个对象传递到一个 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'])
...
因此,我建议:
- 打印函数开头的
event
,将其放入日志中供以后检查 - 使用循环遍历所有可能传递的记录
- 让我们知道您发现了什么!