目前,我在亚马逊中有一台服务器,我将所有cronjobs都放在其中。我想消除这一单点故障,并将所有任务公开为Web服务。我想将VPC ELB背后的服务提供给一些服务器,这些服务器将在调用时运行任务。
Amazon(AWS)是否提供一些可以按计划的间隔运行重复发生的工作(真正称为Web服务)的服务?我真的很想能够在时间/日期规范方面保留cron功能,但是将驱动程序的HA(在正确的时间调用端点的东西)分配给AWS。
我喜欢SQS如何提供Web端点,但是据我所知,您无法安排它们。SWF似乎也不适合。
目前,我在亚马逊中有一台服务器,我将所有cronjobs都放在其中。我想消除这一单点故障,并将所有任务公开为Web服务。我想将VPC ELB背后的服务提供给一些服务器,这些服务器将在调用时运行任务。
Amazon(AWS)是否提供一些可以按计划的间隔运行重复发生的工作(真正称为Web服务)的服务?我真的很想能够在时间/日期规范方面保留cron功能,但是将驱动程序的HA(在正确的时间调用端点的东西)分配给AWS。
我喜欢SQS如何提供Web端点,但是据我所知,您无法安排它们。SWF似乎也不适合。
Answers:
AWS在其2015 re:Invent会议上宣布了对Lambda中计划功能的支持。使用此功能,用户可以使用类似cron的语法按计划执行Lambda函数。该LAMBDA文档显示的示例使用Python来执行预定的事件。
当前,计划的lambda可以运行的最低分辨率为1分钟(与cron相同,但不如systemd计时器细粒度)。
该Lambder项目有助于简化LAMBDA上使用的预定功能。
λGordon的cron示例可能具有部署调度的lambda函数的最简单接口。
原始答案,为后代保存。
正如Eric Hammond和其他人所说,没有用于计划任务的本机AWS服务。如其他答案中所述,只有解决方法和一半解决方案。
回顾一下当前选项:
希望很快会有更好的解决方案。
亚马逊(AWS)提供了一些可以按计划的间隔运行重复性工作的服务吗?
这是人们(包括我)在使用AWS设计架构时经常提到的几个单点故障之一。在亚马逊通过服务解决该问题之前,这是我发布的一种黑客,一些公司正在积极使用。
AWS Auto Scaling可以使用cron格式指定的定期计划运行和终止实例。
您可以让实例在启动时自动运行进程。
如果您不知道工作将持续多长时间,则可以进行设置,以使工作在实例完成时终止。
这是我写的一篇文章,其中详细介绍了设置此命令所需的命令:
使用Auto Scaling按定期计划运行EC2实例
http://alestic.com/2011/11/ec2-schedule-instance
开始一个完整的实例只是为了开始一系列工作,似乎有点过头了,但是如果它是t1.micro,那么它只需花费几美分。
t1.micro也不用做实际的工作。您的实例可以将消息注入SQS或通过SNS,以便其他冗余服务器接收任务。
如果您需要脚本在shell中而不是在Apache中运行,则此方法将无效。
这样的声音可能对您有用: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实例或物理服务器之类的计算资源上手动安装和配置Task Runner。为此,请使用本节中的步骤。
开发并安装自定义任务代理,而不是Task Runner。这样做的过程将取决于自定义任务代理的实现。
亚马逊去年为NodeJS引入了Lambda,昨天亚马逊又添加了计划功能,VPC支持和Python支持功能。
通过利用预定功能-可以适当替代CRON。
更多信息-http: //aws.amazon.com/lambda/details/
看起来这是AWS BeanStalk中一个相对较新的选项:
基本上,它们的行为类似于常规的SQS接收器,但是它们是按计划时间表进行调用的,而不是响应SQS消息。
SWF是来自AWS的Web服务,可用于计划任务。大多数工作都用于指定任务和时间表。
http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html是针对SWF编写的可伸缩调度程序。
CloudWatch Events很棒,但是数量有限。如果需要缩放比例并愿意牺牲精度,则可以使用DynamoDB的TTL作为计时器。
想法是将项目放入TTL设置为运行任务所需时间的DynamoDB表中。DynamoDB将在指定时间(有效期48小时内)左右的某个位置删除这些项目。这些已删除的项目将出现在与表关联的DynamoDB流中。Lambda函数可以侦听流并在删除后采取适当的措施。
在theburningmonk.com的“ DynamoDB TTL作为即席调度机制”中了解更多信息。
截至2020年8月,亚马逊已将Lambda / CloudWatch事件移动到名为EventBridge(https://aws.amazon.com/eventbridge/)的服务中。经过对该问题的大部分回答后,它于2019年7月启动。
AWS Elastic Load Balancer将对您的实例执行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调用实际上是处理计划工作