roe*_*gol 17 amazon-s3 amazon-web-services aws-lambda
我需要一些lambda函数来获得这个流程:
触发S3 put文件事件 - > lambda函数 - >将行插入DynamoDB
当我从lambda屏幕使用AWS创建测试时,我得到了这个示例,Records列表中只有1条记录:
{
"Records": [ // <<<----------------only 1 element
{
"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": "arn:aws:s3:::mybucket",
"name": "roeyg-oregon-s3-bucket",
"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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法来查看是否可以在此列表中获得包含多个元素的列表,例如使用CLI或将多个文件一起上传甚至整个文件夹,在所有这些场景中,我每个事件都有一个项目.
我的问题是要知道是否有一个场景我可以在一个事件中获得多个文件?
通过这种方式,我会改变我的代码以获得循环,而不是像AWS建议的那样引用第一个元素.
Ant*_*ace 19
根据您当前的配置,每次调用只能获得一条记录.这是因为每个不同的S3 Put Event都会以您的AWS Lambda函数作为收件人触发不同的S3事件通知.然后,Lambda 默认情况下最多可以处理100个并发执行,这个限制可以根据您的传入事件率自动提高.
AWS Lambda Records作为集合接收,因为它使用S3事件通知将事件发送到lambda,从而使用S3通知事件消息结构.在预期可能返回多个记录的事件类型时,格式作为集合存在.您可以在此处查看 S3事件通知类型的完整列表.
这不会影响来自事件的S3通知s3:ObjectCreated:Put,因此您可以按原样保留该功能,因为这是Put通知的工作方式 - one event -> one notification -> one invokation.
也就是说,如果你仍然希望你的代码能够在每次调用时处理多个记录,那么将它写入以下任何一个都没有害处:
| 归档时间: |
|
| 查看次数: |
6209 次 |
| 最近记录: |