【问题标题】:AWS API Gateway default response and Trigger AWS LambdaAWS API Gateway 默认响应和触发 AWS Lambda
【发布时间】:2016-09-14 19:20:37
【问题描述】:

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

  • 事件从我的应用程序发布到 API 端点
    • 我希望 API 以自定义响应进行响应(例如 {'fine'}) (确认已收到请求)
  • 发送响应后,将事件负载移交给 AWS Lambda 函数

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

我想更改以上内容并将其修改为 a) 将事件发布到 API 端点 a.0) 回复确认收到请求 [Say {'fine'} ] b) 触发 AWS Lambda 函数来处理事件负载

请分享有关如何实现相同目标的建议。

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework


    【解决方案1】:

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

    1. 设置一个配置为send requests to Amazon Kinesis 的API。此 API 可以确认请求。
    2. 将 AWS Lambda 设置为 consume your Kinesis stream

    此设置对于高工作负载 API 有一些优势,因为可以批量从 Kinesis 流中提取数据,并且不需要对 API Gateway 限制和 Lambda 限制进行一对一的扩展。

    更新

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

    运动

    Kinesis 通过将所谓的“分片”添加到流中来进行扩展。每个分片根据分区键处理一部分流量。每个分片可扩展到 1000 rps 或 1MBps (see limits)。即使使用较低的默认 25 个分片,这也将支持高达 25,000 rps 或 25MBps 的均匀分布的分区键。

    API 网关

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

    【讨论】:

    • 当然。会试试这个。
    • 在线阅读表明 Kinesis 可能无法很好地扩展到像 Kafka 这样的高吞吐量。比如说,如果我将其扩展为每秒 6000 - 8000 个请求,API Gateway 和 Kinesis 是否能够处理这个问题?说我的平均值。有效载荷大小约为 25 - 30 KB?
    • @user1652054 我用一些关于缩放的信息更新了我的答案。希望这能回答您的问题。
    • 当然。谢谢,这很有帮助。我将开始尝试一些场景
    【解决方案2】:

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

    • 将事件发布到 API 网关端点
    • 触发 AWS Lambda 函数 A
    • 在 Lambda 函数 A 中使用 AWS 开发工具包异步调用 Lambda 函数 B
    • 调用 context.succeed()context.done() 或 Lambda 函数 A 中的回调函数,使其响应 API Gateway
    • Lambda 函数 B 可以在 API 网关已收到响应时处理数据

    【讨论】:

    • 谢谢。这可能意味着双重计费。我想知道是否有办法让 API 网关关闭响应循环(就像在 Nodejs express 应用程序端点中如何可能)然后继续处理。
    • 当然,你会为这个额外的 lambda 执行付费,但由于 128MB 的内存和可能低于 100 毫秒的执行,额外的成本应该是非常有限的。您必须将其与 Kinesis 等其他解决方案的价格进行比较,具体取决于您期望的请求量。
    【解决方案3】:

    您应该首先运行一些测试,看看让您的 lambda 函数完成所有逻辑后得到的实际响应时间是什么类型。如果时间高于您认为您的用例可以接受的时间,这里是另一个异步解决方案utilizing an SNS Topic 来触发secondary Lambda function

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

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2020-03-17
      • 2019-06-04
      • 2015-12-04
      • 2018-03-22
      • 2016-04-16
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多