Migrar de los servicios agrupados antiguos

La mayoría de las funciones que ofrecían los servicios agrupados antiguos ahora se proporcionan a través de las bibliotecas de cliente de Cloud. Para obtener más información, consulta las alternativas recomendadas que se indican a continuación.

Si no puedes migrar tu proyecto a una solución sin agrupar, puedes seguir usando los servicios antiguos agrupados en tus aplicaciones de Python 3 como alternativa. Este enfoque te ofrece flexibilidad para cambiar a servicios sin paquete más adelante en el ciclo de migración.

Una vez que hayas completado la migración de los servicios agrupados antiguos, podrás seguir usando App Engine o migrar a Cloud Run. Cloud Run está diseñado para mejorar la experiencia de App Engine e incorpora muchas de las mejores funciones del entorno estándar y del flexible. Para comparar las funciones y saber cómo migrar, consulta la guía de comparación de App Engine y Cloud Run.

Google Cloud proporciona productos independientes que ofrecen funciones similares a algunos de los servicios incluidos en el tiempo de ejecución de Python 2. En el caso de los servicios incluidos que no están disponibles como productos independientes en Google Cloud, como el procesamiento de imágenes, la búsqueda y la mensajería, esta guía recomienda proveedores externos u otras soluciones alternativas.

En esta página se presenta el proceso de migración de cada servicio agrupado.

Información sobre los permisos de Google Cloud

Como tu aplicación migrada y los servicios de Google Cloud que usa ya no se ejecutan en el mismo entorno aislado, tu aplicación necesita autorización para acceder a cada servicio. Por ejemplo, para interactuar con Firestore en el modo de Datastore (Datastore) o Cloud Tasks, tu aplicación debe proporcionar las credenciales de una cuenta autorizada para acceder a esos servicios.

De forma predeterminada, las aplicaciones del entorno de ejecución estándar de App Engine proporcionan las credenciales de la cuenta de servicio predeterminada de App Engine, que tiene autorización para acceder a las bases de datos del mismo proyecto que la aplicación.

Si se cumple alguna de las siguientes condiciones, debes usar una técnica de autenticación alternativa que proporcione credenciales de forma explícita:

  • Tu aplicación y la base de datos de Memorystore están en proyectos diferentes.Google Cloud

  • Has cambiado los roles asignados a la cuenta de servicio predeterminada de App Engine.

Para obtener información sobre técnicas de autenticación alternativas, consulta el artículo Configurar la autenticación para aplicaciones de producción de servidor a servidor.

Autenticación para el desarrollo local

Para desarrollar o probar tu aplicación de forma local, te recomendamos que crees y uses una cuenta de servicio. No uses la cuenta de servicio predeterminada de App Engine, ya que tiene un nivel de permisos alto para todo lo que hay en tu proyecto. En su lugar, crea y usa una cuenta de servicio con el nivel más bajo de permisos que necesites para tu tarea de desarrollo y prueba específica.

Para obtener instrucciones sobre cómo configurar una cuenta de servicio y conectarla a tu aplicación, consulta Obtener y proporcionar credenciales de cuentas de servicio manualmente.

Instalar bibliotecas de cliente

La forma más sencilla de usar los servicios de Google Cloud desde una aplicación Python es instalar la biblioteca de cliente de Python del servicio.Los servicios de Google Cloud también proporcionan interfaces REST JSON y otras interfaces. Los pasos para instalar las bibliotecas de cliente en el entorno de ejecución de App Engine son diferentes para las aplicaciones de Python 2 y Python 3.

Instalar bibliotecas para aplicaciones de Python 2

Para instalar una biblioteca que tu aplicación pueda usar cuando se ejecute en el entorno de ejecución de Python 2, sigue estos pasos:

  1. Crea un directorio para almacenar tus bibliotecas de terceros, como lib/.

  2. Crea un archivo requirements.txt en la misma carpeta que el archivo app.yaml y añade el nombre de una biblioteca de cliente.

    Por ejemplo, el siguiente archivo se puede usar para instalar bibliotecas de Pub/Sub y Cloud Tasks:

    google-cloud-pubsub
    google-cloud-tasks
    
  3. Usa pip install para instalar las bibliotecas en la carpeta que has creado. Por ejemplo:

    pip install -t lib -r requirements.txt
  4. En el archivo app.yaml de tu aplicación, especifica las bibliotecas setuptools y Google RPC obligatorias, así como la biblioteca SSL opcional, en la sección libraries:

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    Algunas bibliotecas de cliente no necesitan la biblioteca SSL. Si no incluyes la biblioteca SSL en una biblioteca de cliente que la necesite, verás un error de SSL en el Explorador de registros cuando tu aplicación reciba una solicitud.

  5. Crea un archivo appengine_config.py en la misma carpeta que el archivo app.yaml si aún no tienes uno. Añade lo siguiente a tu 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)

    Asegúrate de usar el módulo pkg_resources, que garantiza que tu aplicación use la distribución correcta de las bibliotecas de cliente.

    En el archivo appengine_config.py del ejemplo anterior, se presupone que la carpeta lib se encuentra en el directorio de trabajo actual. Si no puedes garantizar que lib siempre esté en el directorio de trabajo actual, especifica la ruta completa a la carpeta lib. Por ejemplo:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  6. Despliega la aplicación.

App Engine sube todas las bibliotecas del directorio que hayas especificado en el archivo appengine_config.py al entorno de ejecución de Python 2.

Instalar bibliotecas para aplicaciones de Python 3

Para instalar una biblioteca que tu aplicación pueda usar cuando se ejecute en el entorno de ejecución de Python 3, sigue estos pasos:

  1. Añade el nombre de la biblioteca al archivo requirements.txt de tu aplicación. Por ejemplo:

    google-cloud-ndb
    
  2. Despliega la aplicación.

App Engine sube automáticamente todas las bibliotecas que se indican en el archivo requirements.txt al entorno de ejecución de Python 3.

Procesos de migración de servicios agrupados de App Engine

Almacén de blobs

Para almacenar y recuperar datos, usa Cloud Storage a través de las bibliotecas de cliente de Cloud. Para empezar, consulta el artículo Usar Cloud Storage , así como la guía Migrar de Blobstore a Cloud Storage. Para simular esta migración, añade el uso de Blobstore a una aplicación de ejemplo y migra a Cloud Storage.

Datastore

Si tu aplicación Python 2 usa NDB para interactuar con Datastore, migra a la biblioteca Cloud NDB. Cloud NDB se ha diseñado principalmente como herramienta de transición para migrar aplicaciones de Python 2. Recomendamos que las aplicaciones de Python 3 usen la biblioteca de cliente del modo Datastore.

Para obtener más información, consulta Migrar a Cloud NDB. Para simular esta migración con una aplicación de ejemplo, consulta Migrar de App Engine NDB a Cloud NDB.

Imágenes

Puedes publicar imágenes desde Cloud Storage, publicarlas directamente o usar una red de distribución de contenido (CDN) de terceros.

El servicio Imágenes de App Engine también ofrecía funciones para evitar solicitudes dinámicas a tu aplicación gestionando el cambio de tamaño de las imágenes mediante una URL de servicio. Si quieres una función similar, puedes generar las imágenes redimensionadas con antelación y subirlas a Cloud Storage para publicarlas. También puedes usar un servicio de red de distribución de contenido (CDN) de terceros que ofrezca la función de cambiar el tamaño de las imágenes.

Almacenamiento de registros

Te recomendamos que actualices tu aplicación para usar Cloud Logging, que admite funciones como ver registros en el Explorador de registros, descargar registros, filtrar mensajes por gravedad y correlacionar mensajes de la aplicación con solicitudes específicas. Si prefieres la sencillez a la exactitud de los datos, puedes escribir registros estructurados en stdout o stderr. Para obtener más información, consulta los artículos sobre cómo escribir y ver registros y migrar a Cloud Logging.

Correo

Para mejorar la seguridad del correo y garantizar un envío fiable de grandes volúmenes de correos, te recomendamos que migres de la API Mail antigua a un servicio de correo basado en SMTP, como SendGrid, Mailgun o Mailjet.

Memcache

Para almacenar en caché datos de aplicaciones, usa Memorystore para Redis.

Para obtener más información, consulta el artículo Migrar Memcache a Memorystore. Para simular esta migración, añade el uso de Memcache a una aplicación de ejemplo y migra a Memorystore para Redis.

En el caso de las aplicaciones que usan Memcache solo para reducir la latencia de las solicitudes de NDB (o Cloud NDB), utiliza la compatibilidad integrada de Cloud NDB con Redis en lugar de Memcache o Memorystore para Redis.

Módulos

Para obtener información y modificar los servicios en ejecución de tu aplicación, usa una combinación de variables de entorno y la API Admin de App Engine:

Información sobre el servicio Cómo acceder
ID de la aplicación actual Variable de entorno GAE_APPLICATION
ID del proyecto actual Variable de entorno GOOGLE_CLOUD_PROJECT
Nombre del servicio actual Variable de entorno GAE_SERVICE
Versión actual del servicio Variable de entorno GAE_VERSION
ID de instancia actual Variable de entorno GAE_INSTANCE
Nombre de host predeterminado Método apps.get de la API Admin
Lista de servicios Método apps.services.list de la API Admin
Lista de versiones de un servicio Método apps.services.versions.list de la API Admin
Versión predeterminada de un servicio, incluidas las divisiones de tráfico Método apps.services.get de la API Admin
Lista de instancias en ejecución de una versión Método apps.services.versions.instances.list de la API Admin

Para obtener más información sobre los datos disponibles sobre los servicios en ejecución de tu aplicación, consulta el artículo sobre el entorno de ejecución de Python 3 .

Espacios de nombres

La API Namespaces permite que las aplicaciones multicliente particionen los datos entre los clientes simplemente especificando una cadena de espacio de nombres única para cada cliente.

Aunque Datastore admite el multitenancy directamente, otros servicios Google Cloud no lo hacen. Si tu aplicación multitenant usa otros servicios de Google Cloud, tendrás que gestionar la multitenencia manualmente. Para tener instancias de servicios completamente aisladas, puedes crear proyectos nuevos de forma programática con la API Cloud Resource Manager y acceder a recursos de diferentes proyectos.

OAuth

En lugar de usar el servicio OAuth de App Engine para verificar los tokens de OAuth 2.0, utiliza el método oauth2.tokeninfo de la API OAuth 2.0.

Aloja cualquier base de datos de búsqueda de texto completo, como Elasticsearch, en Compute Engine y accede a ella desde tu servicio.

Cola de tareas

El servicio de colas de tareas de App Engine está disponible en dos modos diferentes. La migración desde cualquiera de los dos puntos apunta a dos productos de Cloud independientes.

Tareas de salida

En lugar del servicio de tareas push de la cola de tareas de App Engine para la ejecución asíncrona de código, usa las bibliotecas de cliente de Cloud Tasks con un endpoint del entorno estándar de Python 3 como destino. Para obtener más información, consulta el artículo Migrar colas de salida a Cloud Tasks.

Para simular esta migración con una aplicación de ejemplo, consulta Cómo usar colas de inserción de App Engine en aplicaciones Flask y Migrar a Cloud Tasks.

Extraer tareas

Si usas el servicio de tareas extraídas de Colas de tareas, por ejemplo, para poner en cola tareas o mensajes que deben procesar trabajadores independientes, Cloud Pub/Sub puede ser una buena alternativa. Ofrece funciones y garantías de entrega similares. Al igual que otros servicios de Cloud, Pub/Sub proporciona bibliotecas de cliente para acceder al servicio. Para obtener más información, consulta la guía Escribir y responder a mensajes de Pub/Sub y la guía de migración Tareas de extracción de Task Queue a Pub/Sub.

Para simular esta migración con una aplicación de ejemplo, consulta cómo usar las tareas de extracción de App Engine en una aplicación de ejemplo y cómo migrar a Pub/Sub.

Obtención de URL

De forma predeterminada, el tiempo de ejecución de Python 2.7 usa el servicio de obtención de URLs para gestionar las solicitudes HTTP(S) salientes, aunque utilices bibliotecas estándar de Python para enviar esas solicitudes.

Si tu aplicación usa las APIs de URL Fetch directamente, por ejemplo, para hacer solicitudes asíncronas, te recomendamos que migres a una biblioteca estándar de Python, como la biblioteca Requests.

Para obtener más información, consulta Migrar solicitudes salientes.

Autenticación de usuarios

Como alternativa a la API Users, puedes usar cualquiera de los mecanismos de autenticación basados en HTTP que se describen en la página Autenticación de usuarios.