Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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
C# 如何处理';S3触发了什么?_C#_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Sqs - Fatal编程技术网

C# 如何处理';S3触发了什么?

C# 如何处理';S3触发了什么?,c#,amazon-web-services,amazon-s3,aws-lambda,amazon-sqs,C#,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Sqs,我有一个S3 bucket,每当添加一个对象时,它都会向SQS队列发送一条消息。作为回报,该SQS队列触发一个Lambda,该Lambda尝试使用其键检索最近添加的对象 我的Lambda中的FunctionHandler方法如下所示: public async Task FunctionHandler(S3EventNotification evnt, ILambdaContext context) { // evnt.Records[0].S3 is null } 我在这里处理的事件

我有一个S3 bucket,每当添加一个对象时,它都会向SQS队列发送一条消息。作为回报,该SQS队列触发一个Lambda,该Lambda尝试使用其键检索最近添加的对象

我的Lambda中的
FunctionHandler
方法如下所示:

public async Task FunctionHandler(S3EventNotification evnt, ILambdaContext context) {
    // evnt.Records[0].S3 is null
}
我在这里处理的事件是否正确?我处理
S3EventNotification
的原因是,当我检查SQS队列中的消息时,它们的内容对应于
S3EventNotification
事件类型()。但是由于某些原因,我试图访问的属性是空的

如果我尝试处理一个
SQSEvent
,那么我就无法获得所需的对象键,以便能够从S3 bucket中抓取相应的对象


有什么想法吗?

你可能想在这里处理
SQSEvent
。我相信每个
事件。records
您将拥有
body
属性,它将保存原始的S3事件。它可能需要一些序列化

比如:

public class Function
{
    public string Handler(SQSEvent sqsEvent)
    {
        foreach (var record in sqsEvent.Records)
        {
            // record.Body has your S3 event
        }
    }
}

出于兴趣,您是否考虑过直接从S3->EventBridge->Lambda出发?这样就可以跳过SQS队列。

SQSEvent记录的body属性是否包含S3EventNotification或S3Event?我假设,由于body是一个字符串,这些事件将以需要序列化的原始JSON格式出现,对吗?我不确定SQSEvent或S3EventNotification是否会出现在body中。最好的办法是调试并检查它。如果您正努力在本地调试它,您可能只需将其登录到CloudWatch,查看内容。我认为您是正确的,字符串需要序列化到正确的类。@AlexBailey您是正确的——S3事件将作为字符串“封装”在SQS事件中,需要转换为普通对象。这可以通过直接从S3事件转到AWS Lambda函数来避免。