La compatibilité de Python 2 n'est plus assurée par la communauté. Nous vous recommandons de migrer les applications Python 2 vers Python 3.

Présentation de la migration de services App Engine groupés

L'environnement d'exécution Python 3 dans l'environnement d'exécution standard App Engine n'inclut pas les services groupés tels que Memcache et les files d'attente de tâches. À la place, Google Cloud fournit des produits autonomes équivalents à la plupart des services fournis dans 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é. Nous fournirons des guides de migration détaillés pour certains de ces services au cours des prochains mois.

Comprendre les autorisations Google Cloud

Étant donné que votre application migrée et les services Google Cloud 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 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 font partie de différents projets Google Cloud.

  • 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 par défaut d'App Engine, car il dispose 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 :

  1. Créez un répertoire pour stocker les bibliothèques tierces, par exemple lib/.

  2. Créez un fichier requirements.txt dans le même dossier que votre fichier app.yaml et ajoutez le nom d'une bibliothèque cliente avec la bibliothèque googleapis_common_protos :

    Les applications Python 2 nécessitent googleapis_common_protos pour accéder aux services Google Cloud.

    Par exemple, le fichier suivant peut être utilisé pour installer des bibliothèques pour googleapis_common_protos, Pub/Sub et Cloud Tasks :

    googleapis_common_protos
    google-cloud-pubsub
    google-cloud-tasks
    
  3. Utilisez pip install pour installer les bibliothèques dans le dossier que vous avez créé. Exemple :

    pip install -t lib -r requirements.txt
    
  4. Dans la section libraries du fichier app.yaml de votre application, spécifiez les bibliothèques RPC et SSL de Google :

    libraries:
    - name: grpcio
      version: 1.0.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 la visionneuse de journaux lorsque l'application reçoit une requête.

  5. Créez un fichier appengine_config.py dans le même dossier que votre fichier app.yaml si vous n'en avez pas déjà un. Ajoutez le code ci-dessous à votre fichier 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)
    

    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 dossier lib se trouve dans le répertoire de travail actuel. Si vous ne pouvez pas garantir que lib sera toujours dans le répertoire de travail actuel, spécifiez le chemin d'accès complet au dossier lib. Exemple :

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    
  6. Déployez l'application.

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 :

  1. Ajoutez le nom de la bibliothèque au fichier requirements.txt de l'application. Exemple :

    google-cloud-ndb
    
  2. Déployez l'application.

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 Migrer vers la bibliothèque cliente Cloud pour Cloud Storage.

Datastore

Si votre application Python 2 utilise NDB pour interagir avec Datastore, migrez vers la bibliothèque Cloud NDB Python 3. Les nouvelles applications Python 3 doivent utiliser la bibliothèque cliente en mode Datastore.

Pour plus d'informations, consultez les articles suivants :

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 que Pillow 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.

Logging

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 la visionneuse 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. Vous pouvez également activer ces fonctionnalités en écrivant des messages de journal contenant des données spécifiques structurées dans un objet JSON.

Pour en savoir plus, consultez la page Migrer vers Cloud Logging.

E-mails

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.

Memcache

Si votre application Python 2 utilise explicitement Memcache, vous devez migrer vers une autre solution de mise en cache pour pouvoir exécuter votre application dans un environnement Python 3. Nous vous recommandons d'utiliser Memorystore pour Redis en tant que service de mise en cache. Pour en savoir plus, consultez la page Migrer Memcache vers Memorystore.

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 Admin App Engine :

Informations sur les services Moyen d'accès
ID d'application actuel Variable d'environnement GAE_APPLICATION
ID de 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 en savoir plus sur les données disponibles sur les services en cours d'exécution de votre application dans l'environnement d'exécution Python 3, 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.

Tandis que Datastore prend directement en charge la mutualisation, ce n'est pas le cas des autres services Google Cloud. Si votre application mutualisée utilise d'autres services Google Cloud, vous devez gérer la mutualisation 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.

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

Migrez les files d'attente de retrait vers Pub/Sub et les files d'attente d'envoi vers Cloud Tasks. Si votre application utilise à la fois des files d'attente de retrait et des files d'attente d'envoi, migrez d'abord les files d'attente de retrait afin d'éviter tout comportement inattendu avec Cloud Tasks.

Pour en savoir plus sur ces migrations, consultez les pages suivantes :

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. L'environnement d'exécution Python 3 ne nécessite pas de service intermédiaire pour gérer les requêtes sortantes. Par conséquent, l'API URL Fetch n'est pas disponible dans l'environnement d'exécution Python 3.

Si votre application utilise des bibliothèques Python standards pour émettre des requêtes, l'absence d'URL Fetch dans l'environnement d'exécution Python 3 ne doit pas affecter la capacité de votre application à envoyer des requêtes. Toutefois, nous vous recommandons de tester votre application dans un environnement qui n'utilise pas le service de récupération d'URL pour vous en assurer.

Si votre application utilise directement les API URL Fetch, pour envoyer des requêtes asynchrones par exemple, vous devez migrer ces requêtes pour utiliser une bibliothèque Python standard telle que requests.

Pour en savoir plus, consultez la page Migrer des requêtes sortantes.

Authentification des utilisateurs

Comme alternative à l'API Users, utilisez n'importe quel mécanisme d'authentification basé sur HTTP, par exemple :