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.
Si eliges especificar un nombre para la tarea, Cloud Tasks puede usar ese nombre a fin de garantizar la anulación de la duplicación de tareas, aunque el procesamiento necesario para esto puede aumentar la latencia.
En general, se crean tareas en el formato de una solicitud HTTP. Usar 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
Existen dos formas de crear tareas para los destinos que tienen objetivos HTTP.
Método
BufferTask
(Vista previa): Usa este método si tu cola está configurada para almacenar en búfer tareas frente a un servicio. La cola debe tener enrutamiento a nivel de cola.Método
CreateTask
: Es más complejo. Debes crear explícitamente un objeto de tarea. Usa este método si las tareas en tu cola tienen diferentes configuraciones de enrutamiento. En este caso, debes especificar el enrutamiento a nivel de la tarea.
Método BufferTask
Para usar el método BufferTask
, tu cola debe usar el enrutamiento a nivel de cola (de lo contrario, la tarea no tendrá información de enrutamiento). Si tu cola aún no usa el enrutamiento a nivel de cola, consulta Configura el enrutamiento a nivel de cola para tareas HTTP.
Puedes usar el método BufferTask
en una biblioteca cliente, o de cualquier manera que tu aplicación haga solicitudes HTTP. En el siguiente ejemplo, se sigue el método BufferTask
para crear una tarea mediante curl
.
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2beta3/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Reemplaza lo siguiente:
HTTP_METHOD
: Es el método HTTP para tu solicitud, por ejemplo,GET
oPOST
.PROJECT_ID
: El ID del proyecto de Google Cloud. Para obtenerlo, ejecuta lo siguiente en la terminal:gcloud config get-value project
LOCATION
: Es la ubicación de la cola.QUEUE_ID
: El ID de la cola
Método CreateTask
Para crear una tarea con el método CreateTask
, debes crear y definir el objeto de tarea de forma explícita. Debes especificar el servicio y el controlador que procesarán la tarea.
De manera opcional, puedes pasar datos específicos de la tarea al controlador. También puedes ajustar la configuración de la tarea, como programar una hora en el futuro en la que debe ejecutarse o limitar la cantidad de veces que deseas que se vuelva a intentar la tarea si falla.
En los siguientes ejemplos, se sigue el método CreateTask
para crear una tarea con las bibliotecas cliente de Cloud Tasks.
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
:
Go
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 usó para la autenticación de Cloud Tasks debe estar en el mismo proyecto que tus colas de Cloud Tasks.
En la consola de Google Cloud, 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 Selecciona un rol y selecciona Cloud Tasks > Agregador de elementos en cola de Cloud Tasks. 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 tu cola de Cloud Tasks. La solicitud, con el token de encabezado, se envía, a través de HTTPS, de la cola al controlador. Puedes usar un token de ID o un token de acceso.
En 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.
Método BufferTask
Cuando usas el método BufferTask
para crear tareas, cualquier configuración de OIDC o OAuth a nivel de la cola anula la configuración a nivel de la tarea.
Para configurar la autenticación a nivel de cola, consulta
Crea colas de Cloud Tasks. Sin embargo, puedes autenticarte cuando creas la tarea. En el siguiente ejemplo, se usan credenciales predeterminadas de la aplicación para autenticarse cuando se crea una tarea:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2beta3/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Reemplaza lo siguiente:
HTTP_METHOD
: Es el método HTTP para tu solicitud, por ejemplo,GET
oPOST
.PROJECT_ID
: El ID del proyecto de Google Cloud. Para obtenerlo, ejecuta lo siguiente en la terminal:gcloud config get-value project
LOCATION
: Es la ubicación de la cola.QUEUE_ID
: El ID de la colaACCESS_TOKEN
: Es el token de acceso. Para obtenerlo, ejecuta lo siguiente en la terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
Método CreateTask
En los siguientes ejemplos, se usa el método CreateTask
con las bibliotecas cliente de Cloud Tasks para crear una tarea que también incluya la creación de un token de encabezado. En los ejemplos, se usan tokens de ID.
Para usar un token de acceso, 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
:
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 deben usarse 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.
- Haz clic en
Add
(Aceptar). 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.