Solución:
Soporte nativo para eventos programados agregado el 8 de octubre de 2015:
Como se anunció en esta publicación del blog de AWS, la programación ahora se admite como un tipo de fuente de evento (también llamado desencadenadores) llamado “Eventos de CloudWatch: programación“, 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 – Programación’. Ejemplo de configuración a continuación:
Agregar evento programado a una lambda existente
Vaya a la pestaña ‘Disparadores’ de su lambda, seleccione ‘Agregar disparador’ y especifique el disparador ‘CloudWatch Event – Schedule’. Captura de pantalla de ejemplo donde tengo una lambda existente con un disparador SNS:
Una vez cargada, la interfaz de usuario para configurar este disparador 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()
en lugar de rate()
. Las expresiones 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
- Documentación de AWS: Programar expresiones mediante Rate o Cron
- Documentación de AWS: ejecute una función de AWS Lambda de forma programada mediante la AWS CLI
- Documentación de AWS – Tutorial: uso de AWS Lambda con eventos programados
- AWS ha proporcionado un “modelo” de muestra que utiliza una expresión cron llamada
lambda-canary
que se pueden seleccionar durante la creación de funciones desde la consola de AWS. - Este tutorial lo guía a través de la configuración de este plan.
- AWS ha proporcionado un “modelo” de muestra que utiliza una expresión cron llamada
Notas
- El nombre de este tipo de evento ha cambiado de “Evento programado” a “Eventos de CloudWatch – Programación” 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” en 42 minutos y 50 segundos) era usar 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 que contiene ya no son exactas. Vea mis capturas de pantalla actualizadas del 10/3/2017 para conocer las últimas revisiones.
Desde el momento de esta publicación, parece haber surgido otra solución: Programar invocaciones recurrentes de AWS Lambda con el reloj de la ciudad no confiable (UTC) en el que el autor propone suscribirse al tema SNS Reloj de la ciudad poco confiable. No he utilizado SWF ni SNS, pero me parece que la solución SNS es más sencilla. Aquí hay un extracto del artículo.
Reloj de la ciudad poco confiable (UTC)
El reloj de la ciudad no confiable (UTC) es un nuevo tema de SNS público y gratuito (Servicio de notificación simple de Amazon) que transmite un mensaje de “timbre” cada cuarto de hora a todos los suscriptores. Puede enviar las campanillas a las funciones de AWS Lambda, las colas de SQS y las direcciones de correo electrónico.
Puede usar los atributos de timbre para ejecutar su código cada quince minutos, o solo ejecutar su código una vez por hora (por ejemplo, cuando el minuto == “00”) o una vez al día (por ejemplo, cuando la hora == “00” y el minuto = = “00”) o cualquier otra serie de intervalos.
Incluso puede suscribir una función que solo desea ejecutar una vez en un momento específico en el futuro: haga que la función ignore todas las invocaciones hasta que pase la hora deseada. Cuando llegue el momento, puede realizar su trabajo y luego darse de baja del tema SNS.
Conectar su código al reloj de la ciudad no confiable es rápido y fácil. No se requiere proceso de solicitud o creación de cuenta
NUEVA SOLUCIÓN: Trabajos programados de Lambda
Werner Vogel ha anunciado esta noche (08/10) en re: Invent que AWS Lambda ahora tiene su propio programador.
Consulte la nota de la versión de AWS Lambda el 08/10/2015:
También puede configurar AWS Lambda para invocar su código de forma regular y programada mediante 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 utilizar AWS Data Pipeline para programar una tarea con un período determinado. La acción puede ser cualquier comando cuando configura su Pipeline con el ShellCommandActivity.
Por ejemplo, puede ejecutar un comando de la AWS CLI para:
- Pon un mensaje a SQS
- o directamente invocar una función Lambda (ver invocar)
Puede crear fácilmente la tarea programada de AWS Data Pipeline directamente en la consola de AWS (por ejemplo, con un comando de la AWS CLI):
También puede utilizar la API para definir 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" }
]
}
]
}
Límites: el intervalo mínimo de programación es de 15 minutos.
Precio: alrededor de $ 1.00 por mes.