如何从Lambda中的事件获取s3存储桶名称和文件密钥

时间:2018-12-21 21:46:31

标签: node.js amazon-s3 aws-lambda

我们在lambda函数上设置了一个触发器,当它放到S3存储桶中时,它想从S3存储桶中获取最新文件。文件名将更改。我们想从事件中获取文件对象,但无法确定方法。

现在,我们将直接文件名写为lambda函数中的变量,并在本地对其进行测试。看来可行,但是我们想使lambda通用并使用传入的事件param来抓取文件。基本上,我们需要换掉这两行并使它们通用。

const bucket = 'bucket-12345';
const key = 'testXML.xml';

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

看看this example

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

答案 1 :(得分:0)

这是事件的样子。可以在here中找到文档,就像@MarkB在评论中提到的那样。

您将在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"
    }
  ]
}