En esta página se describe cómo migrar código de colas de salida de Colas de tareas a Cloud Tasks. Cloud Tasks es ahora la forma preferida de trabajar con las colas de inserción de App Engine.
Con Cloud Tasks, accedes al mismo servicio que con la API RPC Task Queues. Esto significa que no tienes que volver a crear las colas y tareas push que ya tengas. Sin embargo, debes migrar el código que crea o interactúa con colas o tareas push para usar la API Cloud Tasks.
Puedes crear colas de inserción y tareas de inserción, así como interactuar con ellas, mediante las APIs REST y RPC de Cloud Tasks, la biblioteca de cliente de Cloud Tasks, Google Cloud CLI y la consolaGoogle Cloud . En esta página se proporcionan ejemplos con la CLI de gcloud y la biblioteca de cliente de Cloud Tasks.
En Cloud Tasks, todas las colas funcionan como colas de inserción. En el resto de esta guía y en la documentación de Cloud Tasks, el término cola equivale al término cola de salida. Del mismo modo, el término tarea es equivalente al término tarea push.
Funciones no disponibles en Cloud Tasks
Las siguientes funciones no están disponibles en Cloud Tasks:
- Poner tareas en cola en transacciones de Datastore
- Usar la biblioteca de tareas diferidas en lugar de un servicio de trabajador
- Trabajar con tareas en aplicaciones multicliente
- Simular con el servidor de desarrollo local
- Agregar tareas asincrónicamente
Precios y cuotas
Migrar tus colas de salida a Cloud Tasks puede afectar a los precios y las cuotas de tu aplicación.
Precios
Cloud Tasks tiene sus propios precios. Al igual que con las colas de tareas, enviar solicitudes a tu aplicación de App Engine con una tarea puede generar costes.
Cuotas
Las cuotas de Cloud Tasks son diferentes de las de las colas de tareas. Al igual que con las colas de tareas, el envío de solicitudes a tu aplicación de App Engine desde Cloud Tasks puede afectar a tus cuotas de solicitudes de App Engine.
Antes de la migración
Si aún no lo has hecho, configura tu entorno de desarrollo de Python para usar una versión de Python compatible con Google Cloude instala herramientas de prueba para crear entornos de Python aislados.En las siguientes secciones se describen los pasos de configuración que debes seguir antes de migrar tus colas de inserción a Cloud Tasks.
Migrar colas para tareas extraídas
Antes de empezar, migra las colas de extracción antes de seguir las instrucciones de esta guía para migrar las colas de inserción. No se recomienda migrar colas de extracción después de migrar colas de salida, ya que es probable que el uso obligatorio del archivo queue.yaml
provoque un comportamiento inesperado en Cloud Tasks.
Proteger la configuración de colas
Una vez que empieces el proceso de migración a Cloud Tasks, modificar el archivo queue.yaml
puede provocar un comportamiento inesperado, por lo que no se recomienda. Protege la configuración de tu cola frente a modificaciones mediante el archivo queue.yaml
siguiendo estos pasos.
Configura gcloud CLI para que omita el archivo
queue.yaml
en futuras implementaciones.Añade tu archivo
queue.yaml
a un archivo.gcloudignore
. Para comprobar si ya tienes un archivo.gcloudignore
, puedes ejecutar el siguiente comando en el terminal desde el directorio de nivel superior de tu aplicación. Este comando mostrará el nombre del archivo si existe.ls -a | grep .gcloudignore
Para obtener más información sobre los archivos
.gcloudignore
, consulta la.gcloudignore
referencia.Restringe los permisos de tu archivo
queue.yaml
.Sigue las prácticas recomendadas que se describen en nuestra guía sobre cómo proteger la configuración de las colas.
Consulta información sobre Cloud Tasks y el archivo
queue.yaml
(opcional).Cuando se usa la API Cloud Tasks para gestionar la configuración de la cola, al desplegar un archivo
queue.yaml
se sobrescribe la configuración definida por Cloud Tasks, lo que puede provocar un comportamiento inesperado. Consulta el artículo Comparación entre la gestión de colas y queue.yaml para obtener más información.
Habilitar la API de Cloud Tasks
Para habilitar la API Cloud Tasks, haz clic en Habilitar en la página de la API Cloud Tasks de la biblioteca de APIs. Si ves el botón Gestionar en lugar del botón Habilitar, significa que ya has habilitado la API Cloud Tasks en tu proyecto y no tienes que volver a hacerlo.
Autenticar tu aplicación en la API Cloud Tasks
Debes autenticar tu aplicación en la API Cloud Tasks. En esta sección se explica la autenticación en dos casos prácticos diferentes.
Para desarrollar o probar tu aplicación de forma local, te recomendamos que uses una cuenta de servicio. Para obtener instrucciones sobre cómo configurar una cuenta de servicio y conectarla a tu aplicación, consulta Obtener y proporcionar credenciales de cuenta de servicio manualmente.
Para desplegar tu aplicación en App Engine, no tienes que proporcionar ninguna autenticación nueva. Las credenciales de aplicación predeterminadas (ADC) infieren los detalles de autenticación de las aplicaciones de App Engine.
Descargar la CLI de gcloud
Descarga e instala la CLI de gcloud para usarla con la API Cloud Tasks si no la has instalado antes. Ejecuta el siguiente comando desde tu terminal si ya tienes instalada la CLI de gcloud.
gcloud components update
Importar las bibliotecas de cliente de Cloud
Para usar la biblioteca de cliente de Cloud Tasks con tu aplicación de App Engine, sigue estos pasos:
Actualiza el archivo
app.yaml
. Sigue las instrucciones correspondientes a tu versión de Python:Python 2
En el caso de las aplicaciones de Python 2, añade las versiones más recientes de las bibliotecas
grpcio
ysetuptools
.A continuación, se muestra un ejemplo de archivo
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest - name: setuptools version: latest
Python 3
En el caso de las aplicaciones de Python 3, especifica el elemento
runtime
en el archivoapp.yaml
con una versión compatible de Python 3. Por ejemplo:runtime: python310 # or another support version
El tiempo de ejecución de Python 3 instala las bibliotecas automáticamente, por lo que no es necesario especificar las bibliotecas integradas del tiempo de ejecución de Python 2 anterior. Si tu aplicación Python 3 usa otros servicios antiguos incluidos al migrar, puedes seguir especificando las bibliotecas integradas necesarias. De lo contrario, puedes eliminar las líneas innecesarias del archivo
app.yaml
.Actualiza el archivo
requirements.txt
. Sigue las instrucciones correspondientes a tu versión de Python:Python 2
Añade las bibliotecas de cliente de Cloud para Cloud Tasks a tu lista de dependencias en el archivo
requirements.txt
.google-cloud-tasks
A continuación, ejecuta
pip install -t lib -r requirements.txt
para actualizar la lista de bibliotecas disponibles para tu aplicación.Python 3
Añade las bibliotecas de cliente de Cloud para Cloud Tasks a tu lista de dependencias en el archivo
requirements.txt
.google-cloud-tasks
App Engine instala automáticamente estas dependencias durante la implementación de la aplicación en el tiempo de ejecución de Python 3, así que elimina la carpeta
lib
si existe.En el caso de las aplicaciones de Python 2, si tu aplicación usa bibliotecas integradas o copiadas, debes especificar esas rutas en el archivo
appengine_config.py
, que se encuentra en la misma carpeta que el archivoapp.yaml
:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)
El archivo
appengine_config.py
da por hecho que el directorio de trabajo actual es donde se encuentra la carpetalib
. En algunos casos, como en las pruebas unitarias, el directorio de trabajo actual puede ser diferente. Para evitar errores, puedes introducir explícitamente la ruta completa a la carpetalib
mediante:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importa la biblioteca de cliente de Cloud Tasks en los archivos que usen colas de inserción de la API Task Queues:
from google.cloud import tasks
Cuando hayas completado la migración de todo el código que crea o interactúa con colas de inserción a Cloud Tasks, elimina las instrucciones que importan la API Task Queues. Por ejemplo,
from google.appengine.api import taskqueue
.
Crear y gestionar colas
En esta sección se describe cómo crear y gestionar colas mediante la API Cloud Tasks.
Con Cloud Tasks, no se usa un archivo queue.yaml
para crear o gestionar colas. En su lugar, usa la API Cloud Tasks. No se recomienda usar un archivo queue.yaml
y la API Cloud Tasks al mismo tiempo, pero puede que sea inevitable al migrar de Colas de tareas a Cloud Tasks, en función de tu aplicación. Consulta Usar la gestión de colas en lugar de queue.yaml para obtener información sobre las prácticas recomendadas.
Crear colas
Lee esta sección si tu aplicación crea colas de forma programática o si quieres crear colas adicionales desde la línea de comandos.
En Cloud Tasks, los nombres de las colas tienen el formato projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID
. La parte LOCATION_ID
del nombre de la cola corresponde a una Google Cloud región. La parte QUEUE_ID
del nombre de la cola equivale al campo name
de la cola de tareas. El nombre de la cola se genera durante la creación de la cola en función del proyecto, la región y el QUEUE_ID
que especifiques.
Por lo general, la ubicación de la cola (es decir, la región) debe ser la misma que la de tu aplicación. Las dos excepciones a esta regla son las aplicaciones que usan la región europe-west
y las que usan la región us-central
. En Cloud Tasks, estas regiones se denominan europe-west1
y us-central1
, respectivamente.
Puedes especificar una configuración de cola opcional durante la creación de la cola, pero también puedes hacerlo actualizando la cola una vez creada.
No es necesario que vuelvas a crear las colas que ya tengas. En su lugar, migre el código que interactúa con sus colas leyendo las partes pertinentes de esta guía.
Reutilizar nombres de colas
Debes esperar 7 días después de eliminar una cola para crear otra con el mismo ID de cola en el mismo proyecto y ubicación (es decir, región).
En el siguiente ejemplo se crean dos colas con Cloud Tasks. La primera cola tiene el ID queue-blue
y está configurada para enviar todas las tareas a la versión v2
del servicio task-module
a una velocidad de 5/s
. La segunda cola tiene el ID queue-red
y distribuye tareas a una frecuencia de 1/s
. Ambos se crean en el proyecto con el ID my-project-id
en la ubicación us-central1
.
Es el equivalente en Cloud Tasks de crear colas en Colas de tareas.
gcloud
La CLI de gcloud deduce el proyecto y la ubicación de la configuración de la CLI de gcloud.
gcloud tasks queues create queue-blue \ --max-dispatches-per-second=5 \ --routing-override=service:task-module,version:v2
gcloud tasks queues create queue-red \ --max-dispatches-per-second=1
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre cómo crear una cola de Cloud Tasks.
Definir la velocidad de procesamiento de la cola
En la siguiente tabla se enumeran los campos que difieren entre Task Queues y Cloud Tasks.
Campo Colas de tareas | Campo Cloud Tasks | Descripción |
---|---|---|
rate |
max_dispatches_per_second |
Frecuencia máxima con la que las tareas se distribuyen desde la cola. |
max_concurrent_requests |
max_concurrent_dispatches |
Número máximo de tareas simultáneas que se pueden distribuir desde la cola. |
bucket_size |
max_burst_size |
Cloud Tasks calcula una propiedad de solo lectura
En las colas de App Engine que se hayan creado o actualizado mediante un archivo |
total_storage_limit |
Obsoleto en Cloud Tasks | Cloud Tasks no admite la configuración de un límite de almacenamiento personalizado |
Puedes definir la tasa de procesamiento de la cola al crearla o actualizarla posteriormente. En el siguiente ejemplo se usa Cloud Tasks para definir la velocidad de procesamiento de una cola llamada queue-blue
que ya se ha creado. Si se ha creado o configurado queue-blue
mediante un archivo queue.yaml
, el siguiente ejemplo restablece max_burst_size
en función del valor max_dispatches_per_second
de 20
. Es el equivalente en Cloud Tasks de definir la tasa de procesamiento de la cola en Colas de tareas.
gcloud
gcloud tasks queues update queue-blue \ --max-dispatches-per-second=20 \ --max-concurrent-dispatches=10
biblioteca de cliente
Para obtener más información, consulta Definir límites de frecuencia.
Inhabilitar y reanudar colas
Cloud Tasks usa el término pausa de la misma forma que Task Queues usa el término inhabilitar. Si pausas una cola, las tareas que contiene dejarán de ejecutarse hasta que se reanude. Sin embargo, puedes seguir añadiendo tareas a una cola que esté en pausa. Cloud Tasks usa el término reanudar de la misma forma que Task Queues.
En el siguiente ejemplo se pausa una cola con el ID
queue1
. Es el equivalente de Cloud Tasks a inhabilitar
colas
en Colas de tareas.
gcloud
gcloud tasks queues pause queue1
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre cómo pausar colas.
Eliminar colas
Una vez que elimines una cola, debes esperar 7 días antes de crear otra con el mismo nombre. Si no puedes esperar 7 días, puedes eliminar todas las tareas de una cola y volver a configurar la cola.
En el siguiente ejemplo se elimina la cola con el ID
queue1
. Este es el equivalente de Cloud Tasks a la eliminación de colas en Colas de tareas.
gcloud
gcloud tasks queues delete queue1
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre cómo eliminar colas.
Crear y gestionar tareas
En esta sección se describe cómo crear y gestionar tareas con la API Cloud Tasks.
Crear tareas
En la siguiente tabla se enumeran los campos que difieren entre Task Queues y Cloud Tasks.
Campo Colas de tareas | Campo Cloud Tasks | Descripción |
---|---|---|
Novedades de Cloud Tasks | app_engine_http_request |
Crea una solicitud dirigida a un servicio de App Engine. Estas tareas se denominan tareas de App Engine. |
method |
http_method |
Especifica el método de solicitud. Por ejemplo, POST . |
url |
relative_uri |
Especifica el controlador de tareas. Ten en cuenta la diferencia en la última letra:
i para identificador uniforme de recursos en lugar de
l para localizador uniforme de recursos. |
target |
app_engine_routing |
Opcional. Especifica el service ,
version y instance de App Engine para una tarea de App Engine. Si no se definen, se usan el servicio, la versión y la instancia predeterminados. |
En el siguiente ejemplo se crea una tarea que se dirige a un servicio de App Engine llamado worker
con el controlador /update_counter
. Es el equivalente de Cloud Tasks a crear tareas en Colas de tareas.
gcloud
gcloud tasks create-app-engine-task --queue=default \ --method=POST --relative-uri=/update_counter --routing=service:worker \ --body-content=10
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre creación de tareas de App Engine.
Especificar el servicio de destino y el enrutamiento
Especificar el servicio, la versión y la instancia de destino de App Engine para las tareas de App Engine es opcional. De forma predeterminada, las tareas de App Engine se dirigen al servicio, la versión y la instancia que sean predeterminados en el momento en que se intente realizar la tarea.
Define la propiedad app_engine_routing
de la tarea durante su creación para especificar un servicio, una versión o una instancia de App Engine diferentes para la tarea.
Para dirigir todas las tareas de una cola determinada al mismo servicio, versión e instancia de App Engine, puede definir la propiedad app_engine_routing_override
en la cola.
Para obtener más información, consulta la referencia de Cloud Tasks sobre cómo configurar el enrutamiento.
Transferir datos al controlador
Al igual que con las colas de tareas, puedes transferir datos al controlador de dos formas con Cloud Tasks. Puedes enviar datos como parámetros de consulta en el URI relativo o en el cuerpo de la solicitud mediante los métodos HTTP POST o PUT.
Cloud Tasks usa el término body de la misma forma que Task Queues usa el término payload. En Cloud Tasks, el tipo de contenido predeterminado del cuerpo es octet-stream en lugar de texto sin formato. Puedes definir el tipo de contenido del cuerpo especificándolo en el encabezado.
En el siguiente ejemplo se pasa una clave al controlador
/update_counter
de dos formas diferentes. Es el equivalente en Cloud Tasks de transferir datos al controlador en las colas de tareas.
consola
gcloud tasks create-app-engine-task --queue=default --method=GET \ --relative-uri= /update_counter ?key=blue --routing=service:worker
gcloud tasks create-app-engine-task --queue=default --method=POST \ --relative-uri= /update_counter --routing=service:worker \ --body-content="{'key': 'blue'}"
biblioteca de cliente
Asignar nombres a las tareas
Especificar el nombre de la tarea es opcional. Si no especificas el nombre de la tarea, Cloud Tasks lo creará por ti. Para ello, generará un ID de tarea e inferirá el proyecto y la ubicación (es decir, la región) en función de la cola que hayas especificado al crear la tarea.
Los nombres de las tareas tienen el formato
projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID
. La parte TASK_ID
del nombre de la tarea equivale al campo name
de la tarea de colas de tareas.
Reutilizar nombres de tareas
Debes esperar antes de volver a usar el nombre de una tarea. El tiempo que debes esperar antes de hacerlo varía en función de si la cola que envía la tarea se ha creado en Cloud Tasks o en Colas de tareas.
En el caso de las tareas de las colas creadas con Colas de tareas (incluida la cola predeterminada), debes esperar aproximadamente 9 días después de que se haya eliminado o ejecutado la tarea original. En el caso de las tareas de las colas creadas con Cloud Tasks, debes esperar aproximadamente una hora después de que se haya eliminado o ejecutado la tarea original.
En el siguiente ejemplo se crea una tarea con el valor first-try
en TASK_ID
y se añade a la cola predeterminada. Es el equivalente en Cloud Tasks de asignar nombres a las tareas en Colas de tareas.
gcloud
La CLI de gcloud crea el nombre de la tarea infiriendo el proyecto y la ubicación a partir de tu configuración.
gcloud tasks create-app-engine-task first-try --queue=default \ --method=GET --relative-uri= /url/path
biblioteca de cliente
Con la biblioteca cliente, debes especificar el nombre completo de la tarea si quieres especificar el TASK_ID
. El proyecto y la ubicación deben coincidir con el proyecto y la ubicación de la cola a la que se añade la tarea.
Reintentar tareas fallidas
Puedes configurar la reintentos de tareas en las colas durante la creación de la cola o actualizando la cola. En la tabla siguiente se enumeran los campos de colas de tareas y los campos de Cloud Tasks correspondientes.
Campo Colas de tareas | Campo Cloud Tasks |
---|---|
task_retry_limit |
max_attempts |
task_age_limit |
max_retry_duration |
min_backoff_seconds |
min_backoff |
max_backoff_seconds |
max_backoff |
max_doublings |
max_doublings |
Parámetros de reintento específicos de la tarea
Los parámetros de reintento específicos de las tareas que se configuraron en Task Queues funcionan en Cloud Tasks, pero no puedes editarlos ni definirlos en tareas nuevas. Para cambiar los parámetros de reintento de una tarea que tiene parámetros de reintento específicos de la tarea, vuelve a crear la tarea con una cola de Cloud Tasks que tenga los parámetros de reintento que quieras.
En el siguiente ejemplo se incluyen distintas situaciones de reintento:
- En
fooqueue
, las tareas se vuelven a intentar hasta siete veces y durante un máximo de dos días desde el primer intento de ejecución. Una vez superados ambos límites, se produce un error permanente. - En
barqueue
, App Engine intenta volver a ejecutar las tareas, aumentando el intervalo de forma lineal entre cada reintento hasta alcanzar el tiempo de espera máximo y volviendo a intentar indefinidamente en el intervalo máximo (por lo que los intervalos entre solicitudes son 10 s, 20 s, 30 s, ..., 190 s, 200 s, 200 s, ...). - En
bazqueue
, el intervalo de reintento comienza en 10 s, después se duplica tres veces, aumenta de manera lineal y, por último, se reintenta indefinidamente en el intervalo máximo (por lo que los intervalos entre solicitudes son 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, etc.).
Es el equivalente de Cloud Tasks a la opción de reintentar tareas en las colas de tareas.
gcloud
Cuando defina opciones que especifiquen un número de segundos, debe incluir s
después del número entero (por ejemplo, 200s
y no 200
).
gcloud tasks queues create fooqueue \ --max-attempts=7 \ --max-retry-duration=172800s #2*60*60*24 seconds in 2 days
gcloud tasks queues create barqueue \ --min-backoff=10s \ --max-backoff=200s \ --max-doublings=0
gcloud tasks queues create bazqueue \ --min-backoff=10s \ --max-backoff=300s \ --max-doublings=3
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre configurar parámetros de reintento.
Eliminar tareas de una cola
Cuando eliminas una tarea, debes esperar 9 días antes de crear una tarea con el mismo nombre si la tarea estaba en una cola creada con un archivo queue.yaml
, o 1 hora si la tarea estaba en una cola creada con Cloud Tasks.
En el siguiente ejemplo se elimina la tarea con el ID foo
de la cola con el ID queue1
. Es el equivalente en Cloud Tasks de eliminar tareas en Colas de tareas.
gcloud
El proyecto y la ubicación de la tarea se infieren del proyecto predeterminado de la CLI de gcloud.
gcloud tasks delete foo --queue=queue1
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre cómo eliminar una tarea de una cola.
Purgar tareas
En el siguiente ejemplo, se eliminan todas las tareas de la cola con el ID
queue1
. Esta es la
equivalente de Cloud Tasks a la
eliminación
de tareas
en las colas de tareas.
gcloud
El proyecto y la ubicación de la cola se infieren del proyecto predeterminado de la CLI de gcloud.
gcloud tasks queues purge queue1
biblioteca de cliente
Para obtener más información, consulta la referencia de Cloud Tasks sobre cómo purgar todas las tareas de una cola.
Siguientes pasos
- Documentación de Cloud Tasks
- Biblioteca de cliente de Cloud Tasks
- Información general sobre la referencia de la API REST de Cloud Tasks
- Información general sobre la referencia de RPC de Cloud Tasks
- Para ver un tutorial, consulta el codelab sobre cómo migrar de las colas de inserción de la cola de tareas de App Engine a Cloud Tasks.