La plupart des fonctionnalités fournies par les anciens services groupés sont désormais fournies par les bibliothèques clientes Cloud pour PHP. Pour plus d'informations, consultez les alternatives recommandées répertoriées ci-dessous.
Si la migration vers une solution non groupée n'est pas possible pour votre projet, vous pouvez peut-être continuer à utiliser les anciens services groupés dans vos applicationsPython 3 en remplacement. Cette approche vous permet de passer à des services non groupés plus tard dans le cycle de migration.
Une fois que vous avez migré depuis les anciens services groupés, vous pouvez continuer à utiliser App Engine ou migrer vers Cloud Run. Cloud Run est conçu pour améliorer l'expérience App Engine, et intègre bon nombre des meilleures fonctionnalités de l'environnement standard et de l'environnement flexible. Pour comparer les fonctionnalités et comprendre la migration, consultez le guide de comparaison entre App Engine et Cloud Run.
Google Cloud fournit des produits autonomes offrant des fonctionnalités équivalentes à celles de certains services groupés de l'environnement d'exécution Python 2. Pour les services groupés qui ne sont pas disponibles séparément dans Google Cloud, tels que le traitement d'image, la recherche et les messages, ce guide recommande des fournisseurs tiers ou d'autres solutions.
Cette page présente le chemin de migration pour chaque service groupé.
Comprendre les autorisations Google Cloud
Étant donné que votre application migrée et les Google Cloud services qu'elle utilise ne s'exécutent plus dans le même environnement "bac à sable", votre application a besoin d'une autorisation pour accéder à chaque service. Par exemple, pour interagir avec Firestore en mode Datastore (Datastore) ou Cloud Tasks, votre application doit fournir les identifiants d'un compte autorisé à accéder à ces services.
Par défaut, les applications de l'environnement d'exécution standard App Engine fournissent les identifiants du compte de service App Engine par défaut, autorisé à accéder aux bases de données du même projet que l'application.
Si l'une des conditions suivantes est remplie, vous devez utiliser une autre technique d'authentification qui fournit explicitement des identifiants :
Votre application et la base de données Memorystore se trouvent dans des projetsGoogle Cloud différents.
Vous avez modifié les rôles attribués au compte de service App Engine par défaut.
Pour plus d'informations sur les autres techniques d'authentification, consultez la page Configurer l'authentification pour des applications de production serveur à serveur.
Authentification pour le développement local
Pour développer ou tester votre application localement, nous vous recommandons de créer et d'utiliser un compte de service. N'utilisez pas le compte de service App Engine par défaut, car il est doté d'un niveau d'autorisation élevé pour tous les éléments de votre projet. Créez et utilisez plutôt un compte de service avec le niveau le plus bas d'autorisations dont vous avez besoin pour votre tâche de développement et de test spécifique.
Pour obtenir des instructions sur la configuration d'un compte de service et sur sa connexion à votre application, consultez la section Obtenir et fournir manuellement les identifiants du compte de service.
Installer des bibliothèques clientes
Le moyen le plus simple d'utiliser les services Google Cloud à partir d'une application Python consiste à installer la bibliothèque cliente Python du service.Les services Google Cloud fournissent également JSON REST et d'autres interfaces. Les étapes d'installation des bibliothèques clientes dans l'environnement d'exécution App Engine sont différentes pour les applications Python 2 et Python 3.
Installer des bibliothèques pour les applications Python 2
Pour installer une bibliothèque que votre application doit utiliser lorsqu'elle s'exécute dans l'environnement d'exécution Python 2, procédez comme suit :
Créez un répertoire pour stocker les bibliothèques tierces, par exemple
lib/
.Créez un fichier
requirements.txt
dans le même dossier que votre fichierapp.yaml
et ajoutez le nom d'une bibliothèque cliente.Par exemple, le fichier suivant peut être utilisé pour installer des bibliothèques pour Pub/Sub et Cloud Tasks :
google-cloud-pubsub google-cloud-tasks
Utilisez
pip install
pour installer les bibliothèques dans le dossier que vous avez créé. Exemple :pip install -t lib -r requirements.txt
Dans la section
libraries
du fichierapp.yaml
de votre application, spécifiez les bibliothèques Google RPC etsetuptools
requises, ainsi que la bibliothèque SSL facultative :libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Certaines bibliothèques clientes n'ont pas besoin de la bibliothèque SSL. Si vous n'ajoutez pas la bibliothèque SSL à une bibliothèque cliente qui en a besoin, une erreur SSL s'affiche dans l'explorateur de journaux lorsque l'application reçoit une requête.
Créez un fichier
appengine_config.py
dans le même dossier que votre fichierapp.yaml
si vous n'en avez pas déjà un. Ajoutez le code ci-dessous à votre fichierappengine_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)
Veillez à exploiter le module
pkg_resources
, qui garantit que votre application utilise la bonne version des bibliothèques clientes.Le fichier
appengine_config.py
de l'exemple précédent suppose que le dossierlib
se trouve dans le répertoire de travail actuel. Si vous ne pouvez pas garantir quelib
sera toujours dans le répertoire de travail actuel, spécifiez le chemin d'accès complet au dossierlib
. Exemple :import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
App Engine importe toutes les bibliothèques du répertoire que vous avez spécifié dans le fichier appengine_config.py
vers l'environnement d'exécution Python 2.
Installer des bibliothèques pour les applications Python 3
Pour installer une bibliothèque que votre application doit utiliser lorsqu'elle s'exécute dans l'environnement d'exécution Python 3, procédez comme suit :
Ajoutez le nom de la bibliothèque au fichier
requirements.txt
de l'application. Exemple :google-cloud-ndb
App Engine importe automatiquement toutes les bibliothèques répertoriées dans le fichier requirements.txt
vers l'environnement d'exécution Python 3.
Chemins de migration pour les services groupés App Engine
Blobstore
Pour stocker et récupérer des données, utilisez Cloud Storage via les bibliothèques clientes Cloud. Pour commencer, consultez la page Utiliser Cloud Storage et le guide Migrer de Blobstore vers Cloud Storage. Pour simuler cette migration, ajoutez l'utilisation du service Blobstore à un exemple d'application et migrez vers Cloud Storage.
Datastore
Si votre application Python 2 utilise NDB pour interagir avec Datastore, migrez vers la bibliothèque Cloud NDB. Cloud NDB est principalement conçu comme un outil de transition pour la migration d'applications Python 2. Pour les applications Python 3, nous recommandons d'utiliser la bibliothèque cliente en mode Datastore.
Pour en savoir plus, consultez la section Migrer vers Cloud NDB. Pour simuler cette migration avec un exemple d'application, consultez la section Migrer depuis App Engine NDB vers Cloud NDB.
Images
Vous pouvez diffuser des images à partir de Cloud Storage, les diffuser directement ou utiliser un réseau de diffusion de contenu tiers (CDN).
Pour redimensionner, convertir et manipuler des images, utilisez une bibliothèque de traitement d'image telle quePillow ou une interface Python pour ImageMagick.
Pour utiliser l'une de ces bibliothèques tierces, ajoutez-la en tant que dépendance et mettez à jour votre code pour appeler les API de la bibliothèque.
Le service Images App Engine 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 tiers (CDN, Content Delivery Network) permettant le redimensionnement des images.
Journalisation
Nous vous recommandons de mettre à jour votre application de sorte qu'elle utilise Cloud Logging, qui est compatible avec des fonctionnalités, telles que l'affichage des journaux dans l'explorateur de journaux, le téléchargement des journaux, le filtrage des messages par niveau de gravité et la mise en corrélation des messages de l'application avec des requêtes spécifiques. Si vous préférez la simplicité à la justesse des données, vous pouvez également écrire des journaux structurés dans stdout
ou stderr
.
Pour en savoir plus, consultez les pages Écrire et afficher des journaux et Migrer vers Cloud Logging.
Messagerie
Pour envoyer un e-mail, utilisez un fournisseur de messagerie tiers tel que SendGrid, Mailgun ou Mailjet. Tous ces services proposent des API permettant d'envoyer des e-mails à partir d'applications. Il n'y a pas d'alternative tierce recommandée pour la messagerie entrante pour le moment.
Memcache
Pour mettre en cache des données d'application, utilisez Memorystore pour Redis.
Pour en savoir plus, consultez la section Migrer Memcache vers Memorystore. Pour simuler cette migration, ajoutez l'utilisation du service Memcache à un exemple d'application et migrez vers Memorystore pour Redis.
Pour les applications qui utilisent Memcache uniquement dans le but de réduire la latence des requêtes NDB (ou Cloud NDB), utilisez la compatibilité intégrée de Cloud NDB pour Redis au lieu de Memcache ou Memorystore pour Redis.
Modules
Pour obtenir des informations et modifier les services en cours d'exécution de votre application, utilisez une combinaison de variables d'environnement et de l'API App Engine Admin :
Informations sur les services | Moyen d'accès |
---|---|
ID d'application actuel | Variable d'environnement GAE_APPLICATION |
ID du projet actuel | Variable d'environnement GOOGLE_CLOUD_PROJECT |
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 Admin |
Liste des services | Méthode apps.services.list de l'API Admin |
Liste des versions d'un service | Méthode apps.services.versions.list de l'API Admin |
Version par défaut d'un service, y compris les répartitions du trafic | Méthode apps.services.get de l'API Admin |
Liste des instances en cours d'exécution d'une version | Méthode apps.services.versions.instances.list de l'API Admin |
Pour plus d'informations sur les données disponibles sur les services en cours d'exécution de votre application, consultez la page Environnement d'exécution Python 3 .
Espaces de noms
L'API Namespaces permettait aux applications mutualisées de partitionner les données entre locataires en spécifiant simplement une chaîne d'espace de noms unique pour chaque locataire.
Datastore prend directement en charge la mutualisation, mais ce n'est pas le cas des autres services Google Cloud. Si votre application multitenancy utilise d'autres services Google Cloud, vous devez gérer la multitenancy 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
Au lieu d'utiliser le service OAuth App Engine pour vérifier les jetons OAuth 2.0, utilisez la méthode oauth2.tokeninfo
de l'API OAuth 2.0.
Recherche
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 de votre service.
File d'attente de tâches
Le service de file d'attente de tâches App Engine est disponible dans deux modes différents. Migrer depuis l'un ou l'autre des points vers deux produits Cloud autonomes différents.
Tâches d'envoi
Au lieu d'utiliser le service de tâches d'envoi de la file d'attente des tâches App Engine pour l'exécution de code asynchrone, utilisez les bibliothèques clientes Cloud Tasks avec un point de terminaison d'environnement standard Python 3 comme cible. Pour plus d'informations, consultez la sectionMigrer des files d'attente d'envoi vers Cloud Tasks.
Pour simuler cette migration avec un exemple d'application, consultez les sections Utiliser les files d'attente d'envoi App Engine dans les applications Flask et Migrer vers Cloud Tasks.
Tâches de retrait
Si vous utilisez le service de tâches de retrait de la file d'attente des tâches, par exemple pour mettre en file d'attente des tâches ou des messages devant être traités par des nœuds de calcul distincts, Cloud Pub/Sub peut être une bonne alternative. Cette solution offre des fonctionnalités et des garanties de distribution similaires. Comme tous les autres services cloud, Pub/Sub fournit des bibliothèques clientes pratiques pour accéder au service. Pour en savoir plus, consultez les sections Écrire des messages Pub/Sub et y répondre et le guide de migration des tâches de retrait de la file d'attente des tâches vers Pub/Sub.
Pour simuler cette migration avec un exemple d'application, consultez les sections Utiliser les tâches de retrait App Engine vers un exemple d'application et migration vers Pub/Sub.
URL Fetch
Par défaut, l'environnement d'exécution Python 2.7 utilise le service de récupération d'URL pour gérer les requêtes HTTP(S) sortantes, même si vous utilisez des bibliothèques Python standards pour les émettre.
Si votre application utilise directement les API URL Fetch, pour envoyer des requêtes asynchrones par exemple, nous vous recommandons d'effectuer la migration vers une bibliothèque Python standard, telle que la bibliothèque Requests.
Pour en savoir plus, consultez la page Migrer des requêtes sortantes.
Authentification des utilisateurs
Comme alternative à l'API Users, utilisez l'un des mécanismes d'authentification HTTP décrits sur la page Authentification des utilisateurs.