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:
Crea un directorio para almacenar tus bibliotecas de terceros, como
lib/.Crea un archivo
requirements.txten la misma carpeta que el archivoapp.yamly 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-tasksUsa
pip installpara instalar las bibliotecas en la carpeta que has creado. Por ejemplo:pip install -t lib -r requirements.txt
En el archivo
app.yamlde tu aplicación, especifica las bibliotecassetuptoolsy Google RPC obligatorias, así como la biblioteca SSL opcional, en la secciónlibraries:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latestAlgunas 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.
Crea un archivo
appengine_config.pyen la misma carpeta que el archivoapp.yamlsi aún no tienes uno. Añade lo siguiente a tu archivoappengine_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.pydel ejemplo anterior, se presupone que la carpetalibse encuentra en el directorio de trabajo actual. Si no puedes garantizar quelibsiempre esté en el directorio de trabajo actual, especifica la ruta completa a la carpetalib. Por ejemplo:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
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:
Añade el nombre de la biblioteca al archivo
requirements.txtde tu aplicación. Por ejemplo:google-cloud-ndb
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.
Buscar
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.