Python 脚本作为 AWS S3 存储桶上的 Cron
Posted
技术标签:
【中文标题】Python 脚本作为 AWS S3 存储桶上的 Cron【英文标题】:Python Script as a Cron on AWS S3 buckets 【发布时间】:2020-10-21 02:36:03 【问题描述】:我有一个 python 脚本,可以将文件从一个 S3 存储桶复制到另一个 S3 存储桶。该脚本需要在每个星期日的某个特定时间运行。我正在阅读一些文章和答案,所以我尝试使用 AWS lambda + Cloudwatch 事件。此文件运行至少 30 分钟。由于 Lambda 最多只能运行 15 分钟,它是否仍然适用于 Lambda。或者还有其他方法吗?我可以创建一个 EC2 盒子并将其作为 Cron 运行,但这会很昂贵。还是其他标准方式?
【问题讨论】:
aws.amazon.com/batch 【参考方案1】:更合适的方式是使用aws glue python shell job
,因为它在无服务器保护伞下,您将随时付费。
因此,您只需按代码运行的时间付费。 此外,您不需要为此管理 EC2。这就像一个扩展的 lambda。
【讨论】:
【参考方案2】:您当然可以将 Amazon EC2 用于长时间运行的批处理作业。
t3.micro
Linux 实例的成本为 $0.0104 per hour
,t3.nano
是该价格的一半,按秒收费。
只需在用户数据脚本末尾添加一个命令即可关闭实例:
sudo shutdown now -h
如果您使用Shutdown Behavior = Terminate
启动实例,则该实例将自行终止。
【讨论】:
【参考方案3】:不幸的是,lambda 15 分钟的执行时间是一个硬停止,所以它不适合这个大爆炸的用例。
您可以使用多个 lambda 调用一次遍历一个对象并移动它们。但是,您需要一个 DynamoDB 表(或类似的表)来跟踪已移动的内容和未移动的内容。
另外两个选项是:
S3 复制将使一个存储桶与另一个存储桶保持同步。 S3 批处理操作或者如果它的数据文件?您始终可以使用 AWS 胶水。
【讨论】:
【参考方案4】:如果两个桶应该保持同步,即桶#1中的所有文件最终应该同步到桶#2,那么有各种replication options in S3。
否则看S3 Batch Operations。您可以从 S3 Inventory 导出需要复制的文件列表,这将为您提供有关文件的其他上下文,例如上传日期/时间、大小、存储类等。
【讨论】:
是的,这就是我第一次尝试的方法,但是作为业务需求,过去 7 天更改的文件和一些附加条件需要编写一个 python 文件来根据要求处理数据。由于某些情况,我无法使用复制、aws s3 同步和库存。以上是关于Python 脚本作为 AWS S3 存储桶上的 Cron的主要内容,如果未能解决你的问题,请参考以下文章
尽管政策允许我的站点引荐来源网址,但 S3 存储桶上的 copyObject 访问被拒绝
Terraform - 同一个存储桶上的多个 aws_s3_bucket_notification 触发器