Los controladores de Cloud Tasks se pueden ejecutar en cualquier extremo HTTP con una dirección IP externa, como 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 básicas de destino HTTP de manera programática y colocarlos en Colas de Cloud Tasks
Para las tareas que tienen objetivos HTTP (a diferencia de objetivos explícitos de App Engine, que son menos comunes), hay dos formas de crear tareas:
Método
BufferTask
: Usa este método si tu cola está configurada para almacenar en búfer las tareas frente a un servicio. La cola debe tener enrutamiento a nivel de la cola. Para la mayoría de los casos de uso, este es el mejor enfoque. En este enfoque, se usa el métodoBufferTask
.Método
CreateTask
: Es más complejo. Debes crear explícitamente un objeto de tarea. Usa este método si las tareas de tu fila tienen diferentes configuraciones de enrutamiento. En este caso, especificas el enrutamiento en el nivel de tarea y no puede usar el enrutamiento a nivel de la cola. En este enfoque, se usa el métodoCreateTask
.
Creación de tareas básicas (método BufferTask
)
En esta sección, se explica cómo crear una tarea mediante el envío de una solicitud HTTP. El método
que usas se llama BufferTask
.
Limitaciones
El método BufferTask
está sujeto a las siguientes limitaciones:
Bibliotecas cliente: No se admite el método
BufferTask
en los clientes. bibliotecas.API de RPC: El método
BufferTask
no es compatible con la API de RPC.Enrutamiento a nivel de la tarea: Este método no admite el enrutamiento a nivel de la tarea. Desde no hay lugar para agregar información de enrutamiento cuando se crea una tarea de esta manera, debes usar 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 la cola, consulta Configura el enrutamiento a nivel de la cola para tareas HTTP.
Llama al método BufferTask
En los siguientes ejemplos, se muestra cómo crear una tarea mediante el envío de un POST
HTTP
solicitud a la API de Cloud Tasks
Extremo buffer
.
curl
En el siguiente fragmento de código, se muestra un ejemplo de creación de tareas con el
BufferTask
con curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Reemplaza lo siguiente:
HTTP_METHOD
: Es el método HTTP para tu solicitud. para comoGET
oPOST
.PROJECT_ID
: El ID del proyecto de Google Cloud. Para obtener esto, ejecuta el siguiente comando en la terminal:gcloud config get-value project
LOCATION
: Es la ubicación de la cola.QUEUE_ID
: Es el ID de la cola.
Python
Creación avanzada de tareas (método CreateTask
)
En esta sección, se explica cómo crear una tarea mediante la construcción del objeto de tarea. Usas
el método CreateTask
Cuando creas una tarea con el método CreateTask
, creas y defines de forma explícita el objeto de la tarea. Debes especificar el servicio y el controlador que procesan
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 se debe ejecutar o limitar la cantidad de veces que deseas que se reintente la tarea si falla (consulta Configuración avanzada).
En los siguientes ejemplos, se llama al método CreateTask
para crear una tarea con las bibliotecas 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
Configura cuentas de servicio para la autenticación del controlador de destino HTTP
Cloud Tasks puede llamar a los controladores de destino HTTP 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 deben estar en el mismo proyecto que 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.
Haga clic en Crear cuenta de servicio.
En la sección Detalles de la cuenta de servicio, asigna un nombre a la cuenta. Console crea un nombre de cuenta de correo electrónico relacionado para la cuenta. Así es como hacer referencia a la cuenta. También puedes agregar una descripción de la cuenta. . Haz clic en Crear y continuar.
En la sección Otorga a esta cuenta de servicio acceso al proyecto, haz clic en Selecciona un rol. Busca y selecciona Agregador de elementos en cola de Cloud Tasks. Este rol le otorga permiso a la cuenta de servicio para agregar tareas a la cola.
Haz clic en + Agregar otra función.
Haga clic en Selecciona un rol. Busca y selecciona Usuario de cuenta de servicio. Esta permite que la cuenta de servicio autorice la cola para crear tokens en su nombre con 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, otorga el rol Invocador de Cloud Run. Puedes usar la cuenta de servicio que acabas de crear o cualquier otra cuenta de servicio en 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 autenticarse entre Cloud Tasks y un controlador de destino HTTP que requiera tal 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 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 de la cola al controlador a través de HTTPS. Puedes usar cualquiera
un token de ID
o un token de acceso.
Por lo general, los tokens de ID se deben usar para cualquier controlador que se ejecute en Google Cloud,
por ejemplo, en funciones de Cloud Run o Cloud Run. La excepción principal es
Para las APIs de Google alojadas en *.googleapis.com
: estas APIs esperan un token de acceso.
Puedes configurar la autenticación a nivel de la cola o de la tarea. Para configurar la autenticación a nivel de la cola, consulta Crea colas de Cloud Tasks. Si la autenticación se configura a nivel de la cola, esta configuración anula configuración a nivel de la tarea. Para configurar la autenticación a nivel de la tarea, especificar un Token de ID (OIDC) o token de acceso (OAuth) en la tarea a sí mismo.
Método BufferTask
Los siguientes ejemplos usan credenciales predeterminadas de la aplicación para autenticarse cuando
Usando 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"
Reemplaza lo siguiente:
HTTP_METHOD
: Es el método HTTP para tu solicitud. para comoGET
oPOST
.PROJECT_ID
: El ID del proyecto de Google Cloud. Para obtener esto, ejecuta el siguiente comando en la terminal:gcloud config get-value project
LOCATION
: Es la ubicación de la cola.QUEUE_ID
: Es el ID de la cola.ACCESS_TOKEN
: Es tu token de acceso. Para obtenerlo, ejecuta lo siguiente en la terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
Python
En la siguiente muestra de código, proporciona el valor de tu token de autenticación.
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 incluye 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 apropiado para el lenguaje en la construcción de 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
:
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 de destino HTTP, 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 destino servicio 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 contienen los siguientes encabezados:
Encabezado 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.
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 Otorgar acceso. Se abrirá la pantalla Otorgar acceso.
En la sección Agregar principales, agrega una dirección de correo electrónico con el formato:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Reemplaza PROJECT_NUMBER por el número de proyecto de Google Cloud.
En la sección Asignar roles, busca y selecciona Agente de servicio de Cloud Tasks.
Haz clic en Guardar.
gcloud
Busca tu número de proyecto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Reemplaza PROJECT_ID con el ID del 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 lo siguiente:
PROJECT_ID
: El ID de tu proyecto de Google CloudPROJECT_NUMBER
: el número de tu proyecto de Google Cloud.
Configuración avanzada
Hay varios atributos que puedes configurar en tu tarea. Para obtener lista, consulta la tarea definición del recurso.
Estos son algunos ejemplos de atributos que puedes personalizar:
- Nombres: Si eliges especificar un nombre para la tarea, Cloud Tasks puede usar ese nombre para garantizar la anulación de duplicación de tareas, aunque el procesamiento necesario puede agregar una mayor latencia.
- Programación: Puedes programar una tarea para una hora futura. Solo compatible
para
CreateTask
(no compatible conBufferTask
) - Configuración de reintentos: Configura el comportamiento de reintento de una tarea si esta
falla. Solo se admite para
CreateTask
(no paraBufferTask
).
¿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.