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.

Consultez les sections ci-dessous pour savoir comment migrer des anciens services groupés 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 d'accès incluant /_ah/ ne sont pas bloqués dans l'environnement flexible. Si l'application exécutée dans l'environnement standard utilise des chemins d'accès 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 ainsi que le service de métadonnées 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) 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}.
  • Notez que si vous utilisez l'environnement d'exécution Java, les API d'App Engine SystemProperty ne sont pas disponibles pour l'environnement flexible App Engine. Toutefois, vous pouvez définir des variables d'environnement dans app.yaml et utiliser System.env pour obtenir les valeurs, comme décrit dans la section Définir des variables d'environnement.

Pour en savoir plus sur les variables d'environnement, consultez les pages de présentation de l'environnement d'exécution ou la page de référence app.yaml.

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 l'environnement 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 la page Utiliser Cloud Storage.

Capacité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 la page Créer des connexions persistantes avec WebSockets.

Firestore en mode Datastore (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.

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

Si vous utilisez la bibliothèque Python ndb et que vous préférez un accès au datastore de style NDB, nous vous encourageons à migrer vers Cloud NDB. Pour en savoir plus, consultez le dépôt Cloud NDB.

Bien que les bibliothèques clientes Cloud NDB et Datastore soient compatibles avec Python 2 et 3, qu'elles fonctionnent aussi bien dans l'environnement standard ou flexible d'App Engine et qu'elles soient également compatibles avec les applications non App Engine, leur objectif principal est d'aider les développeurs Python 2 à abandonner les anciens services groupés tels qu'App Engine ndb. Cloud NDB a également pour objectif supplémentaire de préserver l'expérience utilisateur NDB.

Pour en savoir plus, consultez la page Utiliser Datastore.

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 :

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 :

Logging

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 la section Écrire des journaux d'application.

Messagerie

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.

Pour en savoir plus, consultez la section Envoyer des messages avec des services tiers.

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.

Pour en savoir plus sur les variables d'environnement, consultez les pages de présentation de l'environnement d'exécution ou la page de référence app.yaml.

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 manuellement l'architecture mutualisée. 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 plusieurs 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 sauvegarde, 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 flexible. Vous pouvez héberger les bases de données de recherche en texte intégral du type ElasticSearch dans 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.

File d'attente de tâches

Google Tasks vous permet d'utiliser le service de file d'attente de tâches d'envoi en dehors de l'environnement standard de première génération.

Dans la plupart des cas où vous pouvez utiliser des files d'attente de retrait, telles que la mise en file d'attente des tâches ou des messages retirés et traités par des nœuds de calcul distincts, Pub/Sub peut être une bonne alternative, offrant des fonctionnalités et des garanties de livraison semblables.

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.

Si vous utilisez Python, nous vous recommandons d'utiliser les requêtes. Si vous utilisez Java, nous vous recommandons d'utiliser la bibliothèque cliente HTTP Google pour Java ou OkHttp.

Utilisateurs

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.

Notez que comme le service Users n'est pas disponible, il n'est pas possible d'utiliser appengine-web.xml pour Java ou app.yaml pour d'autres environnements d'exécution pour rendre les URL accessibles uniquement aux administrateurs. Vous devrez traiter cette logique dans votre application.

Étapes suivantes

Consultez la page Environnement flexible App Engine pour les utilisateurs de l'environnement standard App Engine afin d'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.