如何使用两个以上的DynamoDB Streams来触发lambdas

时间:2017-05-31 16:12:25

标签: amazon-web-services amazon-dynamodb aws-lambda amazon-dynamodb-streams

我们有一个dynamoDB表,有两个进程读取它(两个lambdas,作为Lambda触发器)。我们现在需要添加第三个但是要知道AWS强烈建议不要有两个以上的同时读者(我假设添加第三个lambda触发器将我们的读者数增加到3个?)。我们如何添加能够在不影响性能的情况下使用DynamoDB流的第三个服务?

我早期的想法是将那两个lambdas替换为一个将流记录放在SQS触发器SNS上的SNS,该SNS警告任何订阅该主题的lambda,然后他们就可以对流记录进行处理。

2 个答案:

答案 0 :(得分:1)

您的观察是正确的,因为您的架构朝着Pub-Sub模式发展,使用SNS主题发布流消息通知是有意义的,而订阅者则倾听该主题。

答案 1 :(得分:1)

我只有一个在dynamoDB流上触发的瘦lambda,并让lambda只调用你的其他3个“实际”lambdas。您可以配置deadletter 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的内容。

相关问题