Aws lambda 读取AWS Dynamodb流

Aws lambda 读取AWS Dynamodb流,aws-lambda,amazon-dynamodb-streams,Aws Lambda,Amazon Dynamodb Streams,我想使用DynamoDB流在S3上进行增量DynamoDB备份。我有一个lambda,它读取dynamodb流并将文件写入S3。为了标记已读碎片,我已将ExclusiveStartShardie登录到配置文件中 我所做的是: 描述流(使用记录的ExclusiveStartShardId) 获取流的碎片 对于所有关闭的(具有EndingSequenceNumber)碎片,我执行以下操作: 获取特定碎片的碎片迭代器(碎片迭代器类型:'TRIM_HORIZON') 迭代碎片并获取记录,直到NextS

我想使用DynamoDB流在S3上进行增量DynamoDB备份。我有一个lambda,它读取dynamodb流并将文件写入S3。为了标记已读碎片,我已将ExclusiveStartShardie登录到配置文件中

我所做的是:

  • 描述流(使用记录的ExclusiveStartShardId)
  • 获取流的碎片
  • 对于所有关闭的(具有EndingSequenceNumber)碎片,我执行以下操作:
    • 获取特定碎片的碎片迭代器(碎片迭代器类型:'TRIM_HORIZON')
    • 迭代碎片并获取记录,直到NextShardIterator变为null
  • 这里的问题是,我只读取已关闭的碎片,为了获得新记录,我必须等待(不确定的时间)它被关闭

    似乎最后一个碎片通常处于打开状态(具有EndingSequenceNumber)。如果我从上面的伪代码中删除对EndingSequenceNumber的检查,我将以无限循环结束,因为当我点击最后一个碎片时,总是显示NextShare迭代器。我也无法检查获取的项目是否为0,因为碎片中可能存在“间隙”

    在本教程中,numChanges用于停止无限循环

    在这种情况下,最好的方法是什么


    我还发现了一个类似的问题:。很遗憾,我找不到问题的答案。

    为什么不将DynamoDB流作为Lambda函数的事件源附加?然后Lambda将负责轮询流并在必要时调用您的函数。有关详细信息,请参阅。

    是否已将DynamoDB流设置为Lambda函数的事件源?根据您的描述,这听起来像是您试图自己对流进行轮询。my lambda的事件源是Scheduled event:hourevent(每小时执行一次)。当lambda被执行时,我试图从某个“检查点”读取流并备份新数据。但是这样,lambda函数将在DynamoDB中的每次数据修改中执行。这意味着我应该创建许多备份文件,即使批大小很大/或者我应该在s3上读取然后写入文件,这是一个昂贵且耗时的操作。您可以将批大小控制在最大10000。因此,您的Lambda函数不一定会在每次修改时被调用。但据我所知,Lambda在每次修改/插入时都会被调用,并且当同时发生两个或多个修改时会使用批大小。换句话说,如果您在10秒内进行了修改/插入,并且批大小为100,lambda函数将在10秒内执行(忽略批大小)。@garnaat lambda轮询DynamoDB流的频率是多少。可以配置该值吗?从Lambda开始可能很容易(也是个好主意),但在规模上会变得更昂贵。