在AWS EC2上安排作业

thr*_*eez 14 cron jobs amazon-ec2 amazon-web-services elastic-map-reduce

我有一个在AWS EC2上运行的网站.我需要创建一个夜间作业,生成站点地图文件并将文件上传到各种浏览器.我在AWS上寻找一个允许此功能的实用程序.我考虑过以下几点:

1)生成对Web服务器的请求,以触发它执行此任务

  • 我不喜欢这种方法,因为它占用服务器线程并在主机上使用cpu周期

2)在运行Web服务器的计算机上创建一个cron作业以执行此任务

  • 同样,我不喜欢这种方法,因为它需要cpu周期远离Web服务器

3)创建另一个EC2实例并设置一个cron作业来运行该任务

  • 这解决了Web服务器资源问题,但为什么要支付额外的EC2实例来运行作业<5分钟?浪费钱!

还有其他选择吗?这是ElasticMapReduce的工作吗?

Eri*_*ond 16

如果我在你的鞋子里,我可能会首先尝试在退潮时每天晚上在网络服务器上运行cron作业并监控资源使用情况,以确保它不会干扰Web服务器.

如果你发现它不能很好地运行,或者你对你的架构的优雅有很高的标准(我可以欣赏它),那么你可能需要运行一个单独的实例.

我同意,每天24小时运行一个实例似乎是浪费,你只需要每晚运行一次.

这是一个方法:主计算机上的cron作业(当前是Web服务器)可以启动一个新实例来运行任务.它可以传入在实例启动时运行的用户数据脚本,并且实例可以在完成任务时将自身关闭(其中instance-initiated-shutdown-behavior设置为"terminate").

不幸的是,这忽略了您强制分离关注点的愿望,当您开始扩展到多个Web服务器时,它变得复杂,并且它需要您的Web服务器处于活动状态才能运行作业.

几个月前,我提出了一种不同的方法来运行cron计划中的实例,完全依赖于现有的AWS功能,并且不需要运行其他服务器.

基本思路是使用亚马逊的Auto Scaling,并在每晚的特定时间将群组从"0"缩放到"1".当作业完成时,实例可以自行终止,并且Auto Scaling可以在稍后清理以确保终止.

我在本文中提供了更多详细信息和一个工作示例:

使用Auto Scaling在循环计划上运行EC2实例
http://alestic.com/2011/11/ec2-schedule-instance

  • 嗯,这似乎很多只是为了一个简单的工作而跳过箍.在我看来,亚马逊需要解决的问题是:在任何机器上运行任意命令行作业的类似cron的服务.他们可以根据使用的CPU +内存资源收费.感谢您的回答. (2认同)

use*_*905 9

亚马逊刚刚发布了[1] Elastic Beanstalk的新功能.您现在可以创建一个包含cron.yaml的工作线程环境,该环境配置使用CRON语法调用URL的调度任务:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers的.html#工人periodictasks

[1] http://aws.amazon.com/about-aws/whats-new/2015/02/17/aws-elastic-beanstalk-supports-environment-cloning-periodic-tasks-and-1-click-iam -role创作/