如何处理 S3 触发的 SQS 事件?



我有一个S3存储桶,每当添加对象时,它都会向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存储桶中获取相应的对象。

有什么想法吗?

您可能想要在这里处理一个SQSEvent。我相信在每个event.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队列。

最新更新