我可以确保AWS Lambo函数不并行处理AWS DynamoDB触发器吗?

时间:2016-08-02 11:08:13

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

我有一个场景,我有一个DynamoDB表,其中包含一个AWS Lambda函数的触发器(流)。

我想将DynamoDB用作事件存储,并使用Lambda函数维护数据的投影/聚合视图/读取视图。

我需要确保当我在DynamoDB中保存CreateEntity事件时,然后在我保存UpdateEntity之后,Lambda函数将在之前处理CreateEntity事件。 UpdateEntity事件。

我的理解是,触发器与Lambda的并行性取决于DynamoDB流所包含的Shards的数量。因此,如果Lambda函数使用的DynamoDB Stream有2个分片,一个事件在Shard1上运行,另一个事件在Shard2上运行,那么它们可以由Lambda函数的两个实例并行处理。

因此,如果CreateEntity事件在Shard1上,UpdateEntity在Shard2上,那么如果Shard1或Lambda函数实例由于某种原因很慢,那么Shard2中的UpdateEntity事件可能会被处理第一。这意味着它无法添加到投影中,因为没有首先创建实体。

我的理解是否正确?

有没有办法确保事件仅由Lambda函数的一个实例处理,以便我可以确保处理消息的顺序?

或者我必须使用除Lambda之外的其他东西吗?例如,使用我自己的应用程序将DynamoDB流式传输到Kinesis,我可以确保只运行一个应用程序实例,并确保以这种方式进行排序。

1 个答案:

答案 0 :(得分:0)

这部分是正确的

如果你是CreateEntity X,然后是UpdateEntity X,那么在几乎所有的情况下。它将在同一个分片上发生(实体根据其复合键在分片上分割)。

唯一不适用的情况是当你的实体被碎片分割时,只有当你拥有少量的独特实体时,才会发生这种情况。如果你在这种情况下那么你做错了什么..

所以在你的情况下确保......