【问题标题】:Reliably pushing events from API Gateway to Lambda using a queue使用队列可靠地将事件从 API Gateway 推送到 Lambda
【发布时间】:2017-07-24 21:45:11
【问题描述】:

我目前有一个第三方应用程序通过 API 网关将消息推送到 Lambda 函数。 Lambda 函数需要对消息进行序列化、记录和推送到另一个我几乎无法控制的 ESB。

我试图确保在 Lambda 函数处于最大负载或无法与 ESB 通信的情况下存在某种恢复机制。我已经读过 Kinesis 是一个很好的选择,但是 ESB 不支持对我的用例进行批处理。

这会导致我遇到一些消息可能会到达 ESB 而其他消息不会到达的场景,这最终会导致批处理失败。然后,当重试批处理时,消息将在 ESB 中复制。

有没有一种方法可以在不进行批处理的情况下利用 Kinesis 提供的功能?是否有其他 AWS 产品更适合我的用例?理想情况下,我会让 Lambda 函数处理一条消息,该消息会一直保留在队列中,直到它成功推送到 ESB。

任何提示将不胜感激。

谢谢,
马特

【问题讨论】:

  • 我觉得 SQS 队列是最好的。有关解决方案第一部分的示例,请参阅this post。但是 Lambda 和 SQS 可能是一个糟糕的组合,因为您需要轮询队列以获取数据。另一种可能性是 DynamoDB 表,但它与 SQS 的问题类似。你被 Lambda 卡住了吗?您的延迟要求是什么?
  • 推送消息的频率是多少?它是实时流媒体还是每小时等..?当您说最大负载时,您的意思是“每次调用的 AWS Lambda 资源限制”已达到,或者您的意思是 API Gateway 节流?
  • @Nicholas 消息推送的频率不是很高。它是实时的,但我想说一分钟内推送的消息通常不超过 10 条。我只是担心 ESB 将不可用,或者在极少数情况下,由于调用次数最多,Lambda 将不可用,所以我需要某种回退。消息只传递一次的某种队列是理想的。
  • 是否需要保留消息顺序?
  • jjones 有一个很好的观点 - 你想要时间旅行吗?这些消息是否可以乱序处理

标签: amazon-web-services lambda aws-api-gateway amazon-kinesis


【解决方案1】:

以下内容可能对您有所帮助:

1) 设置 api-gateway 以记录到 sqs 和 2) 然后在该 sqs 队列上设置 lambda 函数以序列化、记录并将消息推送到外部端点。

对于第一部分:How to integrate API Gateway with SQS 这会有所帮助。 (在 cmets 中已经提到过)

这篇文章可能对你的第二部分有更多帮助:https://dzone.com/articles/integrate-sqs-and-lambda-serverless-architecture-f

请注意,您还可以选择您想要的触发器类型(基于用例)- 基于 cron 的轮询/或基于事件,您还可以控制何时从 lambda 函数中的 sqs 删除。 (您还可以在名为“sqs-poller”的 lambda 蓝图中找到非常基本的代码)。

谢谢!

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2013-05-26
    • 2019-07-08
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多