Con esta versión de destinos HTTP, los controladores de Cloud Tasks ahora pueden ejecutarse en cualquier extremo HTTP con una dirección IP pública, como Cloud Functions, Cloud Run y GKE., Compute Engine o incluso un servidor web local. Tus tareas pueden ejecutarse en cualquiera de estos servicios de manera confiable y configurable.
En esta página, se muestra cómo crear tareas de destino de HTTP de manera programática y colocarlas en colas de Cloud Tasks. Cuando desees procesar una tarea, debes crear un objeto de tarea nuevo y colocarlo en una cola. Puedes especificar el servicio y el controlador que procesarán la tarea y, de manera opcional, transferir los datos específicos de la tarea al controlador. También puedes ajustar la configuraciónde la tarea, como programar una hora en el futuro en la que se debe ejecutar o limitar la cantidad de veces que deseas que se reintente la tarea si falla. Si eliges especificar un nombre de la tarea, Cloud Tasks puede usar ese nombre a fin de garantizar la anulación de duplicación de tareas, aunque el procesamiento necesario puede agregar una mayor latencia.
En general, se crean tareas en el formato de una solicitud HTTP. El uso de las bibliotecas cliente y una cuenta de servicio, como en los siguientes ejemplos, puede ayudarte a administrar los detalles de la comunicación con el servidor de Cloud Tasks y facilitar la creación de tareas.
Crea tareas de destino HTTP
En los siguientes ejemplos, se crean solicitudes de tareas de destino HTTP que construyen la tarea, incluida la URL del controlador de tareas.
C#
Python
Ten en cuenta el archivo requirements.txt
:
Java
Ten en cuenta el archivo pom.xml
:
PHP
Ten en cuenta el archivo composer.json
:
Comienza a usarlo
Node.js
Ten en cuenta el archivo package.json
:
Ruby
Configura cuentas de servicio para la autenticación del controlador de destino HTTP
Cloud Tasks puede llamar a controladores de destino HTTP que requieren autenticación si tienes una cuenta de servicio con las credenciales adecuadas para acceder al controlador.
Si tienes una cuenta de servicio actual que deseas usar, puedes hacerlo. Solo otórgale las funciones adecuadas. Estas instrucciones abarcan la creación de una cuenta de servicio nueva, en particular, para esta función. La cuenta de servicio nueva o existente que se usa para la autenticación de Cloud Tasks debe estar en el mismo proyecto que tus colas de Cloud Tasks.
En Google Cloud Console, ve a la página Cuentas de servicio.
Si es necesario, selecciona el proyecto adecuado.
Haz clic en Crear cuenta de servicio.
Asigna un nombre visible a la cuenta. Console crea un nombre de cuenta de correo electrónico relacionado para la cuenta. Así se hace referencia a la cuenta. Si lo deseas, también puedes agregar una descripción de para qué es la cuenta.
Haz clic en Crear y continuar.
Haz clic en Seleccionar una función y selecciona Cloud Tasks > Cloud Tasks Agregador en cola. Esta función le otorga permiso a la cuenta de servicio para agregar tareas a la cola.
Haz clic en + Agregar otra función.
Haz clic en Seleccionar una función y selecciona Cuentas de servicio > Usuario de cuenta de servicio. Esta función permite que la cuenta de servicio autorice la cola para crear tokens en su nombre mediante las credenciales de la cuenta de servicio.
Si tu controlador es parte de Google Cloud, otorga a la cuenta de servicio la función asociada con el acceso al servicio en el que se ejecuta tu controlador. Cada servicio dentro de Google Cloud requiere una función diferente. Por ejemplo, para acceder a un controlador en Cloud Run, se necesita la función Invocador de Cloud Run, y así sucesivamente. Puedes usar la cuenta de servicio que acabas de crear o cualquier otra cuenta de servicio de tu proyecto.
Haz clic en Listo para terminar de crear la cuenta de servicio.
Cloud Tasks en sí debe tener una cuenta de servicio propia que tenga la función Cloud Tasks Service Agent
otorgada. Esto es para que pueda generar tokens de encabezado basados en las credenciales asociadas con la cuenta de servicio de Cloud Tasks a fin de autenticarse con tu objetivo de controlador. La cuenta de servicio de Cloud Tasks con esta función otorgada se crea automáticamente cuando habilitas la API de Cloud Tasks, a menos que la hayas habilitado antes del 19 de marzo de 2019. Si ese es el caso, debes agregar la función manualmente.
Usa tareas de destino HTTP con tokens de autenticación
Para autenticar entre Cloud Tasks y un controlador HTTP de destino que requiere esa autenticación, Cloud Tasks crea un token de encabezado. Este token se basa en las credenciales de la cuenta de servicio Cloud Tasks Enqueuer
, que se identifica por su dirección de correo electrónico. La cuenta de servicio que se usa para la autenticación debe ser parte del mismo proyecto en el que reside la cola de Cloud Tasks. La solicitud, con el token del encabezado, se envía a través de HTTPS desde la cola al controlador. Puedes usar un token de ID o un token de acceso.
Por lo general, los tokens de ID deben usarse para cualquier controlador que se ejecute en Google Cloud, por ejemplo, en Cloud Functions o Cloud Run. La excepción principal es para las API de Google alojadas en *.googleapis.com
: estas API esperan un token de acceso.
Debes especificar un token de ID (OIDC) o un token de acceso (OAuth) en la tarea.
Los siguientes ejemplos crean solicitudes de tareas que también incluyen la creación de un token de encabezado. Los tokens de ID se usan en los ejemplos. Para usar un token de acceso, reemplaza el parámetro OIDC por el parámetro de OAuth adecuado 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
:
Comienza a usarlo
Node.js
Ten en cuenta el archivo package.json
:
Proporciona tus propios controladores de tareas de destino HTTP
Los controladores de tareas de destino HTTP son muy similares a los controladores de tareas de App Engine, con las siguientes excepciones:
- Tiempos de espera: para todos los controladores de tareas HTTP de destino, el tiempo de espera predeterminado es de 10 minutos, con un máximo de 30 minutos.
- Lógica de autenticación: Si escribes tu propio código en el servicio de destino para validar el token, debes usar un token de ID. Para obtener más información sobre lo que esto implica, consulta OpenID Connect, en particular Valida un token de ID.
Encabezados: una solicitud de destino HTTP tiene encabezados establecidos por la cola, que contienen información específica de la tarea que puede usar el controlador. Estos son similares a los encabezados configurados en las solicitudes de tareas de App Engine, pero no son idénticos. Estos encabezados solo proporcionan información. No se deben usar como fuentes de identidad.
Si estos encabezados estaban presentes en una solicitud de usuario externo a tu app, se reemplazan por los internos. La única excepción es para solicitudes de administradores que hayan accedido a la aplicación y que tengan permitido establecer encabezados con fines de prueba.
Las solicitudes de destino HTTP siempre contendrán los siguientes encabezados:
Header Descripción X-CloudTasks-QueueName
El nombre de la cola. X-CloudTasks-TaskName
El nombre "breve" de la tarea o (si no se especificó un nombre durante su creación) un ID único generado por el sistema. Este es el valor my-task-id
en el nombre completo de la tarea, es decir, task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id
.X-CloudTasks-TaskRetryCount
La cantidad de veces que se reintentó esta tarea. Si es el primer intento, el valor es 0
. Este número incluye los intentos en los que la tarea falló debido a códigos de error de 5XX y nunca alcanzó la fase de ejecución.X-CloudTasks-TaskExecutionCount
La cantidad total de veces que la tarea recibió una respuesta de un controlador. Dado que Cloud Tasks borra la tarea una vez que se recibe una respuesta en la que se indica que se ejecutó correctamente, todas las respuestas anteriores que envió el controlador fueron ejecuciones con errores. Este número no incluye errores debido a los códigos de error 5XX. X-CloudTasks-TaskETA
La fecha y hora programadas para la tarea, que se especifica en la cantidad de segundos transcurridos desde el 1 de enero de 1970. Además, las solicitudes de Cloud Tasks pueden contener los siguientes encabezados:
Header Descripción X-CloudTasks-TaskPreviousResponse
El código de respuesta HTTP del reintento anterior. X-CloudTasks-TaskRetryReason
La razón por la que se volvió a intentar la tarea.
Agrega la función de agente de servicio de Cloud Tasks a tu cuenta de servicio de Cloud Tasks de forma manual
Esto es necesario solo si habilitas la API de Cloud Tasks antes del 19 de marzo de 2019.
Usar Console
- Encuentra el número del proyecto en la página de configuración del proyecto de Google Cloud.
- Copia el número.
- Abre la página de la Consola del administrador de IAM.
- Haga clic en
Add
. Se abrirá la pantallaAdd members
. En el cuadro de diálogo Nuevos miembros, agrega una dirección de correo electrónico con el formato:
service-[project-number]@gcp-sa-cloudtasks.iam.gserviceaccount.com
Reemplaza [project-number] con el número de proyecto anterior.
En el menú desplegable
Select a role
, seleccionaService Management
->Cloud Tasks Service Agent
.Haga clic en
Save
.
Usa gcloud
Busca tu número de proyecto:
gcloud projects describe [project-id] --format='table(projectNumber)'
Reemplaza [project-id] con el ID de tu proyecto.
Copia el número.
Otorga la función
Cloud Tasks Service Agent
a la cuenta de servicio de Cloud Tasks con el número del proyecto que copiaste:gcloud projects add-iam-policy-binding [project-id] --member serviceAccount:service-[project-number]@gcp-sa-cloudtasks.iam.gserviceaccount.com --role roles/cloudtasks.serviceAgent
Reemplaza [project-id] por el ID del proyecto y [project-number] por el número del proyecto anterior.
¿Qué sigue?
- Obtén más información sobre las tareas de destino HTTP en la referencia de la API de RPC.
- Obtén más información sobre las tareas de destino HTTP en la referencia de la API de REST.