Ejecuta servicios de manera programada

Puedes usar Cloud Scheduler para activar de forma segura y programada un servicio de Cloud Run. Esto es muy similar a usar trabajos cron.

Entre los casos prácticos se incluyen los siguientes:

  • Realizar copias de seguridad de forma programada
  • Realizar tareas de administración recurrentes, como las siguientes:
    • Volver a generar un mapa del sitio
    • Borrar opciones de configuración, revisiones o datos antiguos
    • Sincronizar contenido entre sistemas de datos
    • Procesar notificaciones diarias por correo electrónico
    • Verificar y hacer informes sobre el acceso a servicios posteriores
  • Generar documentos, como facturas

En esta página, se muestra cómo usar Cloud Scheduler de forma segura con Cloud Run en el mismo proyecto de Google Cloud.

Antes de comenzar

Habilita la API de Cloud Scheduler en el proyecto que estás usando.

Crea e implementa tu servicio

Para crear y, luego, implementar el servicio, sigue estos pasos:

  1. En el servicio, implementa el trabajo que deseas ejecutar de manera programada.

  2. Ten en cuenta qué tipo de solicitud de trabajo espera recibir el servicio, por ejemplo, GET o POST. Cuando crees el trabajo programado que invoca el servicio, deberás especificar el método HTTP que coincida con esto.

  3. Cuando implementes el servicio que usas con Cloud Scheduler, asegúrate de NO permitir invocaciones no autenticadas.

Crea una cuenta de servicio para Cloud Scheduler

Debes crear una cuenta de servicio a fin de asociarla con Cloud Scheduler y darle permiso para invocar el servicio de Cloud Run. Puedes usar una cuenta de servicio existente para representar a Cloud Scheduler o crear una nueva.

A fin de crear una cuenta de servicio y darle permiso para invocar el servicio de Cloud Run, sigue estos pasos:

Console

  1. En Cloud Console, ve a la página Cuentas de servicio.

    Ir a Cuentas de servicio

  2. Selecciona un proyecto

  3. Ingresa un nombre de cuenta de servicio para mostrar en Cloud Console.

    Cloud Console genera un ID de cuenta de servicio a partir de este nombre. Si es necesario, edita el ID. No podrás cambiar el ID más adelante.

  4. Opcional: Ingresa una descripción de la cuenta de servicio.

  5. Haga clic en Crear.

  6. Haz clic en el campo Seleccionar una función.

  7. En Todas las funciones, selecciona Cloud Run > Invocador de Cloud Run.

  8. Haga clic en Listo.

Línea de comandos

  1. Crea la cuenta de servicio:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
       --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"

    Reemplaza los siguientes elementos:

    • SERVICE_ACCOUNT_NAME por un nombre único en minúscula dentro del proyecto de Google Cloud, por ejemplo, my-invoker-service-account-name
    • DISPLAYED_SERVICE_ACCOUNT_NAME por el nombre que deseas mostrar para esta cuenta de servicio, por ejemplo, en la consola, My Invoker Service Account
  2. En Cloud Run, debes otorgar permiso a la cuenta de servicio para invocar el servicio:

    gcloud run services add-iam-policy-binding SERVICE \
       --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/run.invoker

    Reemplaza los siguientes elementos:

    • SERVICE por el nombre del servicio que deseas que Cloud Scheduler invoque
    • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio
    • PROJECT_ID por el ID del proyecto de Google Cloud

Crea un trabajo de Cloud Scheduler

Deberás crear un trabajo que invoque el servicio en momentos específicos. Puedes usar Console o la línea de comandos:

Para crear un trabajo, puedes usar Console o la línea de comandos de gcloud. Haz clic en la pestaña correspondiente:

Console

  1. Visita la página de Console de Cloud Scheduler.

    Ir a Cloud Scheduler

  2. Haz clic en Create job (Crear trabajo).

    captura de pantalla

  3. Proporciona un nombre para el trabajo.

  4. Especifica la frecuencia, o el intervalo de trabajo, en el que se ejecutará el trabajo mediante una string de configuración. Por ejemplo, la string 0 */3 * * * ejecuta el trabajo cada 3 horas. La string que proporcionas puede ser cualquier string compatible con crontab.

    Para obtener más información, consulta Configura programas de trabajo.

  5. En la lista desplegable, elige la zona horaria que se usará para la frecuencia del trabajo.

  6. Especifica HTTP como el destino:

    1. Especifica la URL completamente calificada del servicio, por ejemplo, https://myservice-abcdef-uc.a.run.app. El trabajo enviará solicitudes a esta URL.

    2. Especifica el método HTTP. El método debe coincidir con lo que espera el servicio de Cloud Run implementado antes. El valor predeterminado es POST.

    3. De manera opcional, especifica los datos que se enviarán al destino. Estos datos se envían en el cuerpo de la solicitud cuando se selecciona el método HTTP POST o PUT.

    4. Haz clic en Más para mostrar la configuración de autenticación.

    5. En el menú desplegable, selecciona Agregar token OIDC.

    6. En el campo Cuenta de servicio, copia el correo electrónico de la cuenta de servicio que creaste antes.

    7. En el campo Público, copia la URL completa del servicio.

  7. Haz clic en Crear para crear el trabajo y guardarlo.

Línea de comandos

  1. Crea el trabajo:

    gcloud scheduler jobs create http test-job --schedule "5 * * * *" \
       --http-method=HTTP-METHOD \
       --uri=SERVICE-URL \
       --oidc-service-account-email=SERVICE-ACCOUNT-EMAIL   \
       --oidc-token-audience=SERVICE-URL

    Reemplaza los siguientes elementos:

    • HTTP-METHOD por el método HTTP, p. ej., GET, POST, PUT, etcétera
    • SERVICE-URL por la URL de servicio
    • SERVICE-ACCOUNT-EMAIL por el correo electrónico de la cuenta de servicio

El servicio de Cloud Run se activará a través de una solicitud del trabajo de Cloud Scheduler con la frecuencia que definiste. Para confirmar y supervisar esto, examina los registros de este servicio.

¿Qué sigue?