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. Si usas Cloud Run for Anthos en Google Cloud, debes verificar la identidad dentro del contenedor. Consulta el código de muestra de IAP que lo demuestra.

  4. 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. Visita la página Crear una clave de cuenta de servicio en Cloud Console.

    Página Crear cuenta de servicio

  2. En la lista Cuenta de servicio, selecciona Nueva cuenta de servicio.

  3. En el campo Nombre de la cuenta de servicio, ingresa el nombre que deseas usar para la cuenta de servicio.

  4. Haz clic en Crear.

  5. Copia el correo electrónico de la cuenta de servicio para usarlo en los siguientes pasos.

  6. Haz clic en Continuar si se te solicita que especifiques los permisos.

  7. Visita la página Servicios de Cloud Run en Cloud Console.

    Ir a la página Servicios

  8. Selecciona el servicio en la lista que se muestra.

  9. Si es necesario, haz clic en el botón Mostrar panel de información / Ocultar panel de información en el extremo derecho de la página para mostrar información.

  10. Ubica la pestaña Permisos y haz clic en Agregar miembro.

  11. Pega el correo electrónico de la cuenta de servicio en el campo Nuevos miembros.

  12. En el menú desplegable Función, selecciona Cloud Run > Invocador de Cloud Run.

  13. Haz clic en Guardar.

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.

Gcloud

  1. Crea el trabajo:

    gcloud beta 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.

Próximos pasos