我们有一个 dynamoDB 表,它有两个从中读取的进程(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但要知道 AWS 强烈建议同时阅读器不超过两个(我假设添加第三个 lambda 触发器会使我们的阅读器数量增加到 3 个?)。我们如何添加能够利用 DynamoDB 流而不影响性能的第三个服务?
我很早的想法是用一个将流记录放在 SQS 上的 lambda 替换这两个 lambda,SNS 会提醒订阅该主题的任何 lambda,然后他们可以对流记录执行操作。
我们有一个 dynamoDB 表,它有两个从中读取的进程(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但要知道 AWS 强烈建议同时阅读器不超过两个(我假设添加第三个 lambda 触发器会使我们的阅读器数量增加到 3 个?)。我们如何添加能够利用 DynamoDB 流而不影响性能的第三个服务?
我很早的想法是用一个将流记录放在 SQS 上的 lambda 替换这两个 lambda,SNS 会提醒订阅该主题的任何 lambda,然后他们可以对流记录执行操作。
您的观察是正确的,因为您的架构转向 Pub-Sub 模型,因此使用 SNS 主题发布流消息通知,而订阅者收听主题是有意义的。
我将只有一个在 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 之类的东西。