2012-07-23 77 views
51

目前我在亚马逊的一台服务器上放置了所有的cronjob。我想消除这个单点故障,并将我的所有任务公开为Web服务。我想将VPC ELB背后的服务暴露给几个将在调用时运行这些任务的服务器。在没有cron的情况下在AWS中运行计划任务

亚马逊(AWS)提供的服务是否可以按计划的间隔运行重复作业(真正称为web服务)?我真的很希望能够在时间/日期规格方面保持cron功能,但将驱动程序的HA(适时调用端点的东西)用于AWS。

我喜欢SQS如何提供Web端点,但从我可以告诉你无法安排它们。 SWF似乎也不太合适。

回答

53

AWS在其2015年重新在LAMBDA预定功能announced支持:发明了会议。通过此功能,用户可以使用类似cron的语法按计划执行Lambda函数。使用Python执行预定事件的Lambda docs show an example。截至2016年2月,Lambda函数可以访问VPC内的资源。

目前,该计划的拉姆达可以运行在1分钟(同cron的,但不能作为细粒度的systemd定时器)的最小分辨率。

Lambder项目有助于简化LAMBDA上使用的预定功能。

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


原始答案,为后人保存。

正如埃里克·哈蒙德等人所指出的,有计划任务没有本地AWS服务。在其他答案中只提到了解决方法和一半解决方案。

回顾一下当前选项:

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

+0

好的,谢谢你提供更新的细节。希望亚马逊正在开发一项新的服务,以便在未来解决这个问题。 – thatidiotguy 2015-01-20 15:23:13

+2

@thatidiotguy如果你没有看到公告,AWS LAMBDA现在解决了这一空白。相应地更新答案。 – 2015-10-11 02:05:56

+2

LAMBDA不必做的工作,如果你使用的lambda来创建可以触发你的服务器之一工作的SQS,你可以避开不能够在一个VPC运行LAMBDA的问题。 – ThomasRedstone 2015-10-27 08:30:11

7

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

这是人们(包括我)在使用AWS设计体系结构时不断提及的几个单点故障之一。在亚马逊通过服务解决它之前,这是我发布的一些黑客,它被一些公司积极使用。

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

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

你可以有实例在启动时自动运行的过程。

如果您不知道作业将持续多久,您可以进行设置,以便在作业完成时终止作业。

这是我写了一篇文章,通过所需的确切命令走到此设置:使用自动缩放
http://alestic.com/2011/11/ec2-schedule-instance

一个重复计划

运行EC2实例启动整个实例只是启动一系列工作似乎有点过分,但如果它是一个t1.micro,那么它只需花费几个便士。

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

+0

这将工作一个cron。但是当你有几个这样的作业在不同的时间间隔运行时,它会增加复杂性和成本。 – Wasif 2012-07-24 05:35:46

+0

是的,我同意埃里克。这是我遇到的最常见的问题之一,他们有很多好的服务,但这是AWS真正缺乏的一件事。这并不是说任何其他云提供商都提供了更好的选择。 – bwight 2012-07-24 14:36:31

+0

是的我曾经想过做类似的事情,但它不像我需要/想要的那样健壮。好奇的是,AWS用户愿意为软件付费来解决这个问题吗?我知道我可以做出一些具有特定整合特性的东西,只是想知道它是否值得投入时间/美元。我想定价/巴士模型将沿着pingdom.com – rynop 2012-07-24 14:45:08

3

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

任务运行是一个任务代理应用程序,调查AWS数据管道 计划任务,并在Amazon EC2实例,亚马逊 EMR集群执行它们,或其他计算资源,因此报告状态如此。根据您的应用程序,你可以选择:

  • 允许AWS数据管道安装和操作,它会自动管理 计算资源管理一个或多个任务运行 应用为您服务。在这种情况下,您不需要按照本节所述安装或配置任务执行器。这是建议的 配置。

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

  • 开发并安装自定义任务代理而不是任务运行程序。这样做的过程将取决于 自定义任务代理的实现。

+0

取消标记为正确。在终于有时间真正研究这个问题之后,数据管道似乎无法解决我的具体问题。它适用于设置非变量调度。任务,如每天备份发电机表。一个需要大量(数千)不同工作(称为活动)的系统在不同的时间以不同的“参数”运行,IMO将无法承受。 – rynop 2014-03-04 20:21:22

-1

的AWS弹性负载均衡器将ping您的情况,以检查它们是健康的。您可以将您的类似cron的任务添加到ELB正在ping的脚本中,并且它将非常有规律地执行。

你会希望让每个任务执行的次数适量,并在合适的时间间隔增加一些逻辑,但是这可能与跟踪执行数据库表来实现。每次ELB ping你的服务器时,你的服务器都会检查数据库,看看是否有任何工作正在等待,然后执行那个工作。

如果脚本时间过长要执行的ELB就会超时,所以不造成这样一种情况你ELB健康检查将多少秒来处理后台任务是很重要的。为了克服这个问题,您可以使用AWS Simple Notification Service。您的ELB健康检查脚本可以简单地将消息发布到SNS主题,然后该主题可以通过HTTP请求将消息发送到您的Web服务器。

换句话说: ELB坪您的EC2实例... EC2实例检查待处理的作业,并发送一条消息给SNS一旦发现任何... SNS通过HTTP ... 的HTTP通知您的应用程序从SNS电话是什么实际处理cron作业

+4

在机器上设置Cron,Chronos或Quartz会更简单。 – eSniff 2014-03-12 20:23:18

+1

是的,好点。无论是ELB还是cron经常发射都无关紧要。你是对的。我的答案太复杂了。 :-) – 2014-10-22 17:55:16

3

亚马逊去年为NodeJS推出了Lambda,yesterday亚马逊增加了功能调度功能,VPC支持和Python支持。

通过利用计划功能 - 可以实现CRON的正确替代。

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

enter image description here

+0

感谢您的使用预定功能有什么不利之处? – 2016-06-28 12:30:34

+0

预定功能? @AdegokeObasa能否详细说明计划函数的含义? – 2016-06-28 18:13:56

+0

对不起,我的意思安排的活动 – 2016-06-28 18:20:17

7

介绍Events in AWS Cloudwatch

您可以通过安排分钟,小时,天或使用使用控制台和不LAMBDA或任何编程cron表达式。

我刚刚安排了我的ASP.net WEB API(HTTP Post),使用SNS HTTP端点来执行每一分钟,它的工作完美。

enter image description here

+0

这对调用Lambda函数来说似乎很棒。 – Athar 2017-04-23 12:24:29

+0

@Athar是的,这是。我在https://www.agenty.com的制作中使用了这个功能 – Vicky 2017-06-30 03:12:02

相关问题