【发布时间】:2021-05-12 21:22:45
【问题描述】:
我们正在使用 AWS 设计无服务器服务。
整体结构是API-gateway -> lambda [L1] -> kinesis -> backend
API 网关 -> lambda L1 是代理模式。即 APIG 会将整个有效负载传输到 lambda,包括客户端帐户 ID 等上下文
我们希望在内部有一个重试策略,以防后端处理由于某种原因失败。对于内部重试机制,我们想用相同的请求再次触发 lambda L1。
为此,我们考虑了以下解决方案:
每当由于 API 网关请求触发 lambda L1 时,我们会将整个请求存储在 S3 中。在重试期间,我们将有一个单独的重试 lambda L2,它从 s3 下载相同的请求,读取它并触发具有相同有效负载的 lambda L1 我们考虑了以下方法: 我们可以通过传递存储在 S3 中的整个 json 有效负载直接使用Invoke API。 考虑到 lambda L1 是否以代理模式连接到 API 网关,所以这项工作是否只有一个触发器? 这种方法有什么挑战吗?
这是推荐的方式还是有其他更好的方式?
【问题讨论】:
-
请求事件有多大?也许您可以将其存储在 sqs 中,而不是 s3 中。 SQS 可以有死信队列,您可以自动处理并收到有关未能成功处理的事件的通知。
-
我的用例是这样的,后端处理中可能会发生故障,因此这些故障不会被使用 DLQ 捕获。
标签: amazon-web-services aws-lambda aws-api-gateway