目前我在亚马逊有一台服务器,我放了所有的cronjobs。我想消除这一点故障,并将我的所有任务公开为Web服务。我想将VPC ELB背后的服务公开给几个在调用时运行任务的服务器。
Amazon(AWS)提供的某些服务是否可以按计划的时间间隔运行重复发生的作业(真正称为Web服务)?我真的希望能够在时间/日规范方面保留cron功能,但是将驱动程序的HA(在适当的时间调用端点的东西)分配给AWS。
我喜欢SQS如何提供网络端点,但我可以告诉你不能安排它们。 SWF似乎也不合适。
答案 0 :(得分:63)
AWS announced支持Lambda在2015 re:Invent大会上的预定功能。使用此功能,用户可以使用类似cron的语法按计划执行Lambda函数。使用Python执行预定事件的Lambda docs show an example。
目前,预定lambda可以运行的最小分辨率是1分钟(与cron相同,但不像systemd计时器那样精细)。
Lambder项目有助于简化Lambda上预定功能的使用。
λ Gordon's cron example可能是部署预定lambda函数的最简单的接口。
原始答案,为后代保存。
正如Eric Hammond和其他人所说,对于计划任务,没有本机AWS服务。其他答案中提到的只有解决方法和一半解决方案。
重温当前选项:
希望很快能有更好的解决方案。
答案 1 :(得分:11)
您可以按分钟,每小时,每天或使用控制台和没有Lambda或任何编程使用CRON表达式进行安排。
我只是使用SNS HTTP端点安排我的ASP.net WEB API(HTTP Post)每分钟执行一次,并且它完美运行。
答案 2 :(得分:7)
亚马逊(AWS)提供的某些服务是否可以按计划的时间间隔运行重复出现的作业?
这是人们(包括我)在使用AWS设计架构时不断提及的几个单点故障之一。在亚马逊通过服务解决它之前,我发布了一些被一些公司积极使用的黑客攻击。
AWS Auto Scaling可以使用以cron格式指定的定期计划运行和终止实例。
您可以让实例在启动时自动运行进程。
如果您不知道作业将持续多长时间,您可以进行设置,以便作业在完成后终止实例。
这是我写的一篇文章,其中介绍了设置此内容所需的确切命令:
使用Auto Scaling在循环计划上运行EC2实例
http://alestic.com/2011/11/ec2-schedule-instance
启动整个实例只是为了开始一组工作似乎有点像矫枉过正,但如果它是t1.micro,那么它只需花费几美分。
t1.micro也不必做实际的工作。您的实例可以将消息注入SQS或通过SNS,以便其他冗余服务器接收任务。
答案 3 :(得分:4)
This a hosted third party site that can regularly call scheduled scripts on your domain.
如果您需要在shell中运行脚本而不是Apache,那么这将不起作用。
答案 4 :(得分:3)
听起来这可能对您有用: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html
Task Runner是一个轮询AWS Data Pipeline的任务代理应用程序 对于计划任务,并在Amazon EC2实例,Amazon上执行它们 EMR集群或其他计算资源,报告状态 这样做。根据您的应用程序,您可以选择:
允许AWS Data Pipeline安装和管理一个或多个Task Runner 为您管理的计算资源上的应用程序 自动。在这种情况下,您无需安装或配置 任务管理器,如本节所述。这是推荐的 配置。
在计算资源上手动安装和配置Task Runner 例如长时间运行的EC2实例或物理服务器。为此, 使用本节中的步骤。
开发并安装自定义任务代理而不是任务运行器。该 这样做的程序将取决于实施 自定义任务代理。
答案 5 :(得分:3)
亚马逊去年为NodeJS推出了Lambda,yesterday亚马逊增加了预定功能,VPC支持和Python支持功能。
通过利用预定功能 - 可以实现CRON的正确替换。
答案 6 :(得分:1)
看起来这是来自AWS BeanStalk的相对较新的选项:
基本上,它们就像常规的SQS接收器一样,但它们是在cron调度上调用的,而不是响应SQS消息。
答案 7 :(得分:0)
SWF是来自AWS的Web服务,可用于安排任务。大部分工作都用于指定任务和时间表。
http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html是针对SWF编写的可伸缩调度程序。
答案 8 :(得分:0)
CloudWatch Events很棒,但是there is a limit on their number。如果您需要刻度并且愿意牺牲精度,可以使用DynamoDB's TTL作为计时器。
这个想法是将项目放入TTL设置为运行任务所需时间的DynamoDB表中。 DynamoDB将在指定时间(有效期48小时内)左右的某个位置删除这些项目。这些已删除的项目将出现在与表关联的DynamoDB流中。 Lambda函数可以侦听流并针对删除操作采取适当的措施。
在theburningmonk.com的“ DynamoDB TTL as an ad-hoc scheduling mechanism”中了解更多信息。
答案 9 :(得分:0)
截至2020年8月,亚马逊已将Lambda / CloudWatch事件移至名为 EventBridge (https://aws.amazon.com/eventbridge/)的服务。经过对该问题的大部分回答后,它于2019年7月启动。
答案 10 :(得分:-2)
AWS Elastic Load Balancers将ping您的实例以检查它们是否健康。您可以将类似cron的任务添加到ELB正在ping的脚本中,并且它将定期执行。
您需要添加一些逻辑,以便每个任务以适当的时间间隔执行,但这可以通过跟踪执行的数据库表来完成。每次ELB ping服务器时,服务器都会检查数据库以查看是否有任何作业挂起,然后执行该作业。
如果脚本执行时间太长,ELB将会超时,因此不要创建ELB运行状况检查需要很多秒才能处理cron任务的情况。要解决此问题,您可以使用AWS Simple Notification Service。您的ELB运行状况检查脚本可以简单地将消息发布到SNS主题,然后该主题可以通过HTTP请求将消息传递到您的Web服务器。
换句话说: ELB ping你的EC2实例...... EC2实例检查挂起的作业,如果找到任何作业,则向SNS发送消息... SNS通过HTTP通知您的应用... 来自SNS的HTTP调用实际上处理了cron作业