En esta página se explican las diferencias entre usar la API Cloud Tasks para gestionar colas y subir un archivo queue.yaml
de Cloud Tasks para conseguir los mismos objetivos. Asimismo, analiza algunos de los obstáculos de los mecanismos de mezcla y cómo lidiar con problemas comunes.
Introducción
La API de Cloud Tasks proporciona una interfaz independiente de App Engine para el servicio de colas de tareas de App Engine. Como parte de esa interfaz, ofrece la posibilidad de gestionar colas, incluso a través de la consola o del comando gcloud
. Las colas creadas por la API Cloud Tasks se pueden usar desde el SDK de App Engine y viceversa. Para mantener la compatibilidad, se puede usar el archivo de configuración que usa el SDK de App Engine, queue.yaml
, para crear y configurar colas que se usarán a través de la API Cloud Tasks. Sin embargo, combinar la configuración mediante archivos con la configuración a través de la API Cloud Tasks puede tener consecuencias inesperadas.
Errores al combinar queue.yaml
con métodos de gestión de colas de Cloud Tasks
En el caso del servicio subyacente,los archivos queue.yaml
son definitivos. Si subes un queue.yaml
que omite las colas que ya hay en tu proyecto, independientemente de cómo se hayan creado, esas colas se inhabilitarán o se pausarán. Por lo tanto, si usas la API Cloud Tasks para llamar a CreateQueue
o UpdateQueue
y, a continuación, subes un archivo queue.yaml
que los omite, las colas que se crearon en las llamadas de Cloud Tasks se inhabilitarán.
Veamos la siguiente situación:
- Llama a
CreateQueue
para crear una cola llamada "cloud-tasks-queue". Sube un archivo
queue.yaml
con el siguiente contenido:queue: - name: queue-yaml-queue
¿Cuál es el estado actual de las colas en este proyecto? La cola llamada "cloud-tasks-queue" y cualquier otra cola que existiera anteriormente tienen el estado DISABLED
, y la cola llamada "queue-yaml-queue" tiene el estado RUNNING
.
Este comportamiento puede sorprender si creas colas a través de la API de Cloud Tasks. Las instrucciones a continuación explican cómo reanudar una cola inhabilitada.
Del mismo modo, si una cola está inhabilitada en la API Cloud Tasks, pero aparece más tarde en un archivo queue.yaml
subido, se reanuda.
Si se elimina una cola con el método DeleteQueue
y, más adelante, aparece en un archivo queue.yaml
, la subida de queue.yaml
puede fallar porque los nombres de las colas no se pueden volver a utilizar durante varios días después de la eliminación.
Prácticas recomendadas
Si no tienes experiencia con Cloud Tasks o App Engine, usa la API Cloud Tasks exclusivamente para gestionar tus colas y evita usar queue.yaml
por completo. Los métodos de administración de colas de Cloud Tasks brindan a los usuarios más opciones para crear, actualizar y eliminar colas.
Sin embargo, si ya usas queue.yaml
, solo deberías plantearte cambiar a los métodos de gestión de colas si conoces los inconvenientes de combinar queue.yaml
con los métodos de gestión de colas de Cloud Tasks.
Para evitar que los usuarios mezclen métodos de gestión de tareas, una opción es crear una aplicación web o una herramienta de línea de comandos que todos los usuarios deban usar para crear, actualizar y eliminar colas. Si la herramienta usa métodos de gestión de colas de Cloud Tasks o queue.yaml
, es un detalle de implementación de la herramienta que no debe preocupar a los usuarios. Si los usuarios deben usar la herramienta, puedes garantizar que no se mezclen inadvertidamente los métodos de gestión de colas de Cloud Tasks y el uso de queue.yaml
.
Para fomentar el uso de esta herramienta, puedes concederle roles de administrador de colas y requerir que los usuarios se autentiquen para usarla. Para obtener más información sobre la gestión de accesos, consulta Configuración de colas seguras.
Depuración
Puedes inspeccionar los registros de auditoría de la actividad de administración de tu proyecto para recuperar el historial de cambios en la configuración de la cola, incluidas las creaciones, las actualizaciones y las eliminaciones:
gcloud logging read \
'protoPayload.methodName=
(com.google.appengine.legacy.queue_created OR
com.google.appengine.legacy.queue_updated OR
google.cloud.tasks.v2.CloudTasks.CreateQueue OR
google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
google.cloud.tasks.v2.CloudTasks.DeleteQueue)'
Por ejemplo, si se inhabilita una cola con una subida de queue.yaml
, aparecerá el mensaje "Cola '[QUEUE_NAME]' inhabilitada" en el registro de auditoría mediante el método com.google.appengine.legacy.queue_updated
.
Cómo reanudar una cola inhabilitada por una subida de queue.yaml
Si combina queue.yaml
con métodos de gestión de colas de Cloud Tasks, puede que al subir un archivo queue.yaml
se inhabilite por error una cola creada mediante la API Cloud Tasks.
Para reanudar la cola, puedes llamar a ResumeQueue
en la cola o añadirla a queue.yaml
y subirla. Ten en cuenta que, si has definido un valor personalizado para rate
en la configuración de queue.yaml
de la cola,
ResumeQueue
restablece el valor predeterminado rate
de la cola. Esto se refleja en el campo maxDispatchesPerSecond
de la respuesta a ResumeQueue
.
Cuotas
Si usas queue.yaml
para crear tus colas, puedes crear un máximo de 100 colas de forma predeterminada. Las colas creadas con la API Cloud Tasks tienen un máximo predeterminado de 1000 colas. Al igual que en otros casos, combinar métodos de la API de queue.yaml
y Cloud Tasks puede producir resultados inesperados. Por ejemplo, supongamos que creas algunas colas con queue.yaml
y, después, obtienes un aumento de cuota a 2000, por ejemplo. Si después usas el método de la API de Cloud Tasks para crear más colas, recibirás errores de cuota. Para solucionarlo, presenta una solicitud mediante la opción Editar cuotas de la página Cuotas de la Google Cloud consola.
Información adicional sobre los métodos de administración de colas de Cloud Tasks
Retraso en la configuración e inicio de las colas
Los cambios en la configuración de la cola pueden tardar varios minutos en surtir efecto. Por ejemplo, después de llamar a CreateQueue
o UpdateQueue
, pueden pasar varios minutos antes de que puedas llamar correctamente a CreateTask
en esa cola.
Cloud Tasks y la cola de default
App Engine
La cola de App Engine llamada "default" recibe un tratamiento especial en el SDK de App Engine y en la API Cloud Tasks.
Si la cola default
aún no existe, se crea en las siguientes situaciones:
- Cuando se añade una tarea por primera vez a la
default
colamediante el SDK de App Engine. - Cuando se sube un archivo
queue.yaml
que especifica una coladefault
. - Cuando se llama a
CreateQueue
oUpdateQueue
para crear la coladefault
.
Para conservar la compatibilidad con App Engine, Cloud Tasks aplica las siguientes restricciones:
- Si se crea una cola llamada "default", debe ser una cola que use tareas de App Engine.
- Una vez creada, los usuarios no pueden eliminar la cola
default
.
En la API Cloud Tasks, también se aplica lo siguiente a la default
cola:
- La API Cloud Tasks no crea automáticamente la cola
default
ni ninguna otra. - Al igual que en cualquier otra cola, si se llama a
GetQueue
en la coladefault
, se produce un error de no encontrado si la llamada se realiza antes de que se cree la cola. - Del mismo modo, la cola
default
no aparece en el resultado deListQueues
antes de que se cree. - La configuración de la cola
default
se puede cambiar con la llamadaUpdateQueue
.
Siguientes pasos
- Consulta los métodos disponibles en la API RPC Cloud Tasks en los documentos de referencia.
- Consulta los métodos disponibles en la API REST Cloud Tasks en los documentos de referencia.
- Consulta información sobre
queue.yaml
.