【问题标题】:How to have more than two DynamoDB Streams that trigger lambdas如何拥有两个以上触发 lambda 的 DynamoDB 流
【发布时间】:2017-05-31 16:12:24
【问题描述】:
我们有一个 dynamoDB 表,其中有两个进程读取它(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但要知道 AWS 强烈建议同时阅读器不超过两个(我假设添加第三个 lambda 触发器会使我们的阅读器数量增加到 3 个?)。我们如何添加第三个服务来利用 DynamoDB 流而不影响性能?
我很早的想法是用一个将流记录放在 SQS 触发器 SNS 上的 lambda 替换这两个 lambda,该 SNS 会提醒订阅该主题的任何 lambda,然后他们可以对流记录执行操作。
【问题讨论】:
标签:
amazon-web-services
amazon-dynamodb
aws-lambda
amazon-dynamodb-streams
【解决方案1】:
我将只有一个在 dynamoDB 流上触发的瘦 lambda,并让该 lambda 调用您的其他 3 个“实际”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 之类的东西。
【解决方案2】:
您的观察是正确的,因为您的架构转向 Pub-Sub 模型,使用 SNS 主题发布流消息通知,而订阅者收听主题是有意义的。