Los controladores de Cloud Tasks se pueden ejecutar en cualquier endpoint HTTP con una dirección IP externa, como GKE, Compute Engine o incluso un servidor web on-premise. Tus tareas se pueden ejecutar en cualquiera de estos servicios de forma fiable y configurable.
En esta página se muestra cómo crear mediante programación tareas de destino HTTP básicas y colocarlas en colas de Cloud Tasks. En la guía de inicio rápido se muestra cómo hacerlo con la CLI de Google Cloud.
En el caso de las tareas que tienen destinos HTTP (en lugar de destinos explícitos de App Engine, que son menos habituales), hay dos formas de crear tareas:
Método
CreateTask
: debes crear explícitamente un objeto de tarea. Usa este método si las tareas de tu cola tienen configuraciones de enrutamiento diferentes. En este caso, se especifica el enrutamiento a nivel de tarea y no se puede usar el enrutamiento a nivel de cola. Este enfoque usa el métodoCreateTask
.Método
BufferTask
: usa este método si tu cola está configurada para almacenar en búfer las tareas delante de un servicio. La cola debe tener un enrutamiento a nivel de cola. Este enfoque usa el métodoBufferTask
.
Crear una tarea con el método CreateTask
En esta sección se explica cómo crear una tarea construyendo el objeto de tarea. Usas el método CreateTask
.
Cuando creas una tarea con el método CreateTask
, creas y defines explícitamente el objeto de tarea. Debes especificar el servicio y el controlador que procesan la tarea.
También puedes enviar 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 para que se ejecute o limitar el número de veces que quieres que se vuelva a intentar la tarea si falla (consulta Configuración avanzada).
En los siguientes ejemplos se llama al método CreateTask
para crear una tarea mediante las bibliotecas de cliente de Cloud Tasks.
C#
Go
Java
Ten en cuenta el archivo pom.xml
:
Node.js
Ten en cuenta el archivo package.json
:
PHP
Ten en cuenta el archivo composer.json
:
Python
Ten en cuenta el archivo requirements.txt
:
Ruby
Crear una tarea con el método BufferTask
En esta sección se explica cómo crear una tarea enviando una solicitud HTTP. El método que usas se llama BufferTask
.
Limitaciones
El método BufferTask
está sujeto a las siguientes limitaciones:
Bibliotecas de cliente: el método
BufferTask
no se admite en las bibliotecas de cliente.API RPC: el método
BufferTask
no se admite en la API RPC.Ruta a nivel de tarea: este método no admite el enrutamiento a nivel de tarea. Como no hay ningún sitio donde añadir información de enrutamiento al crear una tarea de esta forma, debes 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 Configurar el enrutamiento a nivel de cola para tareas HTTP.
Llama al método BufferTask
En los siguientes ejemplos se muestra cómo crear una tarea enviando una solicitud HTTP POST
al endpoint buffer
de la API Cloud Tasks.
curl
El siguiente fragmento de código muestra un ejemplo de creación de tareas con el método BufferTask
mediante curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Haz los cambios siguientes:
HTTP_METHOD
: el método HTTP de tu solicitud. Por ejemplo,GET
oPOST
.PROJECT_ID
: el ID de tu proyecto de Google Cloud . Para obtenerlo, ejecuta lo siguiente en tu terminal:gcloud config get-value project
LOCATION
: la ubicación de tu cola.QUEUE_ID
: el ID de tu cola.
Python
Configurar una cuenta de servicio para la autenticación del controlador de destino HTTP
Cloud Tasks puede llamar a controladores de destino HTTP que requieran autenticación si tienes una cuenta de servicio con las credenciales adecuadas para acceder al controlador.
Puedes usar tu cuenta de servicio actual si le asignas los roles adecuados. Estas instrucciones explican cómo crear una cuenta de servicio específicamente para esta función. La cuenta de servicio que se use para la autenticación de Cloud Tasks debe estar en el mismo proyecto que tus colas de Cloud Tasks.
En la Google Cloud consola, ve a la página Cuentas de servicio.
Si es necesario, selecciona el proyecto adecuado.
Haz clic en Crear cuenta de servicio.
En la sección Detalles de la cuenta de servicio, asigna un nombre a la cuenta. La consola crea un nombre de cuenta de correo relacionado para la cuenta. Así es como se hace referencia a la cuenta. También puedes añadir una descripción de la cuenta. Haz clic en Crear y continuar.
En la sección Conceder a esta cuenta de servicio acceso al proyecto, haz clic en Seleccionar un rol. Busca y selecciona Cloud Tasks Enqueuer. Este rol da permiso a la cuenta de servicio para añadir tareas a la cola.
Haz clic en + Añadir otro rol.
Haz clic en Selecciona un rol. Busca y selecciona Usuario de cuenta de servicio. Este rol permite que la cuenta de servicio autorice a la cola para que cree tokens en su nombre con las credenciales de la cuenta de servicio.
Si tu controlador forma parte de Google Cloud, concede a la cuenta de servicio el rol asociado al acceso al servicio en el que se ejecuta tu controlador. Cada servicio de Google Cloud requiere un rol diferente. Por ejemplo, para acceder a un controlador en Cloud Run, concede el rol Invocador de Cloud Run. Puedes usar la cuenta de servicio que acabas de crear o cualquier otra cuenta de servicio de tu proyecto.
Haz clic en Hecho para terminar de crear la cuenta de servicio.
Cloud Tasks debe tener su propia cuenta de servicio con el rol Cloud Tasks Service Agent
asignado. De esta forma, puede generar tokens de encabezado basados en las credenciales asociadas a la cuenta de servicio de Cloud Tasks para autenticarse en el destino del controlador. La cuenta de servicio de Cloud Tasks con este rol asignado se crea automáticamente cuando habilitas la API Cloud Tasks, a menos que la hayas habilitado antes del 19 de marzo del 2019, en cuyo caso debes añadir el rol manualmente.
Usar tareas de destino HTTP con tokens de autenticación
Para autenticar la comunicación entre Cloud Tasks y un controlador de destino HTTP que requiera autenticación, Cloud Tasks crea un token de encabezado. Este token se basa en las credenciales de la cuenta de servicio Cloud Tasks Enqueuer
, identificada por su dirección de correo. La cuenta de servicio que se usa para la autenticación debe formar parte del mismo proyecto en el que se encuentre tu cola de Cloud Tasks. La solicitud, con el token de encabezado, se envía de la cola al controlador mediante HTTPS. Puedes usar un token de ID o un token de acceso.
Los tokens de ID se deben usar generalmente en cualquier controlador que se ejecute en Google Cloud, por ejemplo, en funciones o en Cloud Run. La principal excepción son las APIs de Google alojadas en *.googleapis.com
, que requieren un token de acceso.
Puedes configurar la autenticación a nivel de cola o de tarea. Para configurar la autenticación a nivel de cola, consulta Crear colas de Cloud Tasks. Si la autenticación se configura a nivel de cola, esta configuración anula la configuración a nivel de tarea. Para configurar la autenticación a nivel de tarea, especifica un token de ID (OIDC) o un token de acceso (OAuth) en la propia tarea.
Método CreateTask
En los siguientes ejemplos se usa el método CreateTask
con las bibliotecas de cliente de Cloud Tasks para crear una tarea que también incluye la creación de un token de encabezado. En los ejemplos se usan tokens de ID.
Para usar un token de acceso, sustituye el parámetro OIDC por el parámetro de OAuth adecuado para el idioma al crear la solicitud.
Go
Java
Ten en cuenta el archivo pom.xml
:
Node.js
Ten en cuenta el archivo package.json
:
Python
Ten en cuenta el archivo requirements.txt
:
Método BufferTask
En los siguientes ejemplos se usan las credenciales predeterminadas de la aplicación para autenticar al usar el método BufferTask
para crear una tarea.
curl
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Haz los cambios siguientes:
HTTP_METHOD
: el método HTTP de tu solicitud. Por ejemplo,GET
oPOST
.PROJECT_ID
: el ID de tu proyecto de Google Cloud . Para obtenerlo, ejecuta lo siguiente en tu terminal:gcloud config get-value project
LOCATION
: la ubicación de tu cola.QUEUE_ID
: el ID de tu cola.ACCESS_TOKEN
: tu token de acceso. Para obtenerlo, ejecuta lo siguiente en tu terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
Python
En el siguiente ejemplo de código, proporcione el valor de su token de autenticación.
Proporcionar 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: el tiempo de espera predeterminado de todos los controladores de tareas de destino HTTP es de 10 minutos, con un máximo de 30 minutos.
- Lógica de autenticación: si vas a escribir 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 implica, consulta OpenID Connect, en concreto la sección Validar un token de ID.
Encabezados: una solicitud de destino HTTP tiene encabezados definidos por la cola, que contienen información específica de la tarea que puede usar tu controlador. Son similares a los encabezados definidos en las solicitudes de tareas de App Engine, pero no idénticos. Estas cabeceras solo proporcionan información. No se deben usar como fuentes de identidad.
Si estos encabezados estaban presentes en una solicitud de un usuario externo a tu aplicación, se sustituirán por los internos. La única excepción son las solicitudes de administradores que hayan iniciado sesión en la aplicación, que pueden definir encabezados con fines de prueba.
Las solicitudes de destino HTTP siempre contienen los siguientes encabezados:
Header Descripción X-CloudTasks-QueueName
El nombre de la cola. X-CloudTasks-TaskName
El nombre "corto" de la tarea o, si no se ha especificado ningún nombre al crearla, un ID único generado por el sistema. Este es el valor de 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
El número de veces que se ha intentado la ejecución de esta tarea. En el primer intento, este valor es 0
. Este número incluye los intentos en los que la tarea ha fallado debido a códigos de error 5XX y nunca ha llegado a la fase de ejecución.X-CloudTasks-TaskExecutionCount
Número total de veces que la tarea ha recibido una respuesta del controlador. Como Cloud Tasks elimina la tarea una vez que se ha recibido una respuesta correcta, todas las respuestas anteriores del controlador han fallado. En esta cifra no se incluyen los fallos debidos a códigos de error 5XX. X-CloudTasks-TaskETA
La hora programada de la tarea, especificada en segundos 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
El motivo por el que se vuelve a intentar realizar la tarea.
Añadir manualmente el rol Agente de servicio de Cloud Tasks
Puedes añadir manualmente el rol Agente de servicio de Cloud Tasks (roles/cloudtasks.serviceAgent
) a tu cuenta de servicio de Cloud Tasks, que es el agente de servicio principal de Cloud Tasks.
Esto solo es necesario si habilitaste la API Cloud Tasks antes del 19 de marzo del 2019.
Consola
- Busca y copia el número de tu proyecto Google Cloud en la página Bienvenido de la consola Google Cloud .
En la consola, ve a la página IAM. Google Cloud
Haz clic en Conceder acceso. Se abrirá el panel Dar acceso.
En la sección Añadir principales, añade una dirección de correo con este formato:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Sustituye
PROJECT_NUMBER
por el Google Cloud número de tu proyecto.En la sección Asignar roles, busca y selecciona Agente de servicio de Cloud Tasks.
Haz clic en Guardar.
gcloud
Para encontrar tu número de proyecto, sigue estos pasos:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Sustituye PROJECT_ID por el ID del proyecto.
Copia el número.
Asigna el rol
Cloud Tasks Service Agent
a la cuenta de servicio de Cloud Tasks con el número de proyecto que has copiado:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role roles/cloudtasks.serviceAgent
Haz los cambios siguientes:
PROJECT_ID
: tu ID de proyecto Google Cloud .PROJECT_NUMBER
: tu Google Cloud número de proyecto.
Otras configuraciones
Puedes configurar varios atributos de las tareas. Para ver una lista completa, consulta la definición del recurso Task. Por ejemplo, puedes personalizar los siguientes atributos:
- Nombres: si decides especificar un nombre para la tarea, Cloud Tasks puede usarlo para asegurarse de que no se duplique, aunque el procesamiento necesario para ello puede aumentar la latencia.
- Programación: puedes programar una tarea para más adelante. Esta opción solo está disponible para
CreateTask
y no paraBufferTask
.
También puede configurar atributos de la cola, como las anulaciones de enrutamiento, los límites de frecuencia y los parámetros de reintento. Estas configuraciones se aplican a todas las tareas de una cola. Para obtener más información, consulta Configurar colas de Cloud Tasks.
Siguientes pasos
- Consulta más información sobre las tareas de destino HTTP en la referencia de la API RPC.
- Consulta más información sobre las tareas de destino HTTP en la referencia de la API REST.