Python 2 ya no es compatible con la comunidad. Recomendamos que migres las apps de Python 2 a Python 3.

Descripción general sobre cómo migrar servicios de App Engine en paquetes

El entorno de ejecución de Python 3 en el entorno de ejecución estándar de App Engine no incluye servicios en paquetes como Memcache y las listas de tareas en cola. En cambio, Google Cloud proporciona productos independientes que son equivalentes a la mayoría 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. Proporcionaremos guías de migración detalladas para algunos de estos servicios en los próximos meses.

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 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:

  • La app y la base de datos de Memorystore están en diferentes proyectos de Google Cloud.

  • 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 manera 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:

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

  2. Crea un archivo requirements.txt en la misma carpeta que tu archivo app.yaml y agrega el nombre de una biblioteca cliente junto con la biblioteca googleapis_common_protos.

    Las apps de Python 2 requieren googleapis_common_protos para acceder a los servicios de Google Cloud.

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

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

    pip install -t lib -r requirements.txt
    
  4. En el archivo app.yaml de la app, especifica las bibliotecas RPC y SSL de Google en la sección libraries:

    libraries:
    - name: grpcio
      version: 1.0.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 visor de registros cuando tu app reciba una solicitud.

  5. 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)
    

    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 carpeta lib se encuentra en el directorio de trabajo actual. Si no puedes garantizar que lib esté siempre 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. Implementa la app.

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:

  1. Agrega el nombre de biblioteca al archivo requirements.txt de la app. Por ejemplo:

    google-cloud-ndb
    
  2. Implementa la app.

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. A fin de comenzar, consulta Migra a la biblioteca cliente de Cloud para Storage.

Datastore

Si tu app de Python 2 usa NDB a fin de interactuar con Datastore, migra a la biblioteca de Cloud NDB para Python 3. Las apps nuevas de Python 3 deben usar la biblioteca cliente en modo Datastore.

Para obtener detalles, consulta:

Imágenes

Puedes entregar imágenes desde Cloud Storage, entregarlas directamente o usar una red de distribución de contenidos (CDN) de terceros.

Si deseas cambiar el tamaño, convertir y manipular imágenes, 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 visor de registros, descargar registros, filtrar mensajes por gravedad y correlacionar los mensajes de apps con solicitudes específicas. Como alternativa, puedes habilitar estas funciones si escribes mensajes de registro que contengan datos específicos estructurados en un objeto JSON.

Para obtener más información, consulta 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.

Memcache

Si tu app de Python 2 usa Memcache de forma explícita, debes migrar a otra solución de almacenamiento en caché antes de poder ejecutar la app en un entorno de Python 3. Te recomendamos usar Memorystore para Redis como servicio de almacenamiento en caché. Para obtener más información, consulta Migra Memcache a Memorystore.

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 de los servicios en ejecución de tu aplicación en el entorno de ejecución de Python 3, consulta 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 administrar la función 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.

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

Migra las listas de extracción a Pub/Sub y las listas de aplicaciones en cola a Cloud Tasks. Si tu app usa listas de extracción y listas de aplicaciones en cola, migra las listas de extracción primero, a fin de evitar comportamientos inesperados con Cloud Tasks.

Si deseas obtener información para realizar estas migraciones, consulta los siguientes vínculos:

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. El entorno de ejecución de Python 3 no necesita un servicio intermediario para controlar las solicitudes salientes, por lo que la recuperación de URL no está disponible en el entorno de ejecución de Python 3.

Si tu app usa bibliotecas estándar de Python a fin de emitir solicitudes, la ausencia de la recuperación de URL en el entorno de ejecución de Python 3 no debería afectar la capacidad de la app para realizar solicitudes. Sin embargo, te recomendamos probar la app en un entorno que no use la recuperación de URL para asegurarte de que esto no suceda.

Si la app usa las API de recuperación de URL directamente, por ejemplo, para realizar solicitudes asíncronas, debes migrar esas solicitudes a fin de usar una biblioteca de Python estándar, como requests.

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

Autenticación de usuarios

Para una alternativa a la API de usuarios, usa cualquier mecanismo de autenticación basado en HTTP como los que se mencionan a continuación: