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



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

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

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

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

为了这个答案的目的,我假设"单独使用AWS"排除了其他AWS计算原语,如EC2和Fargate。可用于解决连续流问题。

简短的答案是否定的,目前仅Lambda一家公司无法保持寿命超过300秒的连接。尽管如果您愿意缓解连续连接约束,还有其他方法可以解决此问题。

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

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

第三个选项是使用基于Lambda的Step函数对第二个选项中的流进行建模,但为Lambda调用提供了一个状态机。

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

最新更新