我们在lambda函数上设置了一个触发器,当它放到S3存储桶中时,它想从S3存储桶中获取最新文件。文件名将更改。我们想从事件中获取文件对象,但无法确定方法。
现在,我们将直接文件名写为lambda函数中的变量,并在本地对其进行测试。看来可行,但是我们想使lambda通用并使用传入的事件param来抓取文件。基本上,我们需要换掉这两行并使它们通用。
const bucket = 'bucket-12345';
const key = 'testXML.xml';
谢谢您的帮助。
答案 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"
}
]
}