Search code examples
amazon-web-servicesamazon-s3aws-lambdaaws-sdkawss3transfermanager

When actually Amazon S3 triggers Lambda


I have a very big file (estimated 50MB). I uploaded this file to an S3 directory which then triggers a Lambda function. I am using TransferManager to do the S3 upload.

I read the AWS document about Lambda and S3, it says the Lambda function is triggered when a file is created in S3, but I am still wondering if the created file means a file is uploaded completely.

My question: because of the large size of the file, there's a tiny delay of upload, so that is the Lambda function triggered before or after the file is uploaded completely? For example: during uploading a large file, the network is shut down, the file may be broken, so will the Lambda function still be triggered?


Solution

  • While very large is a relative term, S3 is used to handle much larger files than that, so AWS thought of that. Lambda Events will be triggered after the file has been created completely.

    The documentation describes this in more detail.

    While not explicitly mentioned the documentation says that:

    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.

    (Emphasis mine)

    Since it includes details about the object including its size, the object will have been uploaded completely, otherwise that wouldn't be known - here's a sample event that includes the size:

    {
      "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"
            }
          }
        }
      ]
    }