Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 周期性任务每30分钟处理存储在DynamoDB中的80k个任务_Amazon Web Services_Aws Lambda_Cron_Amazon Dynamodb_Amazon Cloudwatch - Fatal编程技术网

Amazon web services 周期性任务每30分钟处理存储在DynamoDB中的80k个任务

Amazon web services 周期性任务每30分钟处理存储在DynamoDB中的80k个任务,amazon-web-services,aws-lambda,cron,amazon-dynamodb,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Cron,Amazon Dynamodb,Amazon Cloudwatch,我一直在研究如何实现一个循环任务来处理dynamoDB中存储的大量项目。在线进行一些研究后,其中一个选项涉及使用CloudWatch事件每30分钟触发一个事件,然后该事件触发lambda A,lambda然后读取所有项目,将其发布到SQS,并让多个lambda B实例从SQS消费并并行处理它们。(处理时间约为200毫秒) 但问题是lambda有15分钟的时间限制,一次从DynamoDB读取所有80k任务似乎是不可行的 是否有人能够提供有关如何执行此操作的建议?如果AWS Lambda函数运行时间

我一直在研究如何实现一个循环任务来处理dynamoDB中存储的大量项目。在线进行一些研究后,其中一个选项涉及使用CloudWatch事件每30分钟触发一个事件,然后该事件触发lambda A,lambda然后读取所有项目,将其发布到SQS,并让多个lambda B实例从SQS消费并并行处理它们。(处理时间约为200毫秒)

但问题是lambda有15分钟的时间限制,一次从DynamoDB读取所有80k任务似乎是不可行的


是否有人能够提供有关如何执行此操作的建议?

如果AWS Lambda函数运行时间过长,您可以使用用户数据启动脚本启动Amazon EC2实例来执行类似的功能。一旦完成任务,它就可以自行终止。(设置启动行为=终止,然后向操作系统发出关闭命令。)

但是,您是说此任务需要每30分钟完成一次,但是Lambda函数可能需要超过15分钟才能将所有内容推送到SQS。这可能证明只要始终运行一个小型EC2实例,而不是每隔30分钟启动一个Lambda函数,就可以了。EC2实例可以使用cron作业来触发活动。价格将类似(~1c/小时)


另一个瓶颈可能是每30分钟读取80K项,这将导致DynamoDB的访问模式出现峰值。(每30分钟短时间大量使用一次)。这可能需要过度配置读取容量以确保其能够满足需求。

@john rotenstein分享了一个长期运行作业的解决方案,我个人会选择它作为可接受的解决方案:-)
我的答案将是对您的问题状态进行一个小的重构。

如果每30分钟触发一次Lambda,由于任务数量大,导致Lambda执行时间长,则减少单个Lambda的负载。
例如:

  • 更频繁地触发Lambda(例如每分钟一次)
  • 使用较小的任务批触发多个lambda

  • 顺便说一句,我假设您成批阅读DynamoDB。

    是全状态处理吗?如果是无状态的,您应该有多个lambda来构建您的处理逻辑。感谢您提出的解决方案!(我肯定会考虑到这一点。)我还考虑利用dynamodbttl终止(并删除)一个项目,该项目发出一个由SQS使用的事件。此实现的问题是,根据表的大小,可能会有长达48小时的延迟。基于此,10万件物品的最大延迟约为27分钟。