Puedes usar Cloud Tasks para poner en cola de forma segura una tarea que se procesará de forma asíncrona mediante un servicio de Cloud Run. Estos son algunos de los usos más habituales:
- Conservar las solicitudes durante incidentes de producción inesperados
- Suavizar los picos de tráfico retrasando el trabajo que no está orientado a los usuarios
- Reducir el tiempo de respuesta de los usuarios delegando operaciones en segundo plano lentas para que las gestione otro servicio, como las actualizaciones de bases de datos o el procesamiento por lotes
- Limitar la frecuencia de llamadas a servicios de backend, como bases de datos y APIs de terceros
En esta página se muestra cómo poner en cola tareas que se envían de forma segura a través del protocolo HTTPS a un servicio privado de Cloud Run. Describe el comportamiento necesario para el servicio privado de Cloud Run, los permisos de cuenta de servicio necesarios, la creación de colas de tareas y la creación de tareas.
Antes de empezar
Habilita la API Cloud Tasks en el proyecto que estés usando.
Desplegar un servicio de Cloud Run para gestionar tareas
Para desplegar un servicio que acepte tareas enviadas a la cola de tareas, despliega el servicio de la misma forma que cualquier otro servicio de Cloud Run. El servicio de Cloud Run debe devolver un código HTTP 200
para confirmar que la tarea se ha completado correctamente.
Cloud Tasks enviará las tareas a este servicio de Cloud Run como solicitudes HTTPS.
La respuesta a Cloud Tasks debe producirse en el tiempo de espera configurado. Para las cargas de trabajo que deban ejecutarse durante más tiempo que el tiempo de espera máximo de Cloud Tasks, considera la posibilidad de usar trabajos de Cloud Run.
Crear una cola de tareas
Línea de comandos
Para crear una cola de tareas, usa el comando
gcloud tasks queues create QUEUE-ID
Sustituye QUEUE-ID por el nombre que quieras dar a tu cola de tareas. Debe ser único en tu proyecto. Si se te pide que crees una aplicación de App Engine en tu proyecto, responde y
para crearla. Cloud Tasks usa esta información para la cola, así que asegúrate de elegir la misma ubicación que uses para tu servicio de Cloud Run.
La configuración predeterminada de la cola de tareas debería funcionar en la mayoría de los casos. Sin embargo, si quieres, puedes definir otros límites de frecuencia y parámetros de reintento.
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Para crear una cola de tareas, añade lo siguiente a tu archivo .tf
:
Para aplicar los cambios, introduce terraform apply
.
Crear una cuenta de servicio para asociarla a las tareas
Debes crear una cuenta de servicio que se asociará a las tareas en cola. Esta cuenta de servicio debe tener el rol de IAM Invocador de Cloud Run para permitir que la cola de tareas envíe tareas al servicio de Cloud Run. .
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 quieras que invoque Cloud Tasks.
- 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.
Añade lo siguiente a tu archivo .tf
:
Crea la cuenta de servicio:
En Cloud Run, concede permiso a tu cuenta de servicio para invocar tu servicio:
Para aplicar los cambios, introduce terraform apply
.
Crear tareas HTTP con tokens de autenticación
Cuando creas una tarea para enviarla a la cola de tareas, debes especificar el proyecto, la ubicación, el nombre de la cola, el correo electrónico de la cuenta de servicio creada anteriormente que se asociará a las tareas, la URL del servicio privado de Cloud Run que ejecutará la tarea y cualquier otro dato que necesites enviar. Puedes codificar estos valores, aunque los valores como el ID de proyecto, la ubicación y el correo de la cuenta de servicio se pueden obtener de forma dinámica del servidor de metadatos de Cloud Run.
Consulta la documentación de la API Cloud Tasks para obtener información sobre el cuerpo de la solicitud de tarea.
Ten en cuenta que las solicitudes que contienen cargas útiles de datos deben usar el método HTTP PUT
o POST
.
El código que pone en cola las tareas debe tener los permisos de gestión de identidades y accesos necesarios para hacerlo, como el rol Poner en cola de Cloud Tasks. Tu código tendrá los permisos de gestión de identidades y accesos necesarios si usas la cuenta de servicio predeterminada en Cloud Run.
En los siguientes ejemplos se crean solicitudes de tareas que también incluyen la creación de un token de encabezado. En los ejemplos se usan tokens de OIDC. Para usar un token de OAuth, sustituye el parámetro OIDC por el parámetro de OAuth adecuado en el idioma correspondiente al crear la solicitud.
Python
Ten en cuenta el archivo requirements.txt
:
Java
Ten en cuenta el archivo pom.xml
:
Go
Node.js
Ten en cuenta el archivo package.json
:
Siguientes pasos
- Almacenar y visualizar registros
- Monitorizar el estado y el rendimiento
- Activar desde Pub/Sub
- Invocar con HTTPS
- Ejecutar servicios según una programación