amazon web services - job - ejecutar la tarea programada en AWS sin cron
aws cron expression generator (9)
¿Hay algún servicio que Amazon (AWS) ofrezca que pueda ejecutar un trabajo recurrente a intervalos programados?
Este es uno de los pocos puntos únicos de falla que la gente (incluyéndome a mí) sigue mencionando al diseñar arquitecturas con AWS. Hasta que Amazon lo resuelva con un servicio, aquí hay un truco que publiqué y que algunas compañías usan activamente.
AWS Auto Scaling puede ejecutar y finalizar instancias usando una programación recurrente especificada en formato cron.
Puede hacer que la instancia ejecute automáticamente un proceso al inicio.
Si no sabe cuánto durará el trabajo, puede configurarlo para que su trabajo finalice la instancia cuando se haya completado.
Aquí hay un artículo que escribí que recorre los comandos exactos necesarios para configurar esto:
Ejecución de instancias de EC2 en un programa recurrente con escalado automático
http://alestic.com/2011/11/ec2-schedule-instance
Comenzar una instancia completa solo para iniciar un conjunto de trabajos parece un poco exagerado, pero si se trata de un t1.micro, solo cuesta un par de centavos.
Ese t1.micro tampoco tiene que hacer el trabajo real. Su instancia podría inyectar mensajes en SQS o a través de SNS para que los otros servidores redundantes elijan las tareas.
Actualmente tengo un único servidor en Amazon, donde pongo todos mis cronjobs. Quiero eliminar este único punto de falla y exponer todas mis tareas como servicios web. Me gustaría exponer los servicios detrás de un VPC ELB a unos pocos servidores que ejecutarán las tareas cuando se los llame.
¿Hay algún servicio que Amazon (AWS) ofrezca que pueda ejecutar un trabajo recurrente (realmente llame a un servicio web) a intervalos programados? Realmente me gustaría poder mantener la funcionalidad cron en términos de especificación de tiempo / día, pero agotar el HA del controlador (lo que llama puntos finales en el momento adecuado) a AWS.
Me gusta cómo SQS ofrece los puntos finales web, pero por lo que puedo decir, no puedes programarlos. SWF tampoco parece ser una buena opción.
AWS announced soporte para las funciones programadas en Lambda en su conferencia re: Invent 2015. Con esta característica, los usuarios pueden ejecutar las funciones de Lambda de forma programada utilizando una sintaxis tipo cron. Los documentos de Lambda muestran un ejemplo del uso de Python para realizar eventos programados. A partir de febrero de 2016, las funciones de Lambda pueden acceder a los recursos dentro de las VPC.
Actualmente, la resolución mínima que puede ejecutar un lambda programado es de 1 minuto (lo mismo que cron, pero no tan fino como los temporizadores systemd).
El proyecto Lambder ayuda a simplificar el uso de las funciones programadas en Lambda.
El ejemplo cron de λ Gordon tiene quizás la interfaz más simple para implementar funciones lambda programadas.
Respuesta original, guardada para la posteridad.
Como Eric Hammond y otros han declarado, no existe un servicio AWS nativo para las tareas programadas. Solo hay soluciones alternativas y medias soluciones, como se menciona en otras respuestas.
Para recapitular las opciones actuales:
- El grupo de escala automática de una sola instancia que se inicia y se detiene según un cronograma, como lo describe Eric Hammond.
- Usar un temporizador de servicio de flujo de trabajo simple , que no es en absoluto intuitivo. Este estudio de caso menciona que JPL usó SWF para construir un cron distribuido, pero no hay detalles de implementación. También hay una referencia a un ejemplo de código oculto en las muestras del código SWF.
- Ejecútelo usted mismo usando algo como cronlock .
- Use algo como el reloj urbano no confiable (UTC) para ejecutar las funciones de Lambda en un horario. Recuerde que Lambda no puede acceder actualmente a recursos dentro de una VPC
Con suerte, una mejor solución llegará pronto.
AWS Elastic Load Balancers hará ping a sus instancias para verificar que sean saludables. Puede agregar sus tareas tipo cron a la secuencia de comandos que el ELB está haciendo ping, y se ejecutará con mucha regularidad.
Querrá agregar algo de lógica para que cada tarea se ejecute la cantidad correcta de veces y en el intervalo correcto, pero esto podría lograrse con una tabla de base de datos que rastree las ejecuciones. Cada vez que el ELB hace ping a su servidor, su servidor verificará la base de datos para ver si hay algún trabajo pendiente, y luego ejecutará ese trabajo.
El ELB tendrá un tiempo de espera excedido si la secuencia de comandos tarda demasiado en ejecutarse, por lo que es importante no crear una situación en la que la verificación de estado de ELB tarde varios segundos en procesar las tareas de cron. Para superar esto, puede emplear el Servicio de notificación simple de AWS. Su secuencia de comandos de verificación de salud ELB simplemente puede publicar un mensaje en un tema SNS, y luego ese tema puede entregar el mensaje a través de una solicitud HTTP a su servidor web.
En otras palabras: ELB hace ping a su instancia EC2 ... La instancia EC2 comprueba si hay trabajos pendientes y envía un mensaje al SNS si se encuentra alguno ... SNS notifica su aplicación a través de HTTP ... La llamada HTTP del SNS es lo que realmente procesa el trabajo cron
Amazon presentó el año pasado a Lambda para NodeJS, yesterday Amazon agregó las funciones Funciones programadas, Soporte de VPC y Soporte de Python.
Al aprovechar la función programada, se puede lograr un reemplazo adecuado para CRON.
Más información - http://aws.amazon.com/lambda/details/
Parece que esta es una opción relativamente nueva de AWS BeanStalk:
Básicamente, actúan como receptores SQS normales, pero se les llama en un cronograma cron en lugar de en respuesta a un mensaje SQS.
Parece que esto podría serle útil: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html
Task Runner es una aplicación de agente de tareas que sondea AWS Data Pipeline para tareas programadas y las ejecuta en instancias de Amazon EC2, clústeres de Amazon EMR u otros recursos computacionales, informando sobre el estado a medida que lo hace. Dependiendo de su aplicación, puede elegir:
Permita que AWS Data Pipeline instale y administre una o más aplicaciones de Task Runner para usted en recursos computacionales que administra automáticamente. En este caso, no necesita instalar o configurar Task Runner como se describe en esta sección. Esta es la configuración recomendada.
Instale y configure manualmente Task Runner en un recurso computacional como una instancia EC2 de larga ejecución o un servidor físico. Para hacerlo, use los procedimientos en esta sección.
Desarrolle e instale un agente de tareas personalizado en lugar de Task Runner. Los procedimientos para hacerlo dependerán de la implementación del agente de tareas personalizado.
Presentación de eventos en AWS Cloudwatch
Puede programar por minuto, por hora, días o usando la expresión CRON usando la consola y sin Lambda o cualquier programación.
Acabo de programar mi ASP.NET WEB API (HTTP Post) usando SNS HTTP endpoint para ejecutar cada minuto y está funcionando perfectamente.
SWF es un servicio web de AWS que se puede usar para programar tareas. La mayor parte del trabajo se refiere a especificar qué es una tarea y un cronograma.
http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html es un planificador escalable escrito contra SWF.
Esto no funcionará si necesita que su script se ejecute en el shell, y no como Apache.