Puedes usar Cloud Scheduler para activar de forma segura un servicio de Cloud Run según una programación. Es algo similar a utilizar tareas cron.
Estos son algunos de los posibles casos prácticos:
- Realizar copias de seguridad de forma programada
- Realizar tareas de administración recurrentes, como las siguientes:
- Volver a generar un sitemap
- Eliminar datos, contenido, configuración o revisiones antiguos
- Sincronizar contenido entre sistemas de datos
- Procesar notificaciones por correo diarias
- Verificar y generar informes sobre el acceso a servicios posteriores
- Generar documentos, como facturas
En esta página se muestra cómo usar con seguridad Cloud Scheduler con Cloud Run en el mismo Google Cloud proyecto.
Antes de empezar
Habilita la API Cloud Scheduler en el proyecto que estés usando.
Crear y desplegar un servicio
Para crear y desplegar:
En tu servicio, implementa el trabajo que quieras ejecutar según una programación.
Anota el tipo de solicitud que tu servicio espera recibir de las solicitudes de trabajo, por ejemplo,
GET
oPOST
. Cuando crees el trabajo programado que invoca tu servicio, tendrás que especificar el método HTTP que coincida con este.Cuando despliegues el servicio que vas a usar con Cloud Scheduler, asegúrate de seleccionar ** Require authentication** (Requerir autenticación). No permitas el acceso público.
En el siguiente ejemplo se muestra cómo desplegar un servicio de Cloud Run con Terraform:
Sustituye us-docker.pkg.dev/cloudrun/container/hello
por una referencia a tu propia imagen de contenedor.
Crear una cuenta de servicio para Cloud Scheduler
Debes crear una cuenta de servicio para asociarla a Cloud Scheduler y darle permiso para invocar tu servicio de Cloud Run. Puedes usar una cuenta de servicio que ya tengas para representar a Cloud Scheduler o crear una.
Para crear una cuenta de servicio y darle permiso para invocar el servicio de Cloud Run, sigue estos pasos:
Consola
En la Google Cloud consola, ve a la página Cuentas de servicio.
Selecciona un proyecto.
Escribe el nombre de la cuenta de servicio, que será el que se muestre en la Google Cloud consola.
La consola genera un ID de cuenta de servicio basado en este nombre. Google Cloud Edita el ID si es necesario. No podrás cambiarlo más adelante.
Opcional: Escribe una descripción de la cuenta de servicio.
Haz clic en Crear y continuar.
Opcional: Haz clic en el campo Selecciona un rol.
Selecciona Cloud Run > Invocador de Cloud Run.
Haz clic en Listo.
Línea de comandos
Crea la cuenta de servicio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Sustituir
- SERVICE_ACCOUNT_NAME con un nombre en minúsculas único en tu proyecto Google Cloud , por ejemplo,
my-invoker-service-account-name
. - DISPLAYED_SERVICE_ACCOUNT_NAME con el nombre que quieras
que se muestre en esta cuenta de servicio, por ejemplo, en la consola,
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME con un nombre en minúsculas único en tu proyecto Google Cloud , por ejemplo,
En Cloud Run, concede permiso a tu cuenta de servicio para invocar tu servicio:
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Sustituir
- SERVICE con el nombre del servicio que quieres que invoque Cloud Scheduler.
- SERVICE_ACCOUNT_NAME con el nombre de la cuenta de servicio.
- PROJECT_ID por el ID de tu proyecto. Google Cloud
Concede acceso al proyecto a tu cuenta de servicio para que pueda realizar acciones concretas con los recursos del proyecto:
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Sustituir
RESOURCE_ID: tu ID de proyecto Google Cloud .
PRINCIPAL: identificador de la entidad de seguridad o del miembro, que suele tener el siguiente formato: PRINCIPAL_TYPE:ID. Por ejemplo,
user:my-user@example.com
. Para ver una lista completa de los valores que puede tener PRINCIPAL, consulta la referencia de Policy Binding.
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Para crear una cuenta de servicio con Terraform, sigue estos pasos:
Crear una tarea de Cloud Scheduler
Deberás crear un trabajo que invoque tu servicio a las horas especificadas. Puedes usar la consola o la línea de comandos:
Para crear un trabajo, puedes usar la consola o la línea de comandos gcloud. Haga clic en la pestaña correspondiente:
Consola
Ve a la página de la consola de Cloud Scheduler.
Haz clic en Crear trabajo.
Asigne un nombre al trabajo.
Especifica la frecuencia o el intervalo de la tarea mediante una cadena de configuración. Por ejemplo, la cadena
0 */3 * * *
ejecuta el trabajo cada 3 horas. La cadena que proporciones aquí puede ser cualquier cadena compatible con crontab.Para obtener más información, consulta Configurar programaciones de trabajos.
En la lista desplegable, elige la zona horaria que se usará para la frecuencia del trabajo.
Especifica
HTTP
como objetivo:Especifica la URL completa de tu servicio. Por ejemplo,
https://myservice-abcdef-uc.a.run.app
. El trabajo enviará solicitudes a esta URL.Especifica el método HTTP. El método debe coincidir con el que espera el servicio de Cloud Run que has implementado anteriormente. El valor predeterminado es
POST
.Si quiere, especifique 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
oPUT
.Haz clic en Más para ver los ajustes de autenticación.
En el menú desplegable, selecciona Añadir token OIDC.
En el campo Cuenta de servicio, copia el correo de la cuenta de servicio que has creado anteriormente.
En el campo Audiencia, copie la URL completa de su servicio.
Haz clic en Crear para crear y guardar el trabajo.
Línea de comandos
Debes usar la autenticación OIDC para acceder a un servicio de Cloud Run autenticado desde Cloud Scheduler. La autenticación OIDC incluye las marcas de cuenta de servicio y audiencia. Para obtener más información, consulta Usar la autenticación con destinos HTTP.
Para crear la tarea de Cloud Scheduler, sigue estos pasos:
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
Sustituir
- HTTP-METHOD con el método HTTP (es decir, GET, POST, PUT, etc.).
- SERVICE-URL con la URL de tu servicio.
- SERVICE-ACCOUNT-EMAIL con el correo de tu cuenta de servicio.
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Para crear una tarea de Cloud Scheduler para el servicio de Cloud Run, sigue estos pasos:
Tu servicio de Cloud Run se activará mediante una solicitud de la tarea de Cloud Scheduler con la frecuencia que hayas definido. Para confirmarlo y monitorizarlo, consulta los registros de este servicio.
Siguientes pasos
- Almacenar y visualizar registros
- Monitorizar el estado y el rendimiento
- Activar desde Pub/Sub
- Invocar con HTTPS