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

Google Cloud fournit des produits autonomes offrant des fonctionnalités équivalentes à celles de certains 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é.

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

    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
    
  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 Google RPC et setuptools 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.

  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 Utiliser 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. Nous recommandons aux applications Python 3 d'utiliser la bibliothèque cliente en mode Datastore.

Pour en savoir plus, consultez la page Migrer 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 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 (CDN) tiers 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. 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.

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

Si votre application Python 2 utilise explicitement Memcache, 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, consultez la page Environnement d'exécution Python 3.

Namespaces

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 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

Mettez en file d'attente des tâches d'exécution de code asynchrone à l'aide de l'API REST Cloud Tasks, de l'API RPC ou de la bibliothèque cliente Google Cloud. Vous pouvez également utiliser un service standard App Engine pour Python 3 en tant que cible Push. Pour plus d'informations, consultez la page Migrer des files d'attente de tâches vers Cloud Tasks.

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

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 n'importe quel mécanisme d'authentification basé sur HTTP, par exemple :