AWS API网关默认响应和触发AWS Lambda



我一直在尝试使用AWS API网关和AWS Lambda来尝试无服务器架构。一直在浏览博客和AWS文档。已经试用了GET/POST示例。但是,我有以下关于从我的自定义应用程序跟踪用户事件的要求

  • 事件从我的应用程序发布到API终点
    • 我希望API以自定义响应(说{‘fine’})进行响应(确认已收到请求)
  • 发送响应后,将事件有效载荷移交给AWS Lambda函数

根据文件,我理解,a) 我可以将事件发布到API端点b) 在GET/POST上触发AWS Lambda函数-从AWS Lambda函数对API请求做出响应

我想更改以上内容并将其修改为a) 将事件发布到API终结点a.0)回复,确认已收到请求[说{‘fine’}]b) 触发AWS Lambda功能以处理事件有效载荷

请分享如何实现这一目标的建议。

许多客户使用的另一种异步模型:

  1. 设置API,配置为向Amazon Kinesis发送请求。此API可以确认该请求
  2. 设置AWS Lambda以消耗Kinesis流

这种设置对于高工作负载的API有一些优势,因为从Kinesis流中提取可以批量进行,并且不需要API网关限制和Lambda限制的1比1缩放。

更新

回答您关于可扩展性的问题:

Kinesis

Kinesis通过在流中添加所谓的"碎片"来进行缩放。每个shard根据分区键处理一部分流量。每个碎片可扩展到1000转/秒或1MBps(请参阅限制)。即使使用较低的默认25个碎片,也可以通过均匀分布的分区密钥支持多达25000个rps或25MBps。

API网关

API网关的默认帐户级别限制为500 rps,但可以通过请求增加限制来轻松扩展。我们有生产中的客户正在以超出您当前建议规模的限制使用该服务。

如果您希望API快速响应,而不必等待数据处理,您可以:

  • 将事件发布到API网关终结点
  • 触发AWS Lambda函数A
  • 使用Lambda函数中的AWS SDK异步调用Lambda函数
  • 调用context.succeed()context.done()或Lambda函数中的回调函数A,使其响应API网关
  • Lambda函数B可以在API网关已经收到响应的情况下处理数据

您应该首先运行一些测试,看看让lambda函数完成所有逻辑会得到什么类型的真实世界响应时间。如果时间超过了您认为用例可以接受的时间,这里有另一个异步解决方案,它利用SNS主题来触发辅助Lambda函数。

  1. 客户端请求API网关->调用Lambda函数A
  2. Lambda A验证有效载荷,然后发布到SNS主题X
  3. Lambda A返回{fine}成功消息->API网关->客户端
  4. SNS主题X触发Lambda函数B
  5. Lambda函数B实现给定的逻辑

相关内容

  • 没有找到相关文章

最新更新