exécuter une tâche planifiée dans AWS sans cron

Actuellement, j'ai un seul serveur dans amazon où je mets tous mes cronjobs. Je veux éliminer ce point d'échec unique et exposer toutes mes tâches en tant que services web. Je voudrais exposer les services derrière un VPC ELB à quelques serveurs qui exécuteront les tâches lorsqu'ils sont appelés.

Y a-t-il un service offert par Amazon (AWS) qui peut exécuter un travail récurrent (appeler vraiment un service web) à intervalles réguliers? J'aimerais vraiment pouvoir garder la fonctionnalité cron en termes de temps / jour spécification, mais ferme le HA du pilote (chose qui appelle les points de terminaison au bon moment) à AWS.

J'aime la façon dont SQS offre des points de terminaison web, mais d'après ce que je peux dire, vous ne pouvez pas les planifier. SWF ne semble pas être un bon ajustement non plus.

55
demandé sur rynop 2012-07-23 20:02:21

9 réponses

AWS a annoncé la prise en charge de pour les fonctions planifiées dans Lambda lors de sa conférence re:Invent 2015. Avec cette fonctionnalité, les utilisateurs peuvent exécuter des fonctions Lambda sur une base planifiée en utilisant une syntaxe de type cron. Les documents Lambda montrent un exemple d'utilisation de Python pour effectuer des événements planifiés.

Actuellement, la résolution minimale à laquelle un lambda programmé peut s'exécuter est de 1 minute (identique à cron, mais pas aussi fine que les minuteries systemd).

Le projetLambder AIDE pour simplifier l'utilisation des fonctions planifiées sur Lambda.

L'exemple cron de Λ Gordon a peut-être l'interface la plus simple pour déployer des fonctions lambda planifiées.


réponse originale, enregistrée pour la postérité.

Comme Eric Hammond et d'autres l'ont déclaré, Il n'y a pas de service AWS natif pour les tâches planifiées. Il n'y a que des solutions de contournement et des demi-solutions comme mentionné dans d'autres réponses.

Pour récapituler les options actuelles:

  • Le groupe autoscale à instance unique qui démarre et s'arrête selon un calendrier, comme décrit par Eric Hammond.
  • utilisation d'une minuterie de service de flux de travail simple , qui n'est pas du tout intuitive. Cette étude de cas mentionne que JPL a utilisé SWF pour construire un cron distribué, mais il n'y a pas de détails d'implémentation. Il y a aussi une référence à un exemple de code enterré dans les échantillons de code SWF.
  • Exécutez vous-même en utilisant quelque chose comme cronlock.
  • utilisation quelque chose comme Horloge De Ville peu fiable (UTC) pour exécuter des fonctions Lambda sur un calendrier. Rappelez-vous que Lambda ne peut pas actuellement accéder aux ressources dans un VPC

Espérons qu'une meilleure solution viendra bientôt.

58
répondu Ben Whaley 2018-07-31 22:07:27

Y a-t-il un service offert par Amazon (AWS) qui peut exécuter un travail récurrent à intervalles réguliers?

C'est L'un des rares points d'échec que les gens (y compris moi) ne cessent de mentionner lors de la conception d'architectures avec AWS. Jusqu'à ce Qu'Amazon le résout avec un service, voici un hack que j'ai publié qui est activement utilisé par certaines entreprises.

AWS Auto Scaling peut exécuter et terminer des instances à l'aide d'une planification récurrente spécifiée dans le cron format.

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

Vous pouvez demander à l'instance d'exécuter automatiquement un processus au démarrage.

Si vous ne savez pas combien de temps durera le travail, vous pouvez configurer les choses pour que votre travail termine l'instance une fois terminée.

Voici un article que j'ai écrit qui parcourt les commandes exactes nécessaires pour configurer ceci:

Exécution D'Instances EC2 sur un Calendrier régulier avec mise à l'Échelle Automatique
http://alestic.com/2011/11/ec2-schedule-instance

Démarrer une instance entière juste pour lancer un ensemble de travaux semble un peu exagéré, mais si c'est un t1.micro, alors cela ne coûte que quelques centimes.

Ce t1.micro n'a pas à faire le travail réel non plus. Votre instance pourrait injecter des messages dans SQS ou via SNS afin que les autres serveurs redondants récupèrent les tâches.

7
répondu Eric Hammond 2012-07-23 18:52:34

Introduction les Événements dans AWS Cloudwatch

Vous pouvez planifier par minute, heure, jours ou en utilisant l'expression CRON en utilisant la console et sans Lambda ou toute programmation.

Je viens de programmer mon ASP.net API WEB (HTTP Post) en utilisant le point de terminaison HTTP SNS pour exécuter chaque minute et cela fonctionne parfaitement.

entrez la description de l'image ici

7
répondu Vicky 2016-05-12 15:19:37

Ceci est un site tiers hébergé qui peut appeler régulièrement des scripts planifiés sur votre domaine.

Cela ne fonctionnera pas si vous avez besoin que votre script s'exécute dans le shell, et non en tant Qu'Apache.

4
répondu Travis Austin 2013-08-15 22:37:10

On dirait que cela pourrait vous être utile: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

Task Runner est une application d'agent de tâches qui interroge le Pipeline de données AWS pour les tâches planifiées et les exécute sur les instances Amazon EC2, Amazon Clusters DME, ou d'autres ressources de calcul, état des rapports comme il le fait. Selon votre demande, vous pouvez choisir de:

  • Autoriser le Pipeline de données AWS à installez et gérez un ou plusieurs Runner de tâches applications pour vous sur les ressources de calcul qu'il gère automatiquement. Dans ce cas, vous n'avez pas besoin d'installer ou de configurer Task Runner comme décrit dans cette section. Ceci est le recommandé configuration.

  • Installez et configurez manuellement Task Runner sur une ressource de calcul comme une instance EC2 ou un serveur physique. Faire, utilisez les procédures décrites dans cette section.

  • Développer et installez un agent de tâche personnalisé au lieu de Task Runner. Le les procédures pour ce faire dépendront de la mise en œuvre de la agent de tâche personnalisé.

3
répondu Joe Zack 2013-08-12 14:10:56

Amazon a introduit Lambda l'année dernière pour NodeJS, hier Amazon a ajouté les fonctionnalités des fonctions planifiées, le Support VPC et le Support Python.

En tirant parti de la fonction planifiée - un remplacement approprié pour CRON peut être atteint.

Plus d'Infos - http://aws.amazon.com/lambda/details/

entrez la description de l'image ici

3
répondu Naveen Vijay 2015-10-09 14:14:15

On dirait que c'est une option relativement nouvelle D'AWS BeanStalk:

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

Fondamentalement, ils agissent comme des récepteurs SQS réguliers, mais ils sont appelés sur un calendrier cron au lieu de répondre à un message SQS.

0
répondu Falcolas 2015-06-25 15:57:34

SWF est un service web D'AWS qui peut être utilisé pour planifier des tâches. La plupart du travail consiste à spécifier ce qu'est une tâche et un calendrier.

Http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html {[4] } est un planificateur évolutif écrit sur SWF.

0
répondu milind parikh 2015-08-14 21:49:45

Les équilibreurs de charge AWS Elastic effectueront un ping sur vos instances pour vérifier qu'elles sont saines. Vous pouvez ajouter vos tâches de type cron au script que L'ELB envoie, et il s'exécutera très régulièrement.

Vous souhaitez ajouter de la logique pour que chaque tâche soit exécutée le bon nombre de fois et au bon intervalle, mais cela pourrait être accompli avec une table de base de données qui suit les exécutions. Chaque fois que L'ELB envoie un ping à votre serveur, votre serveur vérifie la base de données pour voir si un travail est en attendant, et ensuite exécuter ce travail.

L'ELB expirera si le script prend trop de temps à exécuter, il est donc important de ne pas créer une situation où votre contrôle de santé ELB prendra plusieurs secondes pour traiter les tâches cron. Pour surmonter cela, vous pouvez utiliser le service de Notification simple AWS. Votre script ELB health check peut simplement publier un message sur une rubrique SNS, puis cette rubrique peut transmettre le message via une requête HTTP à votre serveur web.

En d'autres termes: Pings ELB votre instance EC2... L'instance EC2 vérifie les travaux en attente et envoie un message au SNS s'il en existe... SNS avertit votre application via HTTP... L'appel HTTP de SNS est ce qui traite réellement le travail cron

-1
répondu Travis Austin 2013-08-14 03:53:41