我一直在尝试使用AWS API Gateway和AWS Lambda来试用无服务器架构 . 一直在浏览博客和AWS文档 . 已经尝试了样本GET / POST . 但是,我有以下要求w.r.t跟踪我的自定义应用程序中的用户事件
-
事件从我的应用程序发布到API endpoints
-
我希望API使用自定义响应回复(Say {'fine'})(确认已收到请求)
-
发送响应后,将事件有效负载移交给AWS Lambda函数
根据文档,我了解到,a)我可以将事件发布到API endpoints b)在GET / POST上触发AWS Lambda函数 - 从AWS Lambda函数响应API请求
我想更改以上内容并将其修改为a)将事件发布到API endpoints a.0)回复确认收到请求[Say {'fine'}] b)触发AWS Lambda函数以处理事件有效负载
请分享有关如何实现相同的建议 .
3 回答
许多客户使用的另一个异步模型:
设置配置为send requests to Amazon Kinesis的API . 此API可以确认该请求 .
将AWS Lambda设置为consume your Kinesis stream .
此设置对于高工作负载API具有一些优势,因为来自Kinesis流的提取可以进行批处理,并且不需要对API网关限制和Lambda限制进行1对1缩放 .
Update
回答有关可伸缩性的问题:
Kinesis
Kinesis通过将其称为"shards"的内容添加到流中进行扩展 . 每个分片根据分区键处理一部分流量 . 每个分片可扩展至1000 rps或1MBps(see limits) . 即使使用较低的默认25个分片,使用均匀分布的分区键也可以支持高达25,000 rps或25 MBps .
API Gateway
API网关的默认帐户级别限制为500 rps,但可以通过请求限制增加轻松扩展 . 我们的 生产环境 客户使用的服务超出了您当前建议的规模 .
如果您希望从API快速响应而不必等待数据处理,您可以:
将事件发布到API网关 endpoints
触发AWS Lambda函数 A
使用Lambda函数中的AWS SDK异步调用Lambda函数 B A
调用
context.succeed()
或context.done()
或Lambda函数 A 中的回调函数,以便它响应API网关Lambda函数 B 可以在API网关已收到响应时处理数据
您应首先运行一些测试,以了解您的lambda函数完成所有逻辑后您获得的实际响应时间类型 . 如果时间高于您认为对于您的用例可接受的时间,则此处是另一个异步解决方案utilizing an SNS Topic以触发secondary Lambda function .
客户端对API网关的请求 - >调用Lambda函数A.
Lambda A验证有效负载,然后发布到SNS主题X.
Lambda A返回
{fine}
成功消息 - > API网关 - >客户端SNS主题X触发Lambda函数B.
Lambda函数B实现给定的逻辑