Migra servicios del entorno estándar al entorno flexible

El entorno flexible de App Engine no proporciona las bibliotecas de API incluidas en el SDK de App Engine. Si decides migrar tu aplicación del entorno estándar de App Engine al entorno flexible, debes actualizar tu código para usar los servicios y las API disponibles en todos los entornos de Google Cloud.

Consulta las secciones siguientes para obtener instrucciones sobre cómo migrar servicios y API específicos del entorno estándar al entorno flexible.

Diferencias entre el entorno estándar y el entorno flexible

Además de las diferencias clave que se describen aquí, las rutas de acceso con /_ah/ no se bloquean en el entorno flexible. Si la aplicación en el entorno estándar usa rutas con /_ah/ para acceder a servicios específicos, consulta la sección del servicio correspondiente que se encuentra a continuación.

Identidad de la app

Si ejecutas la aplicación en el entorno flexible, puedes obtener información sobre ella con una combinación de variables de entorno y el servicio de metadatos de Compute Engine:

Información de la aplicación Cómo acceder a ella
Aplicación/ID del proyecto Variable de entorno GOOGLE_CLOUD_PROJECT o el recurso /project/project-id en el servidor de metadatos
Nombre de host predeterminado Método apps.get de la API de Administrador de App Engine
Nombre de la cuenta de servicio El recurso /instance/service-accounts en el servidor de metadatos
Token de acceso de OAuth 2.0 El recurso /instances/service-accounts en el servidor de metadatos. Consulta la documentación de autenticación con credenciales de la cuenta de servicio de Compute Engine.

La funcionalidad siguiente no está directamente disponible:

  • No hay un bucket de Cloud Storage predeterminado para tu proyecto. Para usar un bucket en la aplicación, puedes crear un bucket de Cloud Storage cuyo nombre sea el ID del proyecto. A continuación, puedes usar la variable de entorno GOOGLE_CLOUD_PROJECT en tu aplicación como nombre del depósito.
  • No puedes firmar los BLOB con la cuenta de servicio predeterminada. Puedes solucionar esto con la API de Identity and Access Management (IAM) o proporcionando una clave privada de cuenta de servicio a tu aplicación cuando la implementes.
  • Del mismo modo, no hay una API incorporada para obtener certificados públicos a fin de verificar firmas. Sin embargo, los certificados públicos de cada cuenta de servicio están disponibles en https://www.googleapis.com/robot/v1/metadata/x509/{service account email}.

Subprocesos en segundo plano

Debido a que el entorno flexible no tiene limitaciones de zona de pruebas, puedes crear subprocesos o procesos que estén fuera del entorno de solicitud. Por lo general, solo necesitas usar las herramientas de subprocesamiento o multiprocesamiento integradas del lenguaje.

Blobstore

Cloud Storage reemplazó en gran medida el uso del servicio de Blobstore en el entorno estándar y el flexible. Usa las bibliotecas cliente de Google Cloud para almacenar y recuperar datos en Cloud Storage.

Para obtener más información, consulta la siguiente guía:

Capacidades

No hay ninguna función similar al servicio de capacidades disponible fuera del entorno estándar.

WebSockets

El entorno flexible de App Engine es compatible con websockets. Si deseas obtener más información, consulta las siguientes guías:

Firestore en modo Datastore (Datastore)

Puedes acceder a Datastore desde cualquier lugar mediante la API de Datastore. Usa las bibliotecas cliente de Google Cloud para almacenar y recuperar datos de Datastore.

Los mismos datos de Datastore están disponibles sin importar si usas las bibliotecas de App Engine, las bibliotecas cliente de Google Cloud o si llamas a la API directamente.

Si usas la biblioteca de Python ndb y prefieres el acceso a Datastore de estilo NDB, te recomendamos migrar a Cloud NDB. Consulta el repositorio de Cloud NDB para obtener más información.

Si bien las bibliotecas cliente de Cloud NDB y Datastore son compatibles con Python 2 y 3, y funcionan para el entorno estándar o flexible de App Engine y las apps que no son de App Engine, su propósito principal es ayudar a los desarrolladores de Python 2 a dejar de usar servicios heredados en paquetes, como App Engine ndb. Cloud NDB tiene el objetivo adicional de preservar la experiencia del usuario de NDB.

Para obtener más información, consulta la siguiente guía:

Imágenes

El servicio de Imágenes no está disponible fuera del entorno estándar. Sin embargo, puedes entregar imágenes fácilmente directo desde tu aplicación o desde Cloud Storage.

Si necesitas realizar el procesamiento de imágenes, puedes instalar y usar cualquier biblioteca de procesamiento de imágenes, como Pillow.

El servicio de imágenes también proporcionó la funcionalidad para evitar solicitudes dinámicas a la aplicación con el manejo del cambio de tamaño de la imagen mediante una URL de entrega. Si deseas una funcionalidad similar, puedes generar las imágenes con tamaño nuevo 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.

Para ver más recursos, consulta las guías siguientes:

Logging

Logging funciona automáticamente en el entorno flexible y en el entorno estándar. Sin embargo, los registros se recopilan en un formato diferente. Los registros no se agruparán por solicitudes, y los de stdout y stderr se recopilarán por separado.

Si deseas tener más control sobre los registros de la aplicación y la capacidad de agrupar registros y registrar metadatos adicionales, puedes usar la API de Cloud Logging directamente con las bibliotecas cliente de Google Cloud.

Para obtener más detalles, consulta la siguiente guía:

Correo electrónico

El servicio de correo electrónico de App Engine no está disponible fuera del entorno estándar. Deberás usar un proveedor de correo electrónico de terceros, como SendGrid, Mailgun o Mailjet para enviar correos electrónicos. Todos estos servicios ofrecen API para enviar correos electrónicos desde aplicaciones que se ejecutan en cualquier lugar.

En las siguientes guías, se muestra cómo usar estos servicios con el entorno flexible:

Memcache

El servicio de Memcache no está disponible en el entorno flexible de App Engine. A fin de almacenar en caché los datos de la aplicación, usa Memorystore para Redis.

Módulos

La API de módulos no está disponible fuera del entorno estándar. Sin embargo, puedes usar una combinación de variables de entorno y la API de Administrador de App Engine para obtener información sobre los servicios en ejecución de la aplicación y modificarlos:

Información del servicio Cómo acceder a ella
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 de App Engine
Lista de servicios Método apps.services.list de la API de Administrador de App Engine
Lista de versiones para un servicio Método apps.services.versions.list de la API de Administrador de App Engine
Versión predeterminada para un servicio, incluidas las divisiones del tráfico Método apps.services.get de la API de Administrador de App Engine
Lista de instancias en ejecución para una versión Método apps.services.versions.instances.list de la API de Administrador de App Engine

También puedes usar la API de Administrador de App Engine para implementar y administrar servicios y versiones en la aplicación.

Espacios de nombres

Solo Datastore admite la modalidad multiusuario directamente fuera del entorno estándar. Para obtener otros servicios, 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

El servicio de OAuth no está disponible en el entorno flexible. Si necesitas verificar los tokens de OAuth 2.0, puedes hacerlo con el método oauth2.tokeninfo de la API de OAuth 2.0.

Remota

El servicio de API remota no es aplicable al entorno flexible. Se puede acceder desde cualquier lugar a la mayoría de los servicios de copia de seguridad, como Datastore, a los que también se puede acceder desde el entorno flexible.

El servicio de búsqueda no está disponible fuera del entorno flexible. Puedes alojar cualquier base de datos de búsqueda en el texto completo, como ElasticSearch en Compute Engine, y acceder a ella desde los entornos estándar y flexible.

Sockets

El entorno flexible no tiene restricciones de zona de pruebas, por lo que puedes abrir y usar sockets de salida de forma normal.

Lista de tareas en cola

Para usar el servicio de lista de tareas en cola fuera del entorno estándar de primera generación, puedes usar Tasks.

En muchos casos en los que puedes usar listas de extracción, como poner en cola tareas o mensajes que se extraen y procesan con trabajadores separados, Pub/Sub puede ser una buena alternativa, ya que ofrece funcionalidades y garantías de entrega similares.

Recuperación de URL

El servicio de recuperación de URL no está disponible en el entorno flexible. Sin embargo, no hay restricciones en la zona de pruebas, por lo que tu aplicación puede usar cualquier biblioteca HTTP para obtener la funcionalidad de recuperación de URL. Recomendamos el uso de Solicitudes.

Usuarios

El servicio de usuarios no está disponible fuera del entorno estándar. En cambio, puedes usar cualquier mecanismo de autenticación basado en HTTP en el entorno flexible, como los siguientes:

Ten en cuenta que, como el servicio de usuarios no está disponible, no es posible usar app.yaml para que solo los administradores puedan acceder a las URL. Tendrás que gestionar esta lógica dentro de la aplicación.

¿Qué sigue?

Para obtener una descripción general de las diferencias clave entre el entorno flexible y el estándar, con pautas que sirven para las aplicaciones que usan ambos, consulta Entorno flexible de App Engine para usuarios del entorno estándar de App Engine.