【问题标题】:When actually Amazon S3 triggers Lambda实际上,Amazon S3 何时触发 Lambda
【发布时间】:2019-09-11 16:46:40
【问题描述】:

我有一个非常大的文件(估计 50MB)。我将此文件上传到 S3 目录,然后触发 Lambda 函数。我正在使用 TransferManager 进行 S3 上传。

我阅读了关于 Lambda 和 S3 的 AWS 文档,它说在 S3 中创建文件时会触发 Lambda 函数,但我仍然想知道创建的文件是否意味着文件已完全上传。

我的问题:由于文件很大,上传会有一点延迟,那么是在文件完全上传之前还是之后触发了Lambda函数?例如:上传大文件时,网络被关闭,文件可能坏了,Lambda函数还会被触发吗?

【问题讨论】:

  • 我认为字节流将被存储在缓冲区中并将其写入文件,因此文件将在某个时间创建。如果发生错误,则表示写入过程未完成,损坏的部分不能是文件。

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk awss3transfermanager


【解决方案1】:

虽然非常大是一个相对术语,但 S3 用于处理比这更大的文件,因此 AWS 想到了这一点。 Lambda 事件将在文件完全创建后触发。

documentation 对此进行了更详细的描述。

虽然没有明确提到文档说:

Amazon S3 通过一个事件异步调用您的函数 包含对象的详细信息。下面的例子展示了一个 将部署包上传到时 Amazon S3 发送的事件 亚马逊 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"
        }
      }
    }
  ]
}

【讨论】:

  • 同意。 Amazon S3 中的对象要么存在,要么不存在。没有“部分对象”的概念。该对象仅在上传成功完成后才存在。
  • 您可能会争辩说,在多部分上传期间,该对象部分存在,但由于您无法通过“标准”-API (GetObject) 看到它,我认为您的说法是公平的。跨度>
  • 过去,我确实看到由于网络问题在 S3 中上传了一个损坏的文件,它在 S3 中创建了一个文件,但其大小为零或非常小,如 5KB 10KB(实际大小为 50MB) .当时我没有使用 lambda 函数,因此无法验证 lambda 是否仍然被触发。如果有人对此有任何经验,请分享。否则,这个答案是最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2020-02-09
  • 2021-06-24
  • 1970-01-01
  • 2015-10-12
  • 2023-03-18
相关资源
最近更新 更多