定期在 AWS 服务上运行 python 代码

问题描述

我需要定期在 aws 平台上运行一些 python 代码(可能每天一次)。程序工作是连接到 S3,从存储桶下载一些文件,做一些计算,将结果上传回 S3。该程序运行了大约 1 小时,因此我无法使用 Lambda 函数,因为它的最长执行时间为 900 秒(15 分钟)。

我正在考虑使用 EC2 来完成这项任务。我计划将 python 代码设置为启动并在 EC2 实例启动后立即执行它。一旦任务完成,它还会关闭实例。此 EC2 的定期重启将由 lambda 函数处理。

虽然这不是最好的方法,但我想知道 aws 平台(EC2 以外的服务)中的任何替代方案,可以最适合这项工作。

自从

解决方法

如果您正在寻找除 lambda 和 EC2(取决于它适合的场景)之外的其他解决方案,您可以使用 ECS (Fargate)

这是微服务或小任务的绝佳选择。您使用代码(Python、节点等)构建 Docker 映像,标记它,然后将映像推送到 AWS ECR。然后,您为此构建一个集群,并使用 cloudwatch 通过 Cloudwatch 安排任务,或者您可以使用 CLI 或其他 AWS 资源直接调用任务。

  • 您没有 lambda 那样的时间限制
  • 您也不必设置实例,因为您的依赖项由 Dockerfile 管理
  • 而且,如果需要,您可以利用附加到 ECS(20-30GB 根)的 EBS 卷并从中增加,还可以使用 EFS 处理任务。

我可以指出其他解决方案,但它们对于您计划的任务来说太复杂了,目标始终是为工作使用正确的服务

希望这会有所帮助!

,

使用 EC2 或 Fargate 可能会显得有些矫枉过正。创建一个由 Lambda 函数(每天运行一次)触发的简单 AWS Glue 作业来执行此操作(从 S3 拉取,打开选定的文件(如果需要),对文件内容进行一些计算,然后将结果推送回 S3 ) 使用 Python 和 AWS boto3 库(以及其他标准 Python 文件读取库,如有必要)很可能是您最简单的方法。

See this SO question for an example and solution

祝你好运!