实际上 Amazon S3 何时触发 Lambda
When actually Amazon S3 triggers Lambda
我有一个很大的文件(估计有 50MB)。我将此文件上传到 S3 目录,然后触发 Lambda 函数。我正在使用 TransferManager 进行 S3 上传。
看了AWS文档中关于Lambda和S3的内容,上面说在S3中创建文件时会触发Lambda函数,但我仍然想知道创建的文件是否意味着文件已完全上传。
我的问题:因为文件比较大,所以上传有一点延迟,请问Lambda函数是在文件上传完成之前触发的还是在上传完成之后触发的?例如:上传大文件时,断网,可能文件坏了,那么Lambda函数还会被触发吗?
虽然非常大是一个相对术语,但 S3 用于处理比这大得多的文件,因此 AWS 想到了这一点。 Lambda 事件将在文件完全创建后触发。
documentation对此进行了更详细的描述。
虽然没有明确提到文档说:
Amazon S3 invokes your function asynchronously with an event that
contains details about the object. The following example shows an
event that Amazon S3 sent when a deployment package was uploaded to
Amazon S3.
(强调我的)
由于它包含有关对象的详细信息,包括其 大小,因此对象将已完全上传,否则不会为人所知 - 这是一个包含大小的示例事件:
{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "2019-09-03T19:37:27.192Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAINPONIXQXHT3IKHL2"
},
"requestParameters": {
"sourceIPAddress": "205.255.255.255"
},
"responseElements": {
"x-amz-request-id": "D82B88E5F771F645",
"x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo="
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1",
"bucket": {
"name": "lambda-artifacts-deafc19498e3f2df",
"ownerIdentity": {
"principalId": "A3I5XTEXAMAI3E"
},
"arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df"
},
"object": {
"key": "b21b84d653bb07b05b1e6b33684dc11b",
"size": 1305107,
"eTag": "b21b84d653bb07b05b1e6b33684dc11b",
"sequencer": "0C0F6F405D6ED209E1"
}
}
}
]
}
我有一个很大的文件(估计有 50MB)。我将此文件上传到 S3 目录,然后触发 Lambda 函数。我正在使用 TransferManager 进行 S3 上传。
看了AWS文档中关于Lambda和S3的内容,上面说在S3中创建文件时会触发Lambda函数,但我仍然想知道创建的文件是否意味着文件已完全上传。
我的问题:因为文件比较大,所以上传有一点延迟,请问Lambda函数是在文件上传完成之前触发的还是在上传完成之后触发的?例如:上传大文件时,断网,可能文件坏了,那么Lambda函数还会被触发吗?
虽然非常大是一个相对术语,但 S3 用于处理比这大得多的文件,因此 AWS 想到了这一点。 Lambda 事件将在文件完全创建后触发。
documentation对此进行了更详细的描述。
虽然没有明确提到文档说:
Amazon S3 invokes your function asynchronously with an event that contains details about the object. The following example shows an event that Amazon S3 sent when a deployment package was uploaded to Amazon S3.
(强调我的)
由于它包含有关对象的详细信息,包括其 大小,因此对象将已完全上传,否则不会为人所知 - 这是一个包含大小的示例事件:
{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "2019-09-03T19:37:27.192Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAINPONIXQXHT3IKHL2"
},
"requestParameters": {
"sourceIPAddress": "205.255.255.255"
},
"responseElements": {
"x-amz-request-id": "D82B88E5F771F645",
"x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo="
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1",
"bucket": {
"name": "lambda-artifacts-deafc19498e3f2df",
"ownerIdentity": {
"principalId": "A3I5XTEXAMAI3E"
},
"arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df"
},
"object": {
"key": "b21b84d653bb07b05b1e6b33684dc11b",
"size": 1305107,
"eTag": "b21b84d653bb07b05b1e6b33684dc11b",
"sequencer": "0C0F6F405D6ED209E1"
}
}
}
]
}