Migrer des services de l'environnement standard vers l'environnement flexible

L'environnement flexible App Engine n'inclut pas les bibliothèques d'API présentes dans le SDK App Engine. Si vous décidez de migrer l'application de l'environnement standard App Engine vers l'environnement flexible, vous devez mettre à jour le code pour qu'il utilise les services et les API disponibles dans tous les environnements Google Cloud Platform.

Consultez les sections ci-dessous pour savoir comment migrer des services et API spécifiques de l'environnement standard vers l'environnement flexible.

Différences entre l'environnement standard et l'environnement flexible

Outre les différences majeures décrites ici, les chemins incluant /_ah/ ne sont pas bloqués dans l'environnement flexible. Si l'application exécutée dans l'environnement standard utilise des chemins comportant /_ah/ pour accéder à des services spécifiques, consultez la section concernant le service approprié ci-dessous.

Informations sur l'application

Dans l'environnement flexible, vous pouvez utiliser plusieurs variables d'environnement et le service de métadonnées Google Compute Engine pour obtenir des informations sur l'application.

Informations sur l'application Moyen d'accès
ID de l'application ou du projet Soit la variable d'environnement GOOGLE_CLOUD_PROJECT, soit la ressource /project/project-id du serveur de métadonnées
Nom d'hôte par défaut Méthode apps.get de l'API App Engine Admin
Nom du compte de service Ressource /instance/service-accounts du serveur de métadonnées
Jeton d'accès OAuth 2.0 Ressource /instances/service-accounts du serveur de métadonnées. Consultez la section Authentifier des applications à l'aide des identifiants du compte de service dans la documentation Compute Engine.

Les fonctionnalités suivantes ne sont pas directement disponibles :

  • Il n'existe pas de bucket Cloud Storage par défaut pour votre projet. Si vous voulez vous servir d'un bucket dans votre application, vous pouvez créer un bucket Cloud Storage et utiliser l'ID de projet pour définir son nom. Vous pouvez ensuite employer la variable d'environnement GOOGLE_CLOUD_PROJECT dans votre application comme nom du bucket.
  • Vous ne pouvez pas signer de blobs avec le compte de service par défaut. Pour contourner ce problème, utilisez l'API Identity and Access Management (IAM) de Google ou fournissez une clé privée de compte de service à l'application lors du déploiement.
  • De la même façon, il n'existe pas d'API intégrée permettant d'obtenir des certificats publics pour la validation des signatures. Cependant, les certificats publics de chaque compte de service sont disponibles à l'adresse https://www.googleapis.com/robot/v1/metadata/x509/{service account email}.

Threads en arrière-plan

Dans la mesure où l'environnement flexible n'impose aucune limite pour le mode bac à sable, vous êtes libre de créer des threads ou des processus résidant en dehors de l'environnement de requête. En règle générale, il vous suffit d'utiliser les outils de multitraitement ou de création de threads intégrés à votre langage.

Blobstore

L'utilisation du service Blobstore a été largement remplacée par Cloud Storage dans les environnements standard et flexible. Utilisez les bibliothèques clientes Google Cloud pour stocker et récupérer des données dans Cloud Storage.

Pour en savoir plus, consultez le guide suivant :

Fonctionnalités

Aucune fonctionnalité similaire au service Fonctionnalités n'est disponible en dehors de l'environnement standard.

WebSockets

L'environnement flexible d'App Engine permet l'utilisation des websockets. Pour en savoir plus, consultez les guides suivants :

Datastore

Vous pouvez accéder à Datastore à partir de n'importe quel emplacement au moyen de l'API Datastore. Servez-vous des bibliothèques clientes Google Cloud pour stocker et récupérer des données dans Datastore.

Les mêmes données Datastore sont disponibles, que vous utilisiez les bibliothèques App Engine, les bibliothèques clientes Google Cloud ou un appel direct de l'API.

La bibliothèque ndb n'est pas compatible en dehors de l'environnement standard. Une bibliothèque python-ndb est en cours de développement. Elle sera compatible avec Python 3 et d'autres plates-formes, y compris l'environnement flexible.

Pour en savoir plus, consultez le guide suivant :

Images

Le service Images n'est pas disponible en dehors de l'environnement standard. Toutefois, il est facile de diffuser des images directement à partir de l'application ou de Cloud Storage.

Si vous devez traiter des images, vous pouvez installer et utiliser n'importe quelle bibliothèque de traitement d'images, par exemple Pillow.

Le service Images fournit également une fonctionnalité permettant d'éviter les requêtes dynamiques adressées à votre application en gérant le redimensionnement des images à l'aide d'une URL de diffusion. Si vous souhaitez disposer de fonctionnalités similaires, vous pouvez générer les images redimensionnées à l'avance et les importer dans Cloud Storage pour les diffuser. Vous pouvez également utiliser un service de réseau de diffusion de contenu (CDN, Content Delivery Network) tiers permettant le redimensionnement des images.

Pour obtenir plus d'informations, consultez les guides suivants :

Journalisation

Comme dans l'environnement standard, la journalisation fonctionne automatiquement dans l'environnement flexible. Toutefois, les journaux sont collectés dans un format différent. Ils ne sont pas regroupés par requête. Par ailleurs, les journaux de stdout et de stderr sont collectés séparément.

Si vous souhaitez mieux contrôler la journalisation des applications, pouvoir regrouper les journaux et consigner des métadonnées supplémentaires, vous pouvez utiliser l'API Cloud Logging directement avec les bibliothèques clientes Google Cloud.

Pour en savoir plus, consultez le guide suivant :

Mail

Le service App Engine Mail n'est pas disponible en dehors de l'environnement standard. Vous devrez utiliser un fournisseur de messagerie tiers, tel que SendGrid, Mailgun ou Mailjet pour envoyer des e-mails. Tous ces services proposent des API permettant d'envoyer des e-mails à partir d'applications, quel que soit l'emplacement où elles s'exécutent.

Les guides suivants montrent comment utiliser ces services avec l'environnement flexible :

Memcache

Le service Memcache n'est pas disponible dans l'environnement flexible App Engine. Pour mettre en cache des données d'application, utilisez Memorystore pour Redis.

Modules

L'API Modules n'est pas disponible en dehors de l'environnement standard. Toutefois, vous pouvez utiliser plusieurs variables d'environnement et l'API App Engine Admin afin d'obtenir des informations sur les services en cours d'exécution pour l'application et de modifier ces services :

Informations sur les services Moyen d'accès
Nom actuel du service Variable d'environnement GAE_SERVICE
Version actuelle du service Variable d'environnement GAE_VERSION
ID actuel de l'instance Variable d'environnement GAE_INSTANCE
Nom d'hôte par défaut Méthode apps.get de l'API App Engine Admin
Liste des services Méthode apps.services.list de l'API App Engine Admin
Liste des versions d'un service Méthode apps.services.versions.list de l'API App Engine Admin
Version par défaut d'un service, y compris les répartitions du trafic Méthode apps.services.get de l'API App Engine Admin
Liste des instances en cours d'exécution d'une version Méthode apps.services.versions.instances.list de l'API App Engine Admin

Vous pouvez également utiliser l'API App Engine Admin afin de déployer et de gérer des services et des versions dans l'application.

Namespaces

En dehors de l'environnement standard, seul Datastore est directement compatible avec l'architecture mutualisée. Pour les autres services, vous devez gérer cette dernière manuellement. Pour disposer d'instances de services complètement isolées, vous pouvez créer des projets de manière automatisée à l'aide de l'API Cloud Resource Manager et accéder aux ressources de tous les projets.

OAuth

Le service OAuth n'est pas disponible dans l'environnement flexible. Si vous devez valider des jetons OAuth 2.0, vous pouvez le faire à l'aide de la méthode oauth2.tokeninfo de l'API OAuth 2.0.

Remote

Le service d'API Remote ne s'applique pas à l'environnement flexible. La majorité des services de stockage, tels que Datastore, qui sont accessibles depuis l'environnement flexible, le sont également depuis n'importe quel environnement.

Le service Search n'est pas disponible actuellement en dehors de l'environnement standard. Vous pouvez héberger les bases de données de recherche en texte intégral du type ElasticSearch dans Google Compute Engine et y accéder à partir des environnements standard et flexible.

Sockets

L'environnement flexible n'applique aucune restriction pour le mode bac à sable. Vous pouvez donc ouvrir et utiliser normalement les sockets sortants.

Task Queue

Cloud Tasks vous permet d'utiliser le service Task Queue push en dehors de l'environnement standard de première génération.

Dans les nombreux cas où l'utilisation de files d'attente de retrait est possible, telle que la mise en file d'attente de tâches ou de messages qui seront retirés et traités par des travaux distincts, Cloud Pub/Sub peut être une bonne alternative offrant des fonctionnalités et des garanties de livraison similaires.

URL Fetch

Le service URL Fetch n'est pas disponible dans l'environnement flexible. Toutefois, aucune restriction ne s'applique au mode bac à sable. Votre application peut donc utiliser n'importe quelle bibliothèque HTTP pour obtenir la fonctionnalité de récupération d'URL. Nous vous recommandons d'utiliser les requêtes.

Users

Le service Users n'est pas disponible en dehors de l'environnement standard. Dans l'environnement flexible, vous pouvez utiliser n'importe quel mécanisme d'authentification basé sur HTTP, par exemple :

  • La plate-forme Google Identity qui propose de nombreuses options d'authentification et d'autorisation des comptes utilisateur Google ;
  • Firebase Authentication qui fournit un mécanisme d'authentification basé sur le nom d'utilisateur/mot de passe et l'identité fédérée à l'aide de Google, Facebook, Twitter, etc.
  • Auth0 qui permet l'authentification via divers fournisseurs d'identité et des fonctionnalités d'authentification unique ;
  • OAuth 2.0 et OpenID Connect, qui permettent d'obtenir une identité fédérée auprès du fournisseur de votre choix. Google est un fournisseur d'identité OpenID Connect. Sachez qu'il existe également plusieurs autres fournisseurs.

Le service Users n'étant pas disponible, il est impossible d'utiliser app.yaml pour rendre les URL accessibles uniquement aux administrateurs. Vous devrez traiter cette logique dans votre application.

Étape suivante

Consultez la page Environnement flexible App Engine pour les utilisateurs de l'environnement standard App Engine, pour obtenir un aperçu des principales différences entre l'environnement flexible et l'environnement standard, ainsi que des consignes pour les applications utilisant les deux environnements.