从SQS触发的Lambda函数返回值到客户端

0

【以下的问题经过翻译处理】 我正在尝试实现一个简单的Web服务,用于处理上传的文件并将响应返回给上传者。根据AWS,我想到了这样一个(不完整的)工作流程: 1.客户端将文件上传到 S3。 2.客户端发送 SQS 消息,触发 Lambda 函数。 3.Lambda 下载并处理文件,然后将结果上传到 S3。 4.处理完成后,个别上传者会收到通知并从 S3 下载结果。

现在我面临以下问题:我想要充分利用AWS Lambda与SQS结合的优势。另一方面,我失去了直接从Lambda函数向客户端返回内容的能力。如何替代这种损失?我已经考虑到了SNS,它似乎更适合向一大群(不太动态的)接收者发布通知,而不是每次Lambda调用针对单个个体客户端。是不是EventBridge与AWS Gateway作为目标可能是正确的方向?我再次面临一个问题,如何过滤出一个单独的“AWS Lambda响应事件”的正确接收者。或者是唯一的解决方案是放弃SQS服务,然后允许直接将Lambda输出发送给客户端?

备注:输入文件大小:1-25MB Lambda处理时间:约20秒

1 Antwort
0

【以下的回答经过翻译处理】 您没有提到客户端是什么?是浏览器/移动设备吗?还是另一个服务器组件?事件是如何添加到SQS的?

如果是浏览器/移动设备,您可以从客户端到API Gateway使用WebSocket,将连接ID包含在SQS消息中,当Lambda函数完成时,它将在该连接上发送通知。如果是移动设备,您可以发送移动推送通知(可以发送到单个设备,不需要广播给所有用户)。最后,您可以使调用同步,即客户端调用API Gateway,然后调用Lambda函数返回值。请注意,最后一个选项可能会根据请求数量而存在扩展性问题。

如果是服务器组件,您可以使用EventBridge,每个服务器组件创建一个带有自己服务ID的规则,该ID应包含在原始的SQS消息中。另一种选择是让每个此类服务创建一个传入队列,Lambda函数将向该队列发送完成事件。

我猜还有其他选项,但它们也取决于您的确切需求。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen