En esta página, se explica cómo migrar el código de la lista de extracción de la lista de tareas en cola a Pub/Sub. En este momento, se prefiere a Pub/Sub como opción para realizar el trabajo de la lista de extracción en App Engine.
Si la app usa listas de extracción y listas de aplicaciones en cola, usa esta guía para migrar las listas de extracción a Pub/Sub antes de migrar las listas de aplicaciones en cola al nuevo servicio de lista de aplicaciones en cola de Cloud Tasks. No se recomienda migrar las listas de extracción después de migrar las listas de aplicaciones en cola a Cloud Tasks, ya que es probable que el uso obligatorio del archivo queue.yaml
genere un comportamiento inesperado con Cloud Tasks.
Funciones no disponibles en Pub/Sub por el momento
Por el momento, las siguientes funciones de las listas de tareas en cola no están disponibles en Pub/Sub:
- Agrupación en lotes por etiqueta
- Anulación de duplicación automática
Precios y cuotas
Migrar las listas de extracción a Pub/Sub puede afectar el precio y las cuotas de la app.
Precios
Pub/Sub tiene sus propios precios. Al igual que con las listas de tareas en cola, enviar solicitudes a la app de App Engine con Pub/Sub puede generar costos.
Cuotas
Las cuotas de Pub/Sub son diferentes de las cuotas de las listas de tareas en cola. Al igual que sucede con las listas de tareas en cola, enviar solicitudes a la app de App Engine desde Pub/Sub puede afectar las cuotas de solicitudes de App Engine.
Antes de migrar
Si aún no lo has hecho, configura tu entorno de desarrollo de Python para usar una versión de Python que sea compatible con Google Cloud y, luego, instala herramientas de prueba para crear entornos de Python aislado.En las siguientes secciones, se analizan los pasos de configuración previos a migrar las listas de extracción a Pub/Sub.
Habilita la API de Pub/Sub
Para habilitar la API de Pub/Sub, haz clic en Habilitar en la API de Pub/Sub dentro de la biblioteca de la API. Si ves el botón Administrar en lugar del botón Habilitar, ya habilitaste la API de Pub/Sub para el proyecto y no necesitas hacerlo de nuevo.
Autentica la app en la API de Pub/Sub
Debes autenticar la app en la API de Pub/Sub. En esta sección, se analiza la autenticación para dos casos de uso diferentes.
Para desarrollar o probar la app de forma local, te recomendamos usar una cuenta de servicio. Si deseas obtener instrucciones para configurar una cuenta de servicio y conectarla a la app, lee Obtén y proporciona las credenciales de cuenta de servicio de forma manual.
Para implementar la app en App Engine, no necesitas proporcionar ninguna autenticación nueva. Las credenciales predeterminadas de la aplicación (ADC) infieren los detalles de autenticación para las apps de App Engine.
Descarga Google Cloud CLI
Descarga y, luego, instala Google Cloud CLI para usar la CLI de gcloud con la API de Pub/Sub si no la instalaste antes. Ejecuta el siguiente comando desde la terminal si ya instalaste Google Cloud CLI.
gcloud components update
Importa las bibliotecas cliente de Cloud
Sigue los pasos que se detallan a continuación a fin de usar la biblioteca cliente de Pub/Sub para Python con la app de App Engine:
Actualiza el archivo
app.yaml
: Sigue las instrucciones para tu versión de Python:Python 2
Para las apps de Python 2, agrega las versiones más recientes de la biblioteca
grpcio
.El siguiente es un archivo
app.yaml
de ejemplo:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest
Python 3
Para las apps de Python 3, especifica el elemento
runtime
en el archivoapp.yaml
con una versión de Python 3 compatible. Por ejemplo:runtime: python310 # or another support version
El entorno de ejecución de Python 3 instala bibliotecas de forma automática, por lo que no es necesario especificar bibliotecas integradas del entorno de ejecución de Python 2 anterior. Si tu app de Python 3 usa otros servicios agrupados en paquetes heredados durante la migración, puedes seguir especificando las bibliotecas integradas necesarias. De lo contrario, puedes borrar las líneas innecesarias en tu archivo
app.yaml
.Actualiza el archivo
requirements.txt
: Sigue las instrucciones para tu versión de Python:Python 2
Agrega las bibliotecas cliente de Cloud para Pub/Sub a tu lista de dependencias en el archivo
requirements.txt
.google-cloud-pubsub
Luego, ejecuta
pip install -t lib -r requirements.txt
a fin de actualizar la lista de bibliotecas disponibles para la app.Python 3
Agrega las bibliotecas cliente de Cloud para Pub/Sub a tu lista de dependencias en el archivo
requirements.txt
.google-cloud-pubsub
App Engine instala de forma automática estas dependencias durante la implementación de la app en el entorno de ejecución de Python 3, así que borra la carpeta
lib
, si existe una.En el caso de las apps de Python 2, si tu app usa bibliotecas integradas o copiadas, debes especificar esas rutas en el archivo
appengine_config.py
, que se encuentra en la misma carpeta que tu 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)
En el archivo
appengine_config.py
anterior, se supone que la carpetalib
se ubica en el directorio de trabajo actual. En algunos casos, como las pruebas de unidades, el directorio de trabajo actual puede ser diferente. Para evitar errores, puedes pasar de forma explícita la ruta completa a la carpetalib
con lo siguiente:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importa la biblioteca cliente de Pub/Sub para Python en cualquier archivo que use listas de extracción desde la API de listas de tareas en cola:
from google.cloud import pubsub
Pub/Sub y listas de extracción
Comparación de funciones
Pub/Sub envía el trabajo a los trabajadores a través de una relación entre el publicador y el suscriptor. Una suscripción de extracción en Pub/Sub es como una lista de extracción en las listas de tareas en cola porque el suscriptor extrae el mensaje del tema. En la siguiente tabla, se enumeran las características principales de las listas de extracción en las listas de tareas en cola y la característica asociada de las suscripciones de extracción en Pub/Sub.
Función de las listas de tareas en cola | Función de Pub/Sub |
---|---|
Cola | Tema |
Tarea | Mensaje |
Trabajador | Suscriptor |
Para obtener más información sobre la arquitectura de Pub/Sub, consulta Cloud Pub/Sub: Un servicio de mensajería a escala de Google.
Comparación del flujo de trabajo
A continuación, se muestra una comparación de un flujo de trabajo típico de una lista de extracción en las listas de tareas en cola y una suscripción de extracción en Pub/Sub.
Flujo de trabajo de listas de tareas en cola | Flujo de trabajo de Pub/Sub |
---|---|
Creas la lista de extracción | Creas el tema y suscribes al suscriptor (es decir, el trabajador) al tema |
Creas la tarea y la pones en cola | Creas el mensaje y lo publicas en el tema |
El trabajador asigna el tiempo de la tarea | El suscriptor extrae el mensaje del tema |
El trabajador procesa la tarea | El suscriptor procesa el mensaje |
El trabajador borra la tarea de la cola | El suscriptor confirmar recepción del mensaje |
La asignación de tiempo vence | El tema borra el mensaje una vez que todos los suscriptores confirmaron recepción del mensaje |
Crea suscripciones de extracción en Pub/Sub
Puedes usar una suscripción de extracción de Pub/Sub, como una lista de extracción de las listas de tareas en cola. Las suscripciones a un tema no vencen y pueden existir en forma simultánea para varios trabajadores. Esto significa que más de un trabajador puede procesar un mensaje, lo que conforma uno de los principales casos de uso de Pub/Sub. A fin de volver a crear las listas de extracción de las listas de tareas en cola como suscripciones de extracción de Pub/Sub, crea un tema para cada trabajador y suscríbete solo al trabajador asociado. Esto garantiza que exactamente un trabajador procese cada mensaje, como en las listas de tareas en cola. Si deseas obtener más información para crear y administrar suscripciones de extracción, lee sobre la administración de temas y suscripciones.
Borra las listas de extracción
Después de migrar las listas de extracción de las listas de tareas en cola a las suscripciones de extracción de Pub/Sub, bórralas de las listas de tareas en cola desde el archivo queue.yaml
. Recomendamos borrar cada lista de extracción antes de migrar la siguiente. Esto evita que la app duplique el trabajo que recibe de la nueva suscripción de extracción de Pub/Sub mientras migras las otras listas de extracción. Ten en cuenta que, si borras las listas de extracción de las listas de tareas en cola una por una en vez de hacerlo en una sola implementación, se puede generar un efecto mayor en la cuota de implementación de App Engine.
Una vez que hayas borrado todas las listas de extracción de las listas de tareas en cola, puedes omitir el archivo queue.yaml
en las implementaciones futuras de la app.
Si la app solo usa listas de extracción, quita cualquier referencia a la API de listas de tareas en cola en el código. Si la app usa listas de extracción y listas de aplicaciones en cola, puedes quitar las referencias a la API de listas de tareas en cola de los archivos que solo usan listas de extracción, o bien puedes esperar hasta que hayas migrado las listas de aplicaciones en cola y quitar las referencias a la API de listas de tareas en cola de todos los archivos.
Próximos pasos
- Documentación de Pub/Sub
- Migra listas de aplicaciones en cola
- Para obtener un instructivo práctico, consulta el codelab Migra de las listas de extracción de App Engine Task Queue a Pub/Sub.