2

我们有一个 dynamoDB 表,它有两个从中读取的进程(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但要知道 AWS 强烈建议同时阅读器不超过两个(我假设添加第三个 lambda 触发器会使我们的阅读器数量增加到 3 个?)。我们如何添加能够利用 DynamoDB 流而不影响性能的第三个服务?

我很早的想法是用一个将流记录放在 SQS 上的 lambda 替换这两个 lambda,SNS 会提醒订阅该主题的任何 lambda,然后他们可以对流记录执行操作。

4

2 回答 2

1

您的观察是正确的,因为您的架构转向 Pub-Sub 模型,因此使用 SNS 主题发布流消息通知,而订阅者收听主题是有意义的。

于 2017-06-01T01:40:48.707 回答
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 之类的东西。

于 2017-06-01T08:17:37.187 回答