Las bibliotecas cliente de Cloud ahora proporcionan la mayoría de las funciones que prestan los servicios agrupados en paquetes heredados. Para obtener más información, consulta las alternativas recomendadas que se mencionan a continuación.
Si migrar a una solución sin agrupar no es una opción para tu proyecto, quizás puedas continuar usando servicios agrupados en paquetes heredados en tus apps de Python 3 como resguardo. Este enfoque te brinda la flexibilidad para pasar a los servicios sin agrupar más adelante en el ciclo de migración.
Después de migrar de los servicios agrupados heredados, puedes seguir usando App Engine o migrar a Cloud Run. Cloud Run está diseñado para mejorar la experiencia de App Engine y, además, incorpora muchas de las mejores funciones del entorno estándar y del entorno flexible. Para comparar funciones y comprender cómo migrar, consulta la guía de comparación de App Engine y Cloud Run.
Google Cloud proporciona productos independientes que ofrecen una funcionalidad similar a la de algunos de los servicios en paquetes en el entorno de ejecución de Python 2. En esta guía, se recomienda usar proveedores de terceros o algunas otras soluciones para los servicios en paquetes que no están disponibles como productos independientes en Google Cloud, como el procesamiento de imágenes, la búsqueda y la mensajería.
En esta página, se presenta la ruta de migración para cada servicio empaquetado.
Información sobre los permisos de Google Cloud
Ya que tu app migrada y los servicios de Google Cloud que usa ya no se ejecutan en el mismo entorno de “zona de pruebas”, la app necesita autorización para acceder a cada servicio. Por ejemplo, para interactuar con Firestore en modo Datastore (Datastore) o Cloud Tasks, la app debe proporcionar las credenciales de una cuenta autorizada a fin de acceder a esos servicios.
De forma predeterminada, las apps 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 app.
Si se cumple alguna de las siguientes condiciones, deberás usar una técnica de autenticación alternativa que proporcione credenciales de forma explícita:
Tu app y la base de datos de Memorystore están en proyectos deGoogle Cloud diferentes.
Cambiaste las funciones asignadas a la cuenta de servicio predeterminada de App Engine.
Si deseas obtener información sobre técnicas de autenticación alternativas, consulta Configura la autenticación para aplicaciones de producción de servidor a servidor.
Autenticación para el desarrollo local
Para desarrollar o probar la app de forma local, te recomendamos crear y usar una cuenta de servicio. No uses la cuenta de servicio predeterminada de App Engine, ya que tiene un alto nivel de permisos para todo lo que se encuentra en tu proyecto. En su lugar, crea y usa una cuenta de servicio con el nivel más bajo de permisos que necesites para la tarea específica de desarrollo y prueba.
Si deseas obtener instrucciones para configurar una cuenta de servicio y conectarla a tu app, consulta Obtén y proporciona credenciales de cuenta de servicio de forma manual.
Instala bibliotecas cliente
La forma más fácil de usar los servicios de Google Cloud desde una app de Python es instalar la biblioteca cliente de Python del servicio.Los servicios de Google Cloud también proporcionan JSON REST y otras interfaces. Los pasos para la instalación de las bibliotecas cliente en el entorno de ejecución de App Engine son diferentes en el caso de las aplicaciones de Python 2 y las de Python 3.
Instala bibliotecas para las apps de Python 2
Para instalar una biblioteca a fin de que la use la app cuando se ejecuta 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.txt
en la misma carpeta que tu archivoapp.yaml
y agrega el nombre de una biblioteca cliente.Por ejemplo, se puede usar el siguiente archivo a fin de instalar bibliotecas para Pub/Sub y Cloud Tasks:
google-cloud-pubsub google-cloud-tasks
Usa
pip install
para instalar las bibliotecas en la carpeta que creaste. Por ejemplo:pip install -t lib -r requirements.txt
En el archivo
app.yaml
de la aplicación, especifica las bibliotecas RPC ysetuptools
de Google obligatorias y la biblioteca SSL opcional en la secciónlibraries
:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Algunas bibliotecas cliente no necesitan la biblioteca SSL. Si no incluyes la biblioteca SSL para una biblioteca cliente que la necesita, verás un error de SSL en el explorador de registros cuando tu app reciba una solicitud.
Crea un archivo
appengine_config.py
en la misma carpeta en la que está el archivoapp.yaml
si aún no tienes uno. Agrega lo siguiente al 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 la app use la distribución correcta de las bibliotecas cliente.En el archivo
appengine_config.py
del ejemplo anterior, se supone que la carpetalib
se encuentra en el directorio de trabajo actual. Si no puedes garantizar quelib
esté siempre 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 especificaste en el archivo appengine_config.py
al entorno de ejecución de Python 2.
Instala bibliotecas para las apps de Python 3
Para instalar una biblioteca a fin de que la use la app cuando se ejecuta en el entorno de ejecución de Python 3, sigue estos pasos:
Agrega el nombre de biblioteca al archivo
requirements.txt
de la app. Por ejemplo:google-cloud-ndb
App Engine sube todas las bibliotecas que se enumeran en el archivo requirements.txt
al entorno de ejecución de Python 3 de forma automática.
Rutas de migración para los servicios en paquetes de App Engine
Blobstore
Para almacenar y recuperar datos, usa Cloud Storage a través de las bibliotecas cliente de Cloud. Para comenzar, consulta Usa Cloud Storage y la guía Migra de Blobstore a Cloud Storage. Para simular esta migración, agrega el uso de Blobstore a una app de muestra y migra a Cloud Storage.
Datastore
Si tu app de Python 2 usa NDB para interactuar con Datastore, migra a la biblioteca de Cloud NDB. Cloud NDB está diseñado principalmente como una herramienta de transición para migrar apps de Python 2. Recomendamos que las apps de Python 3 usen la biblioteca cliente en modo Datastore.
Para obtener más información, consulta Migra a Cloud NDB. Para simular esta migración con una app de muestra, consulta Migra desde App Engine a Cloud NDB.
Imágenes
Puedes entregar imágenes desde Cloud Storage, entregarlas directamente o usar una red de distribución de contenidos (CDN) de terceros.
Para cambiar el tamaño de las imágenes, convertirlas y manipularlas, usa una biblioteca de procesamiento de imágenes, como Pillow o una interfaz de Python para ImageMagick.
A fin de usar una de estas bibliotecas de terceros, agrega la biblioteca como dependencia y actualiza tu código para llamar a las API de la biblioteca.
El servicio de imágenes de App Engine también proporcionó la funcionalidad para evitar solicitudes dinámicas a tu aplicación mediante el manejo del cambio de tamaño de la imagen a través de una URL de entrega. Si deseas una funcionalidad similar, puedes generar las imágenes con cambio de tamaño por adelantado y subirlas a Cloud Storage para entregarlas. De forma alternativa, puedes usar un servicio de red de distribución de contenidos (CDN) de terceros que permita cambiar el tamaño de las imágenes.
Logging
Recomendamos que actualices tu app para usar Cloud Logging, que admite funciones como ver registros en el explorador de registros, descargar registros, filtrar mensajes por gravedad y correlacionar los mensajes de apps con solicitudes específicas. Como alternativa, si prefieres la simplicidad en lugar de la exactitud de los datos, puedes escribir registros estructurados en stdout
o stderr
.
Para obtener más información, consulta Escribe y visualiza registros y Migra a Cloud Logging.
Correo electrónico
Para enviar un correo electrónico, usa un proveedor de correo electrónico de terceros, como SendGrid, Mailgun o Mailjet. Todos estos servicios ofrecen API para enviar correos electrónicos desde aplicaciones. En este momento, no está disponible una alternativa de terceros recomendada para la mensajería entrante.
Memcache
A fin de almacenar en caché los datos de la aplicación, usa Memorystore para Redis.
Para obtener más información, consulta Migra Memcache a Memorystore. Para simular esta migración, agrega el uso de Memcache a una app de muestra y migra a Memorystore para Redis.
En el caso de las apps que usan Memcache solo para reducir la latencia de las solicitudes de NDB (o Cloud NDB), usa la compatibilidad integrada de Cloud NDB para Redis en lugar de Memcache o Memorystore for Redis.
Módulos
Para obtener información y modificar los servicios en ejecución de tu aplicación, usa la API de Administrador de App Engine junto con una combinación de variables de entorno:
Información del servicio | Cómo acceder |
---|---|
ID de aplicación actual | Con la variable de entorno GAE_APPLICATION . |
ID del proyecto actual | Con la variable de entorno GOOGLE_CLOUD_PROJECT . |
Nombre del servicio actual | Con la variable de entorno GAE_SERVICE . |
Versión del servicio actual | Con la variable de entorno GAE_VERSION . |
ID de instancia actual | Con la variable de entorno GAE_INSTANCE . |
Nombre de host predeterminado | Método apps.get de la API de Administrador |
Lista de servicios | Método apps.services.list de la API de Administrador |
Lista de versiones para un servicio | Método apps.services.versions.list de la API de Administrador |
Versión predeterminada para un servicio, incluidas las divisiones del tráfico | Método apps.services.get de la API de Administrador |
Lista de instancias en ejecución para una versión | Método apps.services.versions.instances.list de la API de Administrador |
Para obtener más información sobre los datos disponibles sobre los servicios en ejecución de tu aplicación, consulta el entorno de ejecución de Python 3 .
Espacios de nombres
La API de espacios de nombres habilitó a las apps multiusuario a dividir los datos entre los usuarios con solo especificar una string de espacio de nombres única para cada usuario.
Si bien Datastore admite multiusuario directamente, otros servicios de Google Cloud no lo hacen. Si tu app multiusuario usa otros servicios de Google Cloud, deberás controlar la modalidad multiusuario de forma manual. Para tener instancias de servicios aisladas por completo, puedes crear proyectos nuevos de manera programática mediante la API de Cloud Resource Manager y acceder a los recursos de todos los proyectos.
OAuth
En lugar de usar el servicio de OAuth de App Engine para verificar los tokens de OAuth 2.0, usa el método oauth2.tokeninfo
de la API de OAuth 2.0.
Búsqueda
Aloja cualquier base de datos de búsqueda en el texto completo, como ElasticSearch, en Compute Engine y accede a ella desde tu servicio.
Lista de tareas en cola
El servicio de lista de tareas en cola de App Engine está disponible en dos modos diferentes. Migración desde ambos puntos hacia dos productos diferentes de Cloud independientes.
Tareas de envío
En lugar del servicio de tareas de aplicaciones en cola de la lista de tareas en cola de App Engine para la ejecución de código asíncrono, usa las bibliotecas cliente de Cloud Tasks con un extremo del entorno estándar de Python 3 como objetivo. Para obtener más información, consulta Migra listas de aplicaciones en cola a Cloud Tasks.
Para simular esta migración con una app de muestra, consulta Cómo usar las listas de aplicaciones en cola de App Engine en apps de Flask y Migra a Cloud Tasks.
Extraer tareas
Si usas el servicio de tareas de extracción de la lista de tareas en cola, por ejemplo, poner en cola tareas o mensajes que procesarán los trabajadores separados, Cloud Pub/Sub puede ser una buena alternativa. Ofrece garantías de funcionalidad y entrega similares. Al igual que otros servicios de Cloud, Pub/Sub proporciona bibliotecas cliente convenientes para acceder al servicio. Para obtener más información, consulta Escribe y responde mensajes de Pub/Sub y Tareas de extracción de listas de tareas en cola a Pub/Sub.
Para simular esta migración con una app de muestra, consulta Cómo usar las tareas de extracción de App Engine a una app de muestra y Migra a Pub/Sub.
Recuperación de URL
De forma predeterminada, el entorno de ejecución de Python 2.7 usa el servicio de recuperación de URL a fin de controlar las solicitudes HTTP(S) salientes, incluso si usas las bibliotecas de Python estándar para emitir esas solicitudes.
Si la app usa las API de recuperación de URL directamente, por ejemplo, para realizar solicitudes asíncronas, recomendamos migrar a una biblioteca de Python estándar, como la biblioteca de solicitudes.
Para obtener más información, consulta Migra solicitudes salientes.
Autenticación de usuarios
Para una alternativa a la API de usuarios, usa cualquiera de los mecanismos de autenticación basados en HTTP descritos en la página Autenticación de usuarios.