【问题标题】:How can I trigger an AWS Lambda in response to CouchDB change events using only AWS?如何仅使用 AWS 触发 AWS Lambda 以响应 CouchDB 更改事件?
【发布时间】:2018-04-07 01:41:02
【问题描述】:

CouchDB 提供了一个 _changes 端点,可以选择使用长期 HTTP 连接来提供更改事件流。

当发生更改事件时,我希望触发 AWS Lambda 函数。 CouchDB 的continuous changes feed 似乎很合适,但是否可以将其用作 Lambda 的事件源?

通常,您可以使用 API Gateway 调用 Lambda,但通过对网关端点的 HTTP 调用,而不是作为 HTTP 使用者(CouchDB 似乎没有提供类似 webhook 的机制)。

这可以通过使用follow 来监听变化并手动调用 Lambda 来解决,但是单独使用 AWS 可以解决这个问题吗?

【问题讨论】:

    标签: amazon-web-services stream couchdb aws-lambda


    【解决方案1】:

    出于此答案的目的,我将假设“单独使用 AWS”不包括其他 AWS 计算原语,例如 EC2 和 Fargate。可以用来解决连续流问题。

    简短的回答是否定的,目前没有办法仅靠 Lambda 来维持生命周期超过 300 秒的连接。虽然如果您愿意缓解连续连接约束,还有其他方法可以解决此问题。

    第一个选项是创建一个 Lambda 函数,该函数提取当前更改源并将序列号存储在 DynamoDB 表中。每次使用存储在 DynamoDB 中的 ID 使用 since 参数调用 CouchDB 端点时,您都​​可以使用 periodic CloudWatch Event 来触发此 Lambda 函数。

    第二种选择是递归调用您的 Lambda 函数。连接到传递 since 参数的 continuous 事件源并保持源打开,直到您的 Lambda 函数即将超时。在超时之前,获取最后一个事件的序列 ID,并使用该序列 ID 作为输入参数异步调用您的 Lambda 函数,让您的第一个函数完成。调用之间可能会有一点延迟,但传递序列 ID 将确保您不会丢失任何事件。

    第三种选择是使用基于 Lambda 但提供围绕您的 Lambda 调用的状态机的 Step Functions 对来自第二个选项的流进行建模。

    另一个不需要在功能之间进行太多协调但需要权衡一些额外设置的选项是使用 ECS 和Fargate。 Fargate 管理 ECS 集群的所有底层计算基础架构。您将需要提供容器镜像和 ECS 配置(我会推荐 CloudFormation),但您会放宽超时限制。

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 2023-02-04
      • 2016-09-14
      • 2020-04-20
      • 2018-05-18
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多