如何拥有两个以上触发 lambda 的 DynamoDB 流
How to have more than two DynamoDB Streams that trigger lambdas
我们有一个 dynamoDB table,有两个进程从中读取数据(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但我们知道 AWS 强烈建议同时读取的读者不超过两个(我假设添加第三个 lambda 触发器会使我们的读者数量增加到 3 个?)。我们如何添加能够在不影响性能的情况下使用 DynamoDB 流的第三项服务?
我很早就想到用一个将流记录放在 SQS 上的 lambda 替换这两个 lambda 触发 SNS,提醒任何订阅该主题的 lambda,然后他们可以用流记录做这些事情。
您的观察是正确的,因为您的架构正在转向 Pub-Sub 模型,所以使用 SNS 主题发布流消息通知,同时订阅者收听主题是有意义的。
我将只有一个在 dynamoDB 流上触发的瘦 lambda,并且让该 lambda 只调用您的其他 3 个 "actual" lambda。您可以配置死信 SQS 队列,但除此之外我会跳过使用 SQS 或 SNS 进行任何操作。
在 python lambdas 中,触发函数是这样的:
import boto3
lambda_client = boto3.client('lambda', region_name='your-region')
def lambda_handler(event, context):
lambda_client.invoke(FunctionName='function-name-1', InvocationType='Event', Payload=event)
lambda_client.invoke(FunctionName='function-name-2', InvocationType='Event', Payload=event)
lambda_client.invoke(FunctionName='function-name-3', InvocationType='Event', Payload=event)
return 'Replication completed'
如果您开始有太多函数要调用,请考虑将其迁移到 Kinesis 之类的东西。
我们有一个 dynamoDB table,有两个进程从中读取数据(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但我们知道 AWS 强烈建议同时读取的读者不超过两个(我假设添加第三个 lambda 触发器会使我们的读者数量增加到 3 个?)。我们如何添加能够在不影响性能的情况下使用 DynamoDB 流的第三项服务?
我很早就想到用一个将流记录放在 SQS 上的 lambda 替换这两个 lambda 触发 SNS,提醒任何订阅该主题的 lambda,然后他们可以用流记录做这些事情。
您的观察是正确的,因为您的架构正在转向 Pub-Sub 模型,所以使用 SNS 主题发布流消息通知,同时订阅者收听主题是有意义的。
我将只有一个在 dynamoDB 流上触发的瘦 lambda,并且让该 lambda 只调用您的其他 3 个 "actual" lambda。您可以配置死信 SQS 队列,但除此之外我会跳过使用 SQS 或 SNS 进行任何操作。
在 python lambdas 中,触发函数是这样的:
import boto3
lambda_client = boto3.client('lambda', region_name='your-region')
def lambda_handler(event, context):
lambda_client.invoke(FunctionName='function-name-1', InvocationType='Event', Payload=event)
lambda_client.invoke(FunctionName='function-name-2', InvocationType='Event', Payload=event)
lambda_client.invoke(FunctionName='function-name-3', InvocationType='Event', Payload=event)
return 'Replication completed'
如果您开始有太多函数要调用,请考虑将其迁移到 Kinesis 之类的东西。