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

Run a lambda on every DynamoDb entry on schedule?

有没有办法在每个 DynamoDb table 记录上 运行 Lambda?

我有一个 Dynamo table 具有 姓名、姓氏、电子邮件 和一个采用 姓名、姓氏、电子邮件 [=25] 的 Lambda =] 作为参数。我正在尝试配置环境,以便每天 Lambda 运行s 自动为它在 Dynamo 中找到的每个值;无法在一个 Lambda 中完成所有记录,因为它无法扩展(一旦添加更多用户就会超时)。

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

--

另一种选择是每次更新 DynamoDb 记录时 运行 lambda...我可以每周更新所有记录,然后在更新它们时触发 Lambda 但我不知道如果可以的话。

如果能对其中任何一种方法有更多的了解,我们将不胜感激!

Is there a way to run a Lambda on every DynamoDb table record?

对于您的特定情况,您只想以可扩展的方式处理 DynamoDB table 的每一行,我会尝试使用 Lambda -> SQS -> Lambdas 扇出,如下所示:

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

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

  3. 创建一个 worker Lambda 函数,它可以对 DynamoDB table.

  4. 中的任何给定项目执行您希望它执行的任何操作
  5. worker Lambda 连接到 jobs SQS 队列,这样只要有东西放入队列,它的实例就会分派。

由于限制因素是 lambda 超时,运行 使用步进函数的多个 lambda。执行 table 的分页扫描;每个 lambda 将 return LastEvaluatedKey 并将其传递给下一页的下一次调用。

正如您所指出的,我认为您最好的选择是在每次更新 DynamoDB 记录时 运行 Lambda。这要归功于 DynamoDB streams

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