Migra las listas de extracción a Pub/Sub (Python)

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:

  1. 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 archivo app.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.

  2. 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.

  3. 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 archivo app.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 carpeta lib 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 carpeta lib con lo siguiente:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. 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