Migra las listas de extracción a Pub/Sub

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

En esta sección, se analizan los temas que debes consultar antes de 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 la biblioteca cliente para Python

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. Crea un directorio para almacenar las bibliotecas de terceros, como lib/.

    mkdir lib
  2. Copia las bibliotecas necesarias.

    Te recomendamos usar un archivo de requisitos pip en lugar de instalar las bibliotecas una por una desde la línea de comandos. Crea un archivo requirements.txt en la misma carpeta en la que está el archivo app.yaml si aún no tienes un archivo requirements.txt. Agrega la siguiente línea:

    google-cloud-pubsub
    

    Usa pip (versión 6 o posterior) con la marca -t <directory> para copiar la biblioteca de Pub/Sub que especificaste en el archivo requirements.txt en la carpeta que creaste en el paso anterior. Por ejemplo:

    pip install -t lib -r requirements.txt
    
  3. Especifica la biblioteca de RPC en la sección libraries del archivo app.yaml:

    libraries:
    - name: grpcio
      version: 1.0.0
    
  4. Usa el módulo pkg_resources a fin de asegurarte de que la app use la distribución correcta de la biblioteca cliente de Pub/Sub para Python.

    Crea un archivo appengine_config.py en la misma carpeta en la que está el archivo app.yaml si aún no tienes uno. Agrega lo siguiente al archivo appengine_config.py:

    # appengine_config.py
    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')
    
  5. 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_v1

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 de tareas 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