【问题标题】:How to schedule a python script to run at scheduled intervals in aws如何安排python脚本在aws中按预定时间间隔运行
【发布时间】:2020-06-10 08:09:43
【问题描述】:

当前场景:我们正在使用一些 java 代码处理 40M 记录并将它们作为 csv 文件上传到 s3 存储桶。

未来:我们希望将此代码移动到 AWS,为此我们希望有一个 python 脚本来处理记录并将它们作为 csv 文件加载到 aws-s3 存储桶中。 你能建议最好的方法,它可以触发脚本和处理数据吗? 我们希望避免在服务器中使用 EC2 和托管 python 脚本。我们希望将其作为无服务器服务。

我的方法: 我想用 AWS-Glue 来做这件事,使用触发器(自动/基于时间)来启动作业,并将我的代码放在作业内的脚本中。

这是一个好方法吗?

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    您可以使用 AWS Fargate,它可以与 Lambda 集成 考虑到 Lambda 的最大执行时间是 15 分钟,所以你 应该使用 Fargate

    更多细节 https://serverless.com/blog/serverless-application-for-long-running-process-fargate-lambda/

    你也可以使用AWS Event Rule来安排它

    寻找解决方案总是存在的。但是有好的做法和坏的做法。

    如果我告诉你,你可以只使用 AWS lambda 和 AWS EventRule, 和 SQS 听起来如何。有趣吗?

    简而言之,您可以做到这一点。跟踪 lambda 中消耗的时间,当达到 14 分钟时,向 SQS 发送一条消息,指示您处理的行号,将处理后的文件上传到 s3,然后退出。使用该 SQS 再次触发 lambda,将一些消息保留为 30 秒以再次调用相同的 lambda 并从该行号开始。一旦所有处理完成,您将在 S3 中处理多个文件,使用另一个 lambda 和 SQS 将它们合并为一个。 这不是一个坏习惯,但在我看来不太好,Happy?

    【讨论】:

    • 感谢 Asfar 的回答,那么您是希望我使用 fargate 将代码作为包放入容器中并与 lamda 函数集成,还是我们可以直接使用 AWS 事件规则来安排 Fargate 打包代码?
    • 它是你的选择,但理想情况下,Fargate 可以直接从事件规则中调用,所以为什么要使用 lambda(那将是额外的)
    • 我们可以用 lamda 阶跃函数做到这一点吗?或任何其他创建容器的方法?
    • 已编辑答案,请参阅
    • 感谢您提供详细信息...所以简而言之.. 与 fargate 一起去很好:-)
    【解决方案2】:

    您可以使用Cloudwatch Event rule 定期调用您定义的时间表并将您的 lambda 函数作为它的目标。这是 AWS Docs 中的 tutorial 说明如何操作。

    【讨论】:

    • 我的 python 代码必须获取 40+ 百万条数据记录并将其清理并作为 csv 文件上传到 s3 存储桶,那么 lamda 函数会直接处理该卷吗?
    • 您的问题是关于按计划触发脚本。为了处理这样的数量,我认为 Lambda 不会以 15 分钟的执行时间限制来做到这一点。您的脚本使用服务器处理记录需要多长时间?
    • 您的 java 代码是否部署到 lambda?如果是这样,那么您可以编写一个 Python 脚本,使用 CloudWatch 事件规则定期调用此 lambda。您的 python 脚本可以继续调用 lambda 来缓存数据。我在我的项目中做同样的事情。我已经计算了增量更改,即,如果我要缓存的总记录是 100k,并且在 lambda 保持不变的 15 分钟时间内缓存了 10k 条记录,那么我计算差异(总 - 缓存)和下一个当我的 python 脚本触发 lambda 时,它只会缓存差异。
    • @WalidK,目前我们的 java 代码正在使用 mule 服务器和 java 流概念来处理记录并将输出文件准备为 csv 并上传到 aws s3 存储桶。现在我们想将此处理迁移到 aws
    • @nrai,我当前的代码不在 aws 中。它只是使用 aws s3 存储桶来存储输出的 csv 文件。
    猜你喜欢
    • 2013-11-27
    • 2019-12-23
    • 2020-12-13
    • 2016-09-29
    • 2019-01-19
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多