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