在没有cron的情况下在AWS中运行计划任务

目前我有一台服务器在亚马逊,我把我所有的cronjobs。 我想消除这个单点故障,并将我的所有任务公开为Web服务。 我想将VPC ELB背后的服务暴露给几个将在调用时运行这些任务的服务器。

亚马逊(AWS)提供的服务是否可以按预定间隔运行重复作业(真正调用Web服务)? 我真的希望能够在时间/date规格方面保持cron的function,但是将AWS驱动程序的HA(在正确的时间调用端点的东西)消除了。

我喜欢SQS提供的Web端点,但从我能告诉你不能安排它们。 SWF似乎也不太合适。

AWS在2015年re:Invent会议上宣布支持Lambda的预定function。 使用此function,用户可以使用类似cron的语法按计划执行Lambda函数。 Lambda文档显示了使用Python执行预定事件的示例 。 截至2016年2月,Lambda函数可以访问VPC内的资源。

目前,预定的lambda可以运行的最小分辨率是1分钟(与cron相同,但不像systemd定时器那么细)。

Lambder项目有助于简化在Lambda上使用预定function。

λGordon的cron示例可能是部署预定的lambda函数的最简单的接口。


原来的答案,为后人保存。

正如Eric Hammond和其他人所说,对于计划任务,没有本地的AWS服务。 其他答案中提到的只有解决方法和一半解决scheme。

回顾当前的select:

  • 按照Eric Hammond所述,按计划启动和停止的单实例自动缩放组。
  • 使用一个简单的工作stream服务计时器 ,这是不直观的。 这个案例研究提到JPL使用SWF构build分布式cron,但是没有实现细节。 还有一个参考SWF代码示例中的代码示例。
  • 使用类似cronlock的东西来运行它。
  • 使用不可靠的城市时钟(UTC)来按计划运行Lambda函数。 请记住,Lambda目前无法访问VPC中的资源

希望有一个更好的解决scheme会很快出现。

亚马逊(AWS)提供的服务是否可以按预定间隔运行重复作业?

这是人们(包括我)在使用AWSdevise体系结构时不断提及的几个单点故障之一。 直到亚马逊解决它与服务,这是我已经发表的黑客,这是一些公司积极使用。

AWS Auto Scaling可以使用以cron格式指定的定期计划来运行和终止实例。

http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_PutScheduledUpdateGroupAction.html

您可以让该实例在启动时自动运行一个进程。

如果你不知道这个工作能持续多久,你可以设置一些事情,这样你的工作就可以在实例完成时终止。

这里是我写的一篇文章,通过确定需要的确切命令:

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

开始一个完整的实例来启动一系列的工作似乎有点过分,但如果是t1.micro,那么只需花费几个便士。

那t1.micro也不必做实际的工作。 您的实例可以将消息注入SQS或通过SNS,以便其他冗余服务器接收任务。

在AWS Cloudwatch中引入事件

您可以按分钟,每小时,每天或者使用控制台使用CRONexpression式,不使用Lambda或任何编程。

我只是使用SNS HTTP端点来安排我的ASP.net WEB API(HTTP Post)来执行每一分钟,并且完美地工作。

在这里输入图像说明

这是一个托pipe的第三方网站,可以定期在您的域名上调用预定脚本。

如果你需要脚本运行在shell中,而不是Apache,这将不起作用。

听起来像这样可能对你有用: http : //docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

Task Runner是一个任务代理应用程序,用于轮询AWS Data Pipeline以执行计划任务,并在Amazon EC2实例,Amazon EMR集群或其他计算资源上执行这些任务,从而报告状态。 根据您的应用程序,您可以select:

  • 允许AWS Data Pipeline在您自动pipe理的计算资源上为您安装和pipe理一个或多个Task Runner应用程序。 在这种情况下,您不需要按照本节所述安装或configurationTask Runner。 这是推荐的configuration。

  • 在计算资源(例如长时间运行的EC2实例或物理服务器)上手动安装和configurationTask Runner。 为此,请使用本节中的步骤。

  • 开发和安装一个自定义的任务代理,而不是任务亚军。 这样做的过程将取决于自定义任务代理的实现。

亚马逊去年为NodeJS引入了Lambda,亚马逊昨天添加了Scheduled Functions,VPC支持和Python支持function。

通过利用预定function – 可以实现CRON的正确替代。

更多信息 – http://aws.amazon.com/lambda/details/

在这里输入图像说明

看起来这是来自AWS BeanStalk的一个相对较新的选项:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

基本上,他们的行为就像普通的SQS接收者,但是他们被叫做cron时间表,而不是响应SQS消息。

SWF是来自AWS的Web服务,可用于计划任务。 大部分的工作是指定一个任务和一个时间表。

http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html是针对SWF编写的可伸缩调度程序。;

AWS Elastic Load Balancers会ping您的实例以检查它们是否健康。 您可以将您的类似cron的任务添加到ELB正在ping的脚本中,并且它将会非常有规律地执行。

你想添加一些逻辑,以便每个任务执行适当的时间和适当的时间间隔,但这可以通过跟踪执行的数据库表来完成。 每次ELB ping你的服务器,你的服务器都会检查数据库,看是否有任何工作正在等待,然后执行那个工作。

如果脚本执行时间过长,ELB将超时,因此,不要创buildELB运行状况检查需要几秒钟来处理cron任务的情况。 为了克服这个问题,您可以使用AWS Simple Notification Service。 您的ELB健康检查脚本可以简单地将消息发布到SNS主题,然后该主题可以通过HTTP请求将消息发送到您的Web服务器。

换句话说:ELB ping你的EC2实例… EC2实例检查待处理的作业,并发送一个消息到SNS,如果有的话… SNS通过HTTP通知你的应用程序…来自SNS的HTTP调用是实际处理cron工作