Programa tareas con cron para Go

El servicio Cron de App Engine te permite configurar tareas programadas con regularidad que operan a horarios definidos o intervalos regulares. Estas tareas se conocen comúnmente como trabajos cron. Los trabajos cron se activan de manera automática con el servicio cron de App Engine. Por ejemplo, puedes utilizar un trabajo cron para enviar un informe de correo electrónico a diario, actualizar algunos datos almacenados en caché cada 10 minutos o actualizar la información de resumen una vez por hora.

Un trabajo cron realiza una solicitud GET HTTP a una URL según lo programado. El controlador para esa URL ejecuta la lógica cuando se lo llama. Una solicitud de trabajo cron está sujeta a los mismos límites que la lista de tareas en cola.

Antes de comenzar

Para implementar o actualizar los programas, tu cuenta requiere una de las funciones de IAM siguientes:

  • Propietario
  • Editor

Puedes establecer el permiso en la página IAM en Google Cloud Platform Console.

Crea un trabajo cron

  1. Crea el archivo cron.yaml en el directorio raíz de tu aplicación (junto con app.yaml).
  2. Agrega una o más entradas <cron> a tu archivo y define los elementos necesarios para tu trabajo, incluidos los elementos obligatorios <url> y <schedule>.

    En el siguiente ejemplo, se crea un trabajo cron básico que se ejecuta a diario:

    cron:
    - description: "daily summary job"
      url: /tasks/summary
      target: beta
      schedule: every 24 hours
    

    La especificación de destino es opcional y es el nombre de un servicio o versión. Si está presente, el destino se antepone al nombre de host de tu aplicación, lo que hace que el trabajo se dirija a ese servicio o versión. Si no se especifica ningún destino, el trabajo se ejecutará en las versiones del servicio default que están configuradas para el tráfico.

  3. Crea un controlador para la URL del trabajo cron. El controlador debe ejecutar las tareas que desees programar. El controlador debe responder con un código de estado HTTP entre 200 y 299 (inclusive) para indicar el éxito. Se pueden mostrar otros códigos de estado y usarse para reintentar el trabajo cron.

Obtén más información sobre la sintaxis y las opciones de cron.yaml.

Prueba los trabajos cron en el servidor de desarrollo

El servidor de desarrollo local no ejecuta tus trabajos cron de manera automática. Puedes realizar solicitudes directamente a la URL de tu trabajo cron para probar la funcionalidad. Puedes usar tu cron local o la interfaz de tareas programadas para activar las URL de tus trabajos con curl o una herramienta similar.

Puedes usar la interfaz de administrador del servidor de desarrollo local para ver tus trabajos cron en http://localhost:8000/cron.

Reintenta los trabajos cron que fallan

Si el controlador de solicitudes de un trabajo cron muestra un código de estado que no está entre 200 y 299 (inclusive), App Engine considera que el trabajo falló. De forma predeterminada, los trabajos fallidos no se reintentan, a menos que se muestre un código de estado 503, en cuyo caso se reintenta cada minuto hasta que tenga éxito o se muestre un código de estado entre 200 y 299.

Para configurar la opción de que los trabajos fallidos se reintenten, haz lo siguiente:

  1. Incluye un bloque retry_parameters en tu archivo cron.yaml.
  2. Selecciona y configura los parámetros de reintento en el bloque retry_parameters.

    Por ejemplo, este archivo cron.yaml de muestra contiene un solo trabajo cron que está configurado para reintentarse hasta cinco veces (el valor predeterminado) con una retirada inicial de 2.5 segundos que se duplica cada vez.

    cron:
    - description: "retry demo"
      url: /retry
      schedule: every 10 mins
      retry_parameters:
        min_backoff_seconds: 2.5
        max_doublings: 5
    

Obtén más información sobre las opciones de reintento de cron.

Implementa trabajos cron

Para implementar los trabajos cron especificados en tu archivo de configuración cron.yaml, ejecuta el siguiente comando:

gcloud

gcloud app deploy cron.yaml

appcfg

Si usas el SDK original de App Engine, ejecuta lo siguiente:

appcfg.py update_cron [YOUR_APP_DIR]

Borra todos los trabajos cron

Sigue estos pasos para borrar todos los trabajos cron:

  1. Edita los contenidos del archivo cron.yaml para que contenga lo siguiente:

    cron:
    
  2. Implementa el archivo cron.yaml en App Engine.

Protege las URL para cron

Un controlador cron es simplemente un controlador normal definido en app.yaml. Puedes evitar que los usuarios accedan a las URL que utilizan las tareas programadas si restringes el acceso a las cuentas de administrador. Las tareas programadas pueden acceder a las URL exclusivas de administrador. Para restringir una URL, puedes agregar login: admin a la configuración del controlador en app.yaml.

Por ejemplo, en app.yaml se vería de la siguiente manera:

runtime: go
api_version: go1

handlers:
- url: /report/weekly
  script: _go_app
  login: admin
Para obtener más información, consulta cómo solicitar el estado de administrador o de acceso en la referencia de app.yaml.

Para probar un trabajo cron, accede como administrador y visita la URL del controlador en tu navegador.

Las solicitudes del servicio cron también contendrán un encabezado HTTP:

X-Appengine-Cron: true

Google App Engine configura de manera interna el encabezado X-Appengine-Cron. Si tu controlador de solicitudes encuentra este encabezado, puedes confiar en que la solicitud es cron. Si el encabezado está presente en una solicitud de usuario externo a tu aplicación, este se quita, excepto en el caso de las solicitudes de los administradores que hayan accedido a la aplicación, ya que estos tienen permitido configurar el encabezado con fines de prueba.

Google App Engine emite solicitudes cron desde la dirección IP 0.1.0.1.

Llama a Google Cloud Endpoints

No puedes especificar un Google Cloud Endpoint en el campo url de un trabajo cron. Si deseas que tu trabajo cron llame a un Google Cloud Endpoint, emite una solicitud a un objetivo entregado por un controlador en tu aplicación y llama a la clase y al método de extremo desde el código del controlador.

Visualiza los trabajos cron en GCP Console

Puedes verificar los trabajos cron programados en la página de trabajos cron de GCP Console.

También puedes ver los registros para visualizar cuándo se agregaron o quitaron los trabajos cron.

Más información

Para obtener más información sobre la definición de trabajos cron, consulta la referencia de cron.yaml.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Go