运行 按计划在每个 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 扇出,如下所示:
设置按计划触发的 CloudWatch Events 规则。让这个触发一个 dispatch
Lambda 函数。
dispatch
Lambda 函数的工作是读取 DynamoDB table 中的所有条目并将消息写入 jobs
SQS 队列,每个 DynamoDB 一个item.
创建一个 worker
Lambda 函数,它可以对 DynamoDB table.
中的任何给定项目执行您希望它执行的任何操作
将 worker
Lambda 连接到 jobs
SQS 队列,这样只要有东西放入队列,它的实例就会分派。
由于限制因素是 lambda 超时,运行 使用步进函数的多个 lambda。执行 table 的分页扫描;每个 lambda 将 return LastEvaluatedKey
并将其传递给下一页的下一次调用。
正如您所指出的,我认为您最好的选择是在每次更新 DynamoDB 记录时 运行 Lambda。这要归功于 DynamoDB streams。
流是 table 发生的变化的有序记录。这些可以调用 Lambda,因此它是自动的(但请注意,更改仅在流中出现一次,设置 DLQ 以防您的 Lambda 失败)。这种方法可以很好地扩展,而且也很容易进化。如果需要,您可以根据需要将事件从流推送到 SQS 或 Kinesis、扇出等。
有没有办法在每个 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 扇出,如下所示:
设置按计划触发的 CloudWatch Events 规则。让这个触发一个
dispatch
Lambda 函数。dispatch
Lambda 函数的工作是读取 DynamoDB table 中的所有条目并将消息写入jobs
SQS 队列,每个 DynamoDB 一个item.创建一个
worker
Lambda 函数,它可以对 DynamoDB table. 中的任何给定项目执行您希望它执行的任何操作
将
worker
Lambda 连接到jobs
SQS 队列,这样只要有东西放入队列,它的实例就会分派。
由于限制因素是 lambda 超时,运行 使用步进函数的多个 lambda。执行 table 的分页扫描;每个 lambda 将 return LastEvaluatedKey
并将其传递给下一页的下一次调用。
正如您所指出的,我认为您最好的选择是在每次更新 DynamoDB 记录时 运行 Lambda。这要归功于 DynamoDB streams。
流是 table 发生的变化的有序记录。这些可以调用 Lambda,因此它是自动的(但请注意,更改仅在流中出现一次,设置 DLQ 以防您的 Lambda 失败)。这种方法可以很好地扩展,而且也很容易进化。如果需要,您可以根据需要将事件从流推送到 SQS 或 Kinesis、扇出等。