从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 回答
0

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

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

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

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

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则