CouchDB提供了一个_changes
端点,可以选择使用长期的HTTP连接来提供更改事件流。
当一个变更事件产生时,我希望触发一个AWS Lambda函数。CouchDB的continuous changes feed似乎很合适,但是可以将其用作Lambda的事件源吗?
通常,您可以使用API Gateway来调用Lambda,但通过对网关端点的HTTP调用,而不是作为HTTP使用者(CouchDB似乎没有提供类似webhook的机制)。
这可以通过使用follow侦听更改并手动调用Lambda来解决,但仅使用亚马逊网络服务就能解决这个问题吗?
发布于 2018-04-06 17:41:02
出于这个答案的目的,我将假设“单独使用亚马逊网络服务”排除了其他亚马逊网络服务计算原语,如EC2和Fargate。这可以用来解决连续流问题。
简短的答案是否定的,目前没有办法单独在Lambda中保持生命周期大于300秒的连接。虽然有其他方法可以解决此问题,但如果您愿意缓解连续连接约束。
第一个选项是创建一个Lambda函数,该函数提取当前的变更提要并将序列号存储在DynamoDB表中。每次使用存储在DynamoDB中的ID通过since
参数调用CouchDB端点时,都可以使用periodic CloudWatch Event来触发这个Lambda函数。
第二种选择是递归调用Lambda函数。连接到传递since
参数的continuous
事件提要,并保持提要打开,直到Lambda函数即将超时。在超时之前,获取最后一个事件的序列ID,并使用该序列ID作为输入参数异步调用Lambda函数,从而完成第一个函数。两次调用之间可能会有一点延迟,但是传递序列ID将确保您不会丢失任何事件。
第三个选项是使用Step Functions对来自第二个选项的流进行建模,它基于Lambda,但提供了一个围绕Lambda调用的状态机。
另一种选择是使用ECS和Fargate,它不需要在功能之间进行太多的协调,但需要权衡一些额外的设置。Fargate管理ECS群集的所有底层计算基础架构。您将需要提供容器镜像和ECS配置(我建议使用CloudFormation),但您可以减轻超时限制。
https://stackoverflow.com/questions/41673912
复制相似问题