我一直在尝试使用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功能以处理事件有效载荷
请分享如何实现这一目标的建议。
许多客户使用的另一种异步模型:
- 设置API,配置为向Amazon Kinesis发送请求。此API可以确认该请求
- 设置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函数。
- 客户端请求API网关->调用Lambda函数A
- Lambda A验证有效载荷,然后发布到SNS主题X
- Lambda A返回
{fine}
成功消息->API网关->客户端 - SNS主题X触发Lambda函数B
- Lambda函数B实现给定的逻辑