按计划在每个DynamoDb条目上运行lambda吗?

时间:2019-01-29 05:41:41

标签: amazon-web-services aws-lambda amazon-dynamodb amazon-cloudwatch aws-serverless

是否可以在每个DynamoDb表记录上运行Lambda?

我有一个带有名称,姓氏,电子邮件的Dynamo表,以及一个以名称,姓氏,电子邮件作为参数的Lambda。我正在尝试配置环境,以便Lambda每天针对Dynamo中发现的每个值自动运行。无法在一个Lambda中完成所有记录,因为它无法扩展(添加更多用户后将超时)。

我目前有一个CloudWatch规则设置,可以按计划触发lambda,但我必须从Dynamo手动将参数添加到触发器-它不是自动的,不是动态的/未连接到dynamo。

-

另一种选择是每次更新DynamoDb记录时都运行lambda ...我可以每周更新所有记录,然后在更新它们时会触发Lambda,但我也不知道这是否可能。< / p>

对这些方法中的任何一种有更多的见识将不胜感激!

3 个答案:

答案 0 :(得分:3)

  

是否可以在每个DynamoDb表记录上运行Lambda?

对于您所要做的就是以可伸缩方式处理DynamoDB表的每一行的特定情况,我会尝试使用Lambda-> SQS-> Lambdas扇出,如下所示:

  1. 设置按计划触发的CloudWatch Events规则。让它触发dispatch Lambda函数。

  2. dispatch Lambda函数的工作是读取DynamoDB表中的所有条目,并将消息写入jobs SQS队列,每个DynamoDB项一个。

    li>
  3. 创建一个worker Lambda函数,该函数可对DynamoDB表中的任何给定项目执行您想做的事情。

  4. worker Lambda连接到jobs SQS队列,以便在队列中放置某些内容时将分派其实例。

答案 1 :(得分:1)

由于限制因素是lambda超时,因此请使用step函数运行多个lambda。对表执行分页扫描;每个lambda都将返回replaced + removed + added并将其传递给下一页的下一个调用。

答案 2 :(得分:1)

正如您所指出的,我认为最好的选择是每次更新DynamoDB记录时都运行Lambda。多亏DynamoDB streams,这才有可能。

流是表中发生的更改的有序记录。它们可以调用Lambda,因此它是自动的(但是请注意,更改仅在流中出现一次,请设置DLQ,以防Lambda失败)。这种方法可以很好地扩展,并且还可以发展。如果需要,您可以根据需要将事件从流推送到SQS或Kinesis,散开等。