Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS lambda事件参数:记录何时包含多个项目?_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Sqs_Aws Sdk Net - Fatal编程技术网

Amazon web services AWS lambda事件参数:记录何时包含多个项目?

Amazon web services AWS lambda事件参数:记录何时包含多个项目?,amazon-web-services,amazon-s3,aws-lambda,amazon-sqs,aws-sdk-net,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Sqs,Aws Sdk Net,我有这样一个基础架构:S3->SQS->Lambda。当文件被放到S3时,它将事件放入SQS队列中,然后由lambda函数使用该队列 Lambda是用.net内核编写的。在lambda handlers参数中,我接收一个SQSEvent,在它的主体中,接收一个序列化为Json的S3Event 类结构大致如下所示。它们直接来自AWS.NETSDK class SQSEvent { public List<SQSMessage> Records; ... } class

我有这样一个基础架构:
S3
->
SQS
->
Lambda
。当文件被放到S3时,它将事件放入SQS队列中,然后由lambda函数使用该队列

Lambda是用.net内核编写的。在lambda handlers参数中,我接收一个
SQSEvent
,在它的主体中,接收一个序列化为Json的
S3Event

类结构大致如下所示。它们直接来自AWS.NETSDK

class SQSEvent
{
    public List<SQSMessage> Records;
    ...
}

class SQSMessage
{
    public string Body; // json serialized S3Event is put into here
    ...
}

class S3Event
{
    public List<S3EventNotification> Records;
    ...
}
class SQSEvent
{
公开名单记录;
...
}
类SQS消息
{
public string Body;//json序列化的S3Event放在这里
...
}
S3类事件
{
公开名单记录;
...
}

我好奇的是,
SQSEvent
S3Event
都有一个记录列表。在我的实验中,我总是收到列表中的一个项目。是否知道在什么情况下,这些
记录中的任何一项都将包含多个项目?我找不到说明此行为的文档。

如果在很短的时间内生成了许多记录,例如,如果同时上载了许多S3文件,则Amazon可能会在单个事件中发送记录列表。

我不认为这是真的。这只是许多不同服务使用的通用格式。Lambda@Edge从CloudFront使用中触发事件,并且除了
事件的1个成员之外,不会显示任何其他内容。Records
@Michael sqlbot问题中列出的事件类型之一的SQS集成肯定是正确的。除非您明确地将SQS配置为一次只向Lambda发送一条消息,否则您肯定会从SQS获得多条记录。我相信Amazon构建所有这些数据结构的方式都是这样的,它们可以在一段时间内无法调用Lambda函数的情况下对消息进行排队,在此之后,它们可以在单个事件中发送多条消息,以便快速清除队列。这在SQS>>Lambda集成中是正确的,但是对于S3事件。。。几年前,我怀疑这一点,并由此得出了我的结论:“目前,所有S3事件通知在每条通知消息中都有一个事件。在将来添加新的事件类型时,我们可能会包含多个记录。这也是一种在其他AWS服务中共享的消息格式,其他服务可以包含多个记录。”@Michael sqlbot这就是我一直在寻找的答案。非常感谢。老实说,我的应用程序更关心s3event而不是sqsevent,因此您的发现对我非常有用。你可能想给我一个答案,这样我就可以接受了。我自己也经常想知道这一点。我总是将其编码为处理多条记录,但我只看到一条记录通过。