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

Run python code on AWS service periodically

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

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

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

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

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

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

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

希望这对您有所帮助!

使用 EC2 或 Fargate 可能有点矫枉过正。创建一个简单的 AWS Glue job triggered by a Lambda function (running once per day) to do this (pull from S3, open selected files (if required), do some calculations on the files contents, then push results back to S3) using Python and the AWS boto3 库(以及其他标准 Python 文件读取库,如有必要)很可能是最简单的方法。

.

祝你好运!