services que precios precio costos costo aws amazon-web-services cron-task aws-lambda

amazon web services - que - Tareas programadas de AWS Lambda



que es amazon web services (11)

Amazon anunció AWS Lambda ( http://aws.amazon.com/lambda/ ).

La descripción del producto incluye:

Tareas programadas

Las funciones de AWS Lambda se pueden activar mediante temporizadores de eventos externos, por lo que las funciones se pueden ejecutar durante los horarios de mantenimiento programados regularmente o en horas no pico. Por ejemplo, puede activar una función AWS Lambda para realizar limpiezas nocturnas de archivos durante horas no ocupadas.

Cuando leí esto, entendí que finalmente podría tener una manera de hacer constantemente tareas "parecidas a un cron". Quiero ejecutar una consulta específica todos los días a las 5PM, digamos.

Sin embargo, no encuentro esto en ninguna parte de la documentación. Solo mencionan desencadenantes en eventos programáticos o eventos de otros servicios de AWS.

¿Entendí mal? ¿O alguien puede señalarme la documentación?


NUEVA SOLUCIÓN: Trabajos programados de Lambda

Werner Vogel ha anunciado esta noche (10/08) en re: Invent que AWS Lambda ahora tiene su propio programador.

Consulte la nota de lanzamiento de AWS Lambda el 2015-10-08 :

También puede configurar AWS Lambda para invocar su código de forma regular y programada utilizando la consola de AWS Lambda. Puede especificar una tasa fija (número de horas, días o semanas) o puede especificar una expresión cron. Para ver un ejemplo, consulte Tutorial 5: Uso de funciones de Lambda para procesar eventos programados (Python) .

ANTIGUA SOLUCIÓN: Programación con AWS Data Pipeline

Puede usar AWS Data Pipeline para schedule una tarea con un período determinado. La acción puede ser cualquier comando cuando configura su Pipeline con ShellCommandActivity .

Por ejemplo, puede ejecutar un comando de AWS CLI para:

  • Pon un mensaje a SQS
  • o invocar directamente una función Lambda (ver invoke )

Puede crear fácilmente la tarea programada de AWS Data Pipeline directamente dentro de la consola de AWS (por ejemplo, con un comando de AWS CLI):

También puede usar la API para define su programación:

{ "pipelineId": "df-0937003356ZJEXAMPLE", "pipelineObjects": [ { "id": "Schedule", "name": "Schedule", "fields": [ { "key": "startDateTime", "stringValue": "2012-12-12T00:00:00" }, { "key": "type", "stringValue": "Schedule" }, { "key": "period", "stringValue": "1 hour" }, { "key": "endDateTime", "stringValue": "2012-12-21T18:00:00" } ] }, { "id": "DoSomething", "name": "DoSomething", "fields": [ { "key": "type", "stringValue": "ShellCommandActivity" }, { "key": "command", "stringValue": "echo hello" }, { "key": "schedule", "refValue": "Schedule" } ] } ] }

Limits : el intervalo de programación mínimo es de 15 minutos.
Pricing : alrededor de $ 1.00 por mes.


Soporte nativo para eventos programados agregado el 8 de octubre de 2015:

Como se anunció en esta publicación de blog de AWS , la programación ahora se admite como un tipo de origen de evento (también llamado desencadenantes) llamado " CloudWatch Events - Schedule ", y puede expresarse como una tasa o una expresión cron.

Agregar evento programado a una nueva lambda

Vaya al paso de creación ''Configurar activadores'' y especifique el activador ''Evento de CloudWatch - Programar''. Ejemplo de configuración a continuación:

Agregar evento programado a una lambda existente

Navegue a la pestaña ''Activadores'' de su lambda, seleccione ''Agregar activador'' y especifique el activador ''Evento CloudWatch - Programación''. Captura de pantalla de ejemplo donde tengo una lambda existente con un disparador SNS:

Una vez cargada, la interfaz de usuario para configurar este activador es idéntica a la captura de pantalla en la sección anterior "Agregar evento programado a una nueva lambda".

Discusión

Para su caso de ejemplo, querrá usar cron() lugar de rate() . Las expresiones de Cron en lambda requieren todos los campos y se expresan en UTC. Entonces, para ejecutar una función todos los días a las 5 p.m. (UTC), use la siguiente expresión cron:

cron(0 17 * * ? *)

Recursos adicionales

Notas

  • El nombre de este tipo de evento ha cambiado de "Evento programado" a "Eventos de CloudWatch - Programa" desde que se lanzó esta función por primera vez.
  • Antes del lanzamiento de esta función, la solución recomendada para este problema (según "Introducción a AWS Lambda" a 42 minutos y 50 segundos ) era utilizar SWF para crear un temporizador o crear un temporizador con una aplicación externa.
  • La interfaz de usuario de Lambda se ha revisado desde que salió la publicación del blog del evento programado, y las capturas de pantalla ya no son exactas. Vea mis capturas de pantalla actualizadas arriba del 10/03/2017 para las últimas revisiones.

Al crear la función lambda, cree el desencadenador "CloudWatch Events - Schedule"

Ahora puede usar los ajustes preestablecidos de AWS en la expresión de programación como rate = 15 min o puede usar una expresión cron.

Para su requerimiento, el Cron Schedule es "0 0 17 1/1 *? *"


Así es como lo hago:

  • Crea Lambda que:

  • Cree una alarma de CloudWatch para: ApproximateNumberOfMessagesVisible> 0 durante 1 minuto

  • Suscriba el tema SNS a la alarma
  • Suscríbase Lambda al tema de SNS

Ahora tiene un temporizador con aproximadamente 15 minutos de resolución.

Luego, otras funciones de Lambda se suscriben al tema SNS y se llaman cada 15 minutos.


Dado que ahora es posible activar fácilmente funciones lambda a través de HTTP (por ejemplo, usando GET o curl), una solución simple es usar un CRON administrado como easycron: https://www.easycron.com/ para activar su función lambda.

Tuvimos el mismo problema y terminamos ejecutando un servicio cron en Google App Engine en Python, ya que esto permitió una mayor flexibilidad y complejidad en el trabajo CRON.


Desde el momento de esta publicación, parece haber surgido otra solución: Programar invocaciones recurrentes de AWS Lambda con The Unreliable Town Clock (UTC) en el que el autor propone suscribirse al tema SNS Unreliable Town Clock . No he usado SWF ni SNS, pero me parece que la solución SNS es más simple. Aquí hay un extracto del artículo.

Reloj de ciudad no confiable (UTC)

El reloj de ciudad no confiable (UTC) es un nuevo tema gratuito, público y gratuito de SNS (Servicio de notificación simple de Amazon) que transmite un mensaje de "timbre" cada cuarto de hora a todos los suscriptores. Puede enviar las campanas a las funciones de AWS Lambda, colas SQS y direcciones de correo electrónico.

Puede usar los atributos del timbre para ejecutar su código cada quince minutos, o solo ejecutar su código una vez por hora (por ejemplo, cuando minuto == "00") o una vez por día (por ejemplo, cuando hora == "00" y minuto = = "00") o cualquier otra serie de intervalos.

Incluso puede suscribirse a una función que solo desea ejecutar solo una vez en un momento específico en el futuro: haga que la función ignore todas las invocaciones hasta que sea posterior al tiempo que desea. Cuando llegue el momento, puede realizar su trabajo y luego darse de baja del tema SNS.

Conectar su código al Reloj de ciudad no confiable es rápido y fácil. No se requiere proceso de solicitud ni creación de cuenta


Diksha es AWS Lambda Scheduler basado en AWS SWF Trigger como lo recomienda el equipo de AWS . Uno puede programar trabajos usando expresiones cron y también puede especificar cuánto tiempo desea ejecutar, cuándo comenzar o cuándo terminar. Puede ver el estado y el historial de trabajos programados. La seguridad es administrada por las políticas de AWS.

Una vez que configure el motor diksha, puede programar funciones usando la expresión cron de la siguiente manera:

java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj "jobName | functionName | context | 0 0-59 * * * * | 10"

En este trabajo, el trabajo se ejecutará cada minuto 10 veces. AWS SWF activará la función por sí mismo.

Detalles: https://github.com/milindparikh/diksha

Descargo de responsabilidad: soy colaborador del proyecto.


En la página Función, Agregar disparador, puede agregar Eventos de CloudWatch y convertirlo en un tipo de programación


La forma de la consola web es bastante sencilla. Simplemente cree una regla de CloudWatch para la lambda y agréguela en la pestaña Triggers de lambda.

Para aquellos que necesitan automatizar eso con aws cli , podemos

  1. crear la función
  2. crea la regla,
  3. conceder el permiso
  4. regla de enlace y función

Crear función

aws lambda create-function --function-name ${FUNCTION-NAME} / --runtime java8 / --role ''arn:aws:iam::${Account}:role/${ROLE}'' / --handler org.yourCompany.LambdaApp / --code ''{"S3Bucket":"yourBucket", "S3Key": "RC/yourapp.jar"}'' / --description ''check hive connection'' / --timeout 180 / --memory-size 384 / --publish / --vpc-config ''{"SubnetIds": ["subnet-1d2e3435", "subnet-0df4547a"], "SecurityGroupIds": ["sg-cb17b1ae", "sg-0e7ae277"]}'' / --environment Variables={springEnv=dev}

Crear reglas

## create aws events put-rule --name ${ruleName} / --schedule-expression ''rate(5 minutes)'' / --state ENABLED / --description ''check hive connection'' # grant permission to the Rule to allow it to trigger the function aws lambda add-permission --function-name ${functionName} / --statement-id 123 / --action ''lambda:InvokeFunction'' / --principal events.amazonaws.com / --source-arn arn:aws:events:us-east-1:acc:rule/${ruleName} # link rule and function aws events put-targets --rule ${ruleName} / --targets ''[{"Id":"1", "Arn":"arn:aws:lambda:us-east-1:acc:function:RC-checkhive"}]''


También puede programarlo con eventos de cloudWatch. Crear regla -> adjuntar destino (lambda) y configurar cron / sabio horario en su regla.


Una forma sencilla de ejecutar su consulta en lambda para un intervalo de tiempo particular es establecer una regla para su función lambda. para eso después de crear la función lambda, vaya a cloudwatch >> reglas >> horario. y defina la expresión cron y en la sección de destino seleccione la función lambda que desea activar.