如何从Lambda事件中获取文件的S3存储桶名称和键名

3
我们在Lambda函数上设置了触发器,希望在S3存储桶中放入最新文件时获取它。文件名会变化。我们想从事件中获取文件对象,但不知道如何操作。
目前,我们在Lambda函数中将直接的文件名写成一个变量,并在本地进行测试。看起来它可以工作,但是我们想让Lambda函数通用,并使用传递的事件参数获取文件。基本上,我们需要交换这两行代码并使它们通用。
const bucket = 'bucket-12345';
const key = 'testXML.xml';

感谢您的任何协助。

3
如果你只是在Lambda函数中记录S3传递的事件对象,那么你会在其中看到所有你需要的内容。以下是事件对象样例:https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-s3-put 注意,你将收到描述添加到S3存储桶中的新对象的事件对象,而不是文件对象本身。 - Mark B
2个回答

3

看一下这个例子

exports.handler = function(event, context, callback) {
    var bucket = event.Records[0].s3.bucket.name;
    var key = event.Records[0].s3.object.key;
    …
}

我们可以在Lambda@Edge中使用它吗? - shintaroid

1
这是事件的样子。文档可以在评论中提到的这里找到。
你将会在event.Records[index].s3.object.key找到所需内容。 根据您的存储桶结构,键可能看起来像一个路径。在这种情况下,您只需要解析出键的结尾部分,其中包含文件名。
{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "s3": {
        "configurationId": "testConfigRule",
        "object": {
          "eTag": "0123456789abcdef0123456789abcdef",
          "sequencer": "0A1B2C3D4E5F678901",
          "key": "HappyFace.jpg",
          "size": 1024
        },
        "bucket": {
          "arn": bucketarn,
          "name": "sourcebucket",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          }
        },
        "s3SchemaVersion": "1.0"
      },
      "responseElements": {
        "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
        "x-amz-request-id": "EXAMPLE123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
    }
  ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接