如何仅使用AWS触发AWS Lambda以响应CouchDB更改事件?

D C*_*ter 5 couchdb stream amazon-web-services aws-lambda

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

生成更改事件时,我希望触发AWS Lambda函数.CouchDB的连续更改提要似乎是合适的,但是有可能将其用作Lambda的事件源吗?

通常,您可以使用API​​网关来调用Lambda,但是通过HTTP调用网关端点,而不是HTTP消费者(CouchDB似乎不提供类似webhook的机制).

这可以通过使用follow来监听更改并手动调用Lambda来解决,但是这可以单独使用AWS来解决吗?

mcr*_*ute 4

出于本答案的目的,我假设“单独使用 AWS”排除了其他 AWS 计算原语,例如 EC2 和 Fargate。这可以用来解决连续流问题。

简而言之,答案是否定的,目前仅靠 Lambda 无法维持生命周期超过 300 秒的连接。尽管如果您愿意缓解连续连接约束,还有其他方法可以解决此问题。

第一个选项是创建一个 Lambda 函数,用于提取当前更改源并将序列号存储在 DynamoDB 表中。您可以使用定期 CloudWatch 事件在每次since使用 DynamoDB 中存储的 ID 的参数调用 CouchDB 终端节点时触发此 Lambda 函数。

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

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

另一种不需要功能之间进行太多协调但需要牺牲一些额外设置的选项是使用 ECS 和Fargate。Fargate 管理 ECS 集群的所有底层计算基础设施。您将需要提供容器映像和 ECS 配置(我推荐 CloudFormation),但您将减轻超时限制。