Puedes usar Cloud Tasks para poner en cola de forma segura una tarea que un servicio de Cloud Run procesará de forma asíncrona. Los casos prácticos más comunes incluyen los siguientes:
- Preservar las solicitudes mediante incidentes de producción imprevistos
- Suavizar los incrementos de tráfico mediante el retraso del trabajo que no está orientado al usuario
- Acelerar el tiempo de respuesta del usuario mediante la delegación de operaciones lentas en segundo plano para que las controle otro servicio, como actualizaciones de bases de datos o procesamiento por lotes
- Limitar la tarifa de llamadas a servicios de creación de copias de seguridad, como bases de datos y API de terceros
En esta página, se muestra cómo poner en cola tareas que se envían de forma segura mediante el protocolo HTTPS a un servicio privado de Cloud Run. Se describe el comportamiento requerido para el servicio privado de Cloud Run, los permisos necesarios de la cuenta de servicio, la creación de listas de tareas en cola y la creación de tareas.
Antes de comenzar
Habilita la API de Cloud Tasks en el proyecto que estás usando.
Implementa un servicio de Cloud Run para controlar tareas
Para implementar un servicio que acepte tareas enviadas a la lista de tareas en cola, implementa el servicio de la misma manera que cualquier otro servicio de Cloud Run. El servicio de Cloud Run debe mostrar un código 200
HTTP para confirmar el éxito después de que se completó el procesamiento de la tarea.
Cloud Tasks enviará las tareas a este servicio de Cloud Run como solicitudes HTTPS.
La respuesta a Cloud Tasks debe ocurrir dentro del tiempo de espera configurado. Para las cargas de trabajo que necesitan ejecutarse más tiempo que el tiempo de espera máximo de Cloud Tasks, considera usar trabajos de Cloud Run.
Lleve a cabo la implementación con Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para crear un servicio, agrega lo siguiente al archivo .tf
:
Crea una lista de tareas en cola
Línea de comandos
Para crear una lista de tareas en cola, usa el siguiente comando:
gcloud tasks queues create QUEUE-ID
Reemplaza QUEUE-ID por el nombre que deseas asignar a la lista de tareas en cola: debe ser único en el proyecto. Si se te solicita que crees una app de App Engine en el proyecto, responde y
para crearla. Cloud Tasks usa esto para la cola: asegúrate de elegir la misma ubicación que usas para el servicio de Cloud Run.
La configuración predeterminada de la lista de tareas en cola debería funcionar en la mayoría de los casos. Sin embargo, si lo deseas, puedes establecer diferentes límites de frecuencia y parámetros de reintento.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para crear una lista de tareas en cola, agrega lo siguiente al archivo .tf
:
Ingresa terraform apply
para aplicar los cambios.
Crea una cuenta de servicio para asociar con las tareas
Debes crear una cuenta de servicio que se asociará con las tareas en cola. Esta cuenta de servicio debe tener la función de IAM de Invocador de Cloud Run para permitir que la lista de tareas en cola envíe las tareas al servicio de Cloud Run. .
Console
En la consola de Google Cloud, ve a la página Cuentas de servicio.
Selecciona un proyecto
Ingresa un nombre de cuenta de servicio para mostrar en la consola de Google Cloud.
La consola de Google Cloud 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.
Opcional: Ingresa una descripción de la cuenta de servicio.
Haz clic en Crear y continuar.
Opcional: Haz clic en el campo Seleccionar una función.
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"
Reemplazar
- 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
- SERVICE_ACCOUNT_NAME por un nombre único en minúscula dentro del proyecto de Google Cloud, por ejemplo,
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
Reemplazar
- SERVICE por el nombre del servicio que deseas que Cloud Tasks invoque
- SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio
- PROJECT_ID por el ID del proyecto de Google Cloud.
Otórgale a tu cuenta de servicio acceso al proyecto para que tenga el permiso de completar acciones específicas en los recursos de tu proyecto.
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Reemplazar
RESOURCE_ID es el ID del proyecto de Google Cloud.
PRINCIPAL: Un identificador para la principal o el miembro, que suele tener el siguiente formato: PRINCIPAL_TYPE:ID. Por ejemplo,
user:my-user@example.com
Si deseas obtener una lista completa de los valores que PRINCIPAL puede tener, consulta la referencia sobre la vinculación de políticas.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Agrega lo siguiente a tu archivo .tf
:
Crea la cuenta de servicio:
En Cloud Run, debes otorgar permiso a la cuenta de servicio para invocar el servicio:
Ingresa terraform apply
para aplicar los cambios.
Crea tareas HTTP con tokens de autenticación
Cuando creas una tarea para enviar a la lista de tareas en cola, debes especificar el proyecto, la ubicación, el nombre de la cola, el correo electrónico de la cuenta de servicio que creaste antes a fin de asociarla con las tareas, la URL del servicio privado de Cloud Run que ejecutará la tarea y cualquier otro dato que debas enviar. Puedes elegir codificar estos valores, aunque los valores como el ID del proyecto, la ubicación y el correo electrónico de la cuenta de servicio se pueden recuperar de forma dinámica desde el servidor de metadatos de Cloud Run.
Consulta la documentación de la API de Cloud Tasks para obtener detalles sobre el cuerpo de la solicitud de la 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 las tareas en cola debe tener los permisos de IAM necesarios para hacerlo, como la función Agregador de elementos en cola de Cloud Tasks. El código tendrá los permisos de IAM necesarios si usas la cuenta de servicio predeterminada en Cloud Run.
Los siguientes ejemplos crean solicitudes de tareas que también incluyen la creación de un token de encabezado. Se usan los tokens OIDC en los ejemplos. A fin de usar un token de OAuth, reemplaza el parámetro OIDC por el parámetro de OAuth apropiado para el lenguaje en la construcción de 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
:
¿Qué sigue?
- Escribe y visualiza registros
- Supervisa el estado y el rendimiento
- Activa desde Pub/Sub
- Invoca con HTTPS
- Ejecuta servicios de manera programada