web-dev-qa-db-fra.com

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

Actuellement, j'ai un seul serveur sur Amazon où je mets tous mes cronjobs. Je souhaite éliminer ce point de défaillance unique et exposer toutes mes tâches en tant que services Web. Je voudrais exposer les services derrière un ELB VPC à quelques serveurs qui exécuteront les tâches lors de l'appel.

Existe-t-il des services qu'Amazon (AWS) peut exécuter une tâche récurrente (vraiment appeler un service Web) à intervalles planifiés? J'aimerais vraiment pouvoir conserver la fonctionnalité cron en termes de spécification heure/jour, mais exploiter la haute disponibilité du pilote (chose qui appelle les points de terminaison au bon moment) vers AWS.

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

67
rynop

AWS annoncé prise en charge des 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 à l'aide d'une syntaxe de type cron. Les les documents Lambda montrent un exemple d'utiliser Python pour effectuer des événements planifiés.

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

Le projet Lambder permet de simplifier l'utilisation des fonctions planifiées sur Lambda.

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:

  • Groupe de mise à l'échelle automatique à instance unique qui démarre et s'arrête selon un calendrier, comme décrit par Eric Hammond.
  • tilisation d'une minuterie de service de workflow simple , ce qui n'est pas du tout intuitif. Cette étude de cas mentionne que JPL a utilisé SWF pour construire un cron distribué, mais il n'y a aucun détail d'implémentation. Il y a également une référence à un exemple de code enfoui dans les exemples de code SWF.
  • Exécutez-le vous-même en utilisant quelque chose comme cronlock .
  • Utilisez quelque chose comme nreliable Town Clock (UTC) pour exécuter les fonctions Lambda selon un calendrier. N'oubliez pas que Lambda ne peut actuellement pas accéder aux ressources d'un VPC

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

64
Ben Whaley

Présentation É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 aucune programmation.

Je viens de planifier mon API WEB ASP.net (HTTP Post) en utilisant le point de terminaison HTTP SNS pour qu'il s'exécute toutes les minutes et cela fonctionne parfaitement.

enter image description here

13
Vikash Rathee

Existe-t-il des services qu'Amazon (AWS) peut exécuter une tâche récurrente à intervalles planifiés?

C'est l'un des rares points de défaillance que les gens (y compris moi) continuent 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 résilier des instances à l'aide d'une planification récurrente spécifiée au format cron.

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 passe en revue les commandes exactes nécessaires pour configurer cela:

Exécution d'instances EC2 selon une planification récurrente 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 s'il s'agit d'un t1.micro, cela ne coûte que quelques centimes.

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

7
Eric Hammond

Il s'agit d'un site tiers hébergé qui peut régulièrement appeler 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
Travis Austin

Des sons comme celui-ci pourraient vous être utiles: http://docs.aws.Amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

Task Runner est une application d'agent de tâche qui interroge AWS Data Pipeline pour les tâches planifiées et les exécute sur des instances Amazon EC2, des clusters Amazon EMR ou d'autres ressources de calcul, en signalant l'état en cours. Selon votre application, vous pouvez choisir de:

  • Autorisez AWS Data Pipeline à installer et gérer une ou plusieurs applications Task Runner 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. Il s'agit de la configuration recommandée.

  • Installez et configurez manuellement Task Runner sur une ressource de calcul telle qu'une instance EC2 de longue durée ou un serveur physique. Pour ce faire, utilisez les procédures de cette section.

  • Développez et installez un agent de tâche personnalisé au lieu de Task Runner. Les procédures à suivre dépendent de l'implémentation de l'agent de tâche personnalisé.

3
Joe Zack

Amazon a introduit Lambda l'année dernière pour NodeJS, hier Amazon a ajouté les fonctionnalités Fonctions planifiées, Prise en charge VPC et Python Support.

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

Plus d'informations - http://aws.Amazon.com/lambda/details/

enter image description here

3
Naveen Vijay

Il semble que ce soit 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 normaux, mais ils sont appelés selon un calendrier cron plutôt qu'en réponse à un message SQS.

1
Falcolas

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 est un planificateur évolutif écrit contre SWF.

0
milind parikh