是否可以在每个DynamoDb表记录上运行Lambda?
我有一个带有名称,姓氏,电子邮件的Dynamo表,以及一个以名称,姓氏,电子邮件作为参数的Lambda。我正在尝试配置环境,以便Lambda每天针对Dynamo中发现的每个值自动运行。无法在一个Lambda中完成所有记录,因为它无法扩展(添加更多用户后将超时)。
我目前有一个CloudWatch规则设置,可以按计划触发lambda,但我必须从Dynamo手动将参数添加到触发器-它不是自动的,不是动态的/未连接到dynamo。
-
另一种选择是每次更新DynamoDb记录时都运行lambda ...我可以每周更新所有记录,然后在更新它们时会触发Lambda,但我也不知道这是否可能。< / p>
对这些方法中的任何一种有更多的见识将不胜感激!
答案 0 :(得分:3)
是否可以在每个DynamoDb表记录上运行Lambda?
对于您所要做的就是以可伸缩方式处理DynamoDB表的每一行的特定情况,我会尝试使用Lambda-> SQS-> Lambdas扇出,如下所示:
设置按计划触发的CloudWatch Events规则。让它触发dispatch
Lambda函数。
dispatch
Lambda函数的工作是读取DynamoDB表中的所有条目,并将消息写入jobs
SQS队列,每个DynamoDB项一个。
创建一个worker
Lambda函数,该函数可对DynamoDB表中的任何给定项目执行您想做的事情。
将worker
Lambda连接到jobs
SQS队列,以便在队列中放置某些内容时将分派其实例。
答案 1 :(得分:1)
由于限制因素是lambda超时,因此请使用step函数运行多个lambda。对表执行分页扫描;每个lambda都将返回replaced + removed + added
并将其传递给下一页的下一个调用。
答案 2 :(得分:1)
正如您所指出的,我认为最好的选择是每次更新DynamoDB记录时都运行Lambda。多亏DynamoDB streams,这才有可能。
流是表中发生的更改的有序记录。它们可以调用Lambda,因此它是自动的(但是请注意,更改仅在流中出现一次,请设置DLQ,以防Lambda失败)。这种方法可以很好地扩展,并且还可以发展。如果需要,您可以根据需要将事件从流推送到SQS或Kinesis,散开等。