【问题标题】:What is the best way to run python scripts once per month in AWS?在 AWS 中每月运行一次 python 脚本的最佳方式是什么?
【发布时间】:2022-01-13 16:28:31
【问题描述】:

我需要在每个月的 20 号运行一个 python 脚本文件。此代码将读取 tsv 文件(存储在某处),然后调用费用注册 API 并将响应记录到文件并保存。处理后的 tsv 文件将被移动到处理后的文件夹中。 我不知道在 AWS 中实现此功能的最佳方式?

手动方法是:

  • 创建 EC2 实例,运行 python 脚本
  • 将 tsv 文件存储在 s3 上(我不知道处理文件上传问题的最佳方法)
  • 使用 lambda 在每月 20 日触发。

在 AWS 中实现此功能的最佳方式是什么? 实现文件存储和上传的最佳方式是什么?

【问题讨论】:

  • lambda 用于处理,cloudwatch 事件作为触发器,s3 作为存储。

标签: python amazon-s3 amazon-ec2 amazon-ecs script


【解决方案1】:

您可以在没有 Amazon EC2 实例的情况下执行此操作:

  • 创建一个 AWS Lambda 函数,该函数将执行该过程(调用 API 并记录响应)
  • 将所有持久性数据存储在 Amazon S3 存储桶中,并从那里下载/上传 Lambda 函数
  • 创建 CloudWatch Events 规则以在所需的时间间隔触发 AWS Lambda 函数

AWS Lambda 函数在 /tmp/ 目录中提供 512MB 的存储空间,因此您可以将 TSV 文件下载到那里,执行您的操作,然后将生成的文件上传回 S3。

您只需为 Lambda 函数实际运行的持续时间付费。

【讨论】:

  • 感谢@John。有人告诉我,AWS Lambda 限制页面声明函数超时为 900 秒(15 分钟)。所以如果在这个月的 20 号我有很多 tsv 文件/记录要处理,时间可能超过 15 分钟,可以吗?
  • 有没有办法自动将文件从本地上传到 S3?
  • @H.Dang 不是 John,但不幸的是,没有 - 15 分钟是硬性限制。我会在多个 Lambda 实例之间拆分文件,这样您可以在 15 分钟内获得它。尝试看看您可以在 15 分钟内处理多少个文件,然后将其批量处理。由于这是一次性的,你应该没问题 - 如果它开始超过一小时的处理时间,我会使用 EC2 现货实例。
  • @H.Dang 如果您有这么多文件要处理,为什么要等到每月 20 日才能处理它们?你能在它们到达时处理它们,而不是等到 20 日吗?最坏的情况是,您可以使用 Lambda 函数启动一个 Amazon EC2 实例,然后该实例可以进行处理。见:Auto-Stop EC2 instances when they finish a task - DEV Community
猜你喜欢
  • 2019-09-24
  • 2015-08-10
  • 1970-01-01
  • 2017-12-21
  • 2022-06-15
  • 2012-11-14
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多