Appeler le code ancien

Vous souhaitez effectuer la migration de votre application vers App Engine, mais vous vous heurtez au problème suivant : le code côté serveur est lié à un système d'exploitation spécifique, ce qui rendrait son portage difficile. Vous utilisez peut-être un objet COM obsolète écrit en C++ ou en Visual Basic ; ou, pire, votre code source n'existe plus et il ne reste que le binaire exécutable.

Ce tutoriel décrit un modèle architectural permettant d'appeler du code ancien à l'aide d'App Engine, de Compute Engine et de Cloud Pub/Sub, puis fournit un exemple d'implémentation de ce modèle. Bien que cet exemple porte sur un code spécifique de Windows, le modèle qu'il décrit est réutilisable pour tout autre type de code ancien.

Objectifs

  • Découvrir un modèle architectural simple permettant d'appeler du code ancien sur Google Cloud Platform (GCP)
  • Télécharger et déployer un exemple de mise en œuvre de ce modèle architectural

Modèle architectural permettant d'appeler du code ancien

Le diagramme qui suit illustre un modèle architectural permettant d'appeler du code ancien à partir de votre application App Engine.

Modèle architectural permettant d'appeler du code ancien
Figure 1 : Modèle architectural permettant d'appeler du code ancien

Cette architecture fonctionne comme suit :

  1. Le client Web envoie une requête à l'application App Engine, qui écrit la requête dans un sujet Cloud Pub/Sub.

  2. Un wrapper de code extrait la requête de ce sujet.

  3. Le wrapper de code appelle le code ancien.

  4. Le code ancien renvoie le résultat au wrapper. Celui-ci renvoie ensuite ce même résultat à l'application App Engine, qui le renvoie à son tour au client Web.

Exemple de mise en œuvre de ce modèle

Vous trouverez une mise en œuvre du modèle ci-dessus sur GitHub. Cet exemple d'application reçoit une chaîne en entrée, la traite à l'aide des composants décrits dans le modèle et en renvoie une version entièrement convertie en majuscules. Le code de l'application comprend deux composants principaux :

  • L'application App Engine, qui publie les requêtes entrantes dans un sujet Cloud Pub/Sub.
  • Le wrapper de code, qui s'abonne au sujet Cloud Pub/Sub et, lorsqu'il reçoit une requête, l'envoie à un code ancien basé sur Windows.

Dans cette mise en œuvre, le wrapper est un service Windows écrit en C#. Ce service de wrapper est configuré pour s'exécuter au démarrage de l'instance et peut appeler n'importe quel script ou fichier binaire pouvant être lancé à partir de C#. Le service de wrapper et le binaire appelé résident sur une instance de Compute Engine exécutant Windows Server 2012 R2.

L'interface utilisateur de l'application se présente comme suit :

Interface utilisateur de l'application Shout
Figure 2 : Interface utilisateur de l'application Shout

Si vous tapez le mot "mars" et cliquez sur Submit (Envoyer), le résultat est le suivant :

Résultat de l'application Shout
Figure 3 : Résultat de l'application Shout

Ce tutoriel utilise les composants facturables de Google Cloud Platform répertoriés ici :

  • Une instance de Compute Engine avec une licence Windows Server 2012
  • Des services Cloud Pub/Sub

Vous pouvez vous servir du simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue. Les nouveaux utilisateurs de GCP peuvent bénéficier d'un essai gratuit.

Conditions requises

Cet exemple d'application présuppose ce qui suit :

Obtenir le code source

Téléchargez l'exemple de code disponible ici et décompressez-le. Si vous préférez, vous pouvez plutôt cloner le dépôt du projet GitHub en exécutant la commande suivante :

C:\> git clone https://github.com/GoogleCloudPlatform/pubsub-shout-csharp.git

Installer les dépendances

Dans votre terminal de ligne de commande, accédez au dossier appengine-python-flask de votre copie locale du dépôt pubsub-shout-csharp, puis exécutez la commande suivante :

C:\> pip install -r requirements.txt -t lib

Créer une instance Compute Engine

Créez l'instance Compute Engine sur laquelle le wrapper de code et le code ancien seront exécutés :

  1. Dans la console GCP, accédez à la page Créer une instance.

  2. Dans la section Disque de démarrage, cliquez sur Modifier.

  3. Dans la liste des images préconfigurées, sélectionnez Windows Server 2012 R2 Datacenter Edition, puis cliquez sur Sélectionner.

  4. Dans la section Pare-feu, autorisez le trafic HTTP et HTTPS.

  5. Dans la section Accès au projet, autorisez l'accès API complet à tous les services GCP de votre projet.

  6. Pour afficher les options avancées, cliquez sur Gestion, sécurité, disques, mise en réseau et location unique, puis sur l'onglet Réseau.

  7. Dans la section Tags réseau, ajoutez le tag rdp-tag. Plus loin dans ce tutoriel, vous créerez une règle de pare-feu qui autorise un accès RDP externe à toutes les instances marquées de ce tag.

  8. Lancez la création de votre instance en cliquant sur Créer.

Après avoir créé l'instance, ajoutez-lui un utilisateur Windows par défaut :

  1. Dans la console GCP, accédez à la page Instances de VM.

  2. Cliquez sur le nom de l'instance que vous venez de déployer.

  3. Sur la page d'informations de l'instance, cliquez sur le bouton Définir un mot de passe Windows.

  4. Pour créer le compte utilisateur sur votre instance, dans la boîte de dialogue Définir un nouveau mot de passe Windows, ajoutez votre nom d'utilisateur et cliquez sur Définir.

  5. Notez le mot de passe enregistré et fermez la boîte de dialogue.

Ensuite, créez une règle de pare-feu pour activer l'accès RDP à votre instance :

  1. Dans la console GCP, accédez à la page Créer une règle de pare-feu.

  2. Remplissez le formulaire comme suit :

    • Nom : rdp-rule
    • Plages d'adresses IP sources : 0.0.0.0/0
    • Protocoles et ports autorisés : tcp:3389
    • Tags cibles : rdp-tag
  3. Lancez la création de votre règle de pare-feu en cliquant sur Créer.

Créer et déployer le wrapper de code

Pour créer le service de wrapper de code :

  1. Dans la console GCP, accédez à la page Identifiants.

  2. Cliquez sur Nouveaux identifiants, puis sélectionnez Clé de compte de service.

  3. Sur la page Créer une clé de compte de service, remplissez le formulaire comme suit :

    • Compte de service : "Nouveau compte de service"
    • Nom : un nom de votre choix
    • Identifiant du compte de service : un identifiant de votre choix
    • Type de clé : "JSON"
  4. Cliquez sur Créer. Après quelques secondes, un fichier de clé JSON est téléchargé sur votre ordinateur local.

  5. Sur votre machine locale, créez une variable d'environnement nommée GOOGLE_APPLICATION_CREDENTIALS et attribuez-lui comme valeur le chemin absolu du fichier de clé JSON.

  6. Accédez au dossier windows-csharp de votre copie locale du dépôt pubsub-shout-csharp.

  7. Ouvrez ShoutService.sln dans Visual Studio version 2012 ou ultérieure.

  8. Modifiez ShoutLib/Constants.cs, définissez la variable ProjectId sur l'ID de votre projet dans https://console.cloud.google.com/, puis enregistrez.

  9. Dans le menu Créer, cliquez sur Créer une solution afin de créer l'application.

Une fois le service de wrapper de code créé, copiez-le dans votre instance Compute Engine :

  1. Établissez une connexion de bureau à distance avec l'instance que vous venez de créer dans ce tutoriel.

  2. Sur votre machine locale, dans l'Explorateur Windows, accédez au dossier ShoutService\bin sous votre dossier windows-csharp.

  3. Copiez le dossier Release à partir de l'Explorateur Windows, puis collez-le dans la fenêtre de connexion à distance de façon à copier le dossier sur votre instance. Le dossier Release contient le wrapper et le service Shout.

Autorisez ensuite le Gestionnaire de contrôle des services Windows à démarrer votre service, à l'arrêter et à interagir de toute autre façon avec lui en accordant les autorisations appropriées à SERVICE LOCAL, un compte utilisateur Windows prédéfini utilisé par le Gestionnaire de contrôle des services :

  1. Dans l'Explorateur Windows, accédez au dossier Release.

  2. Cliquez avec le bouton droit sur le dossier pour ouvrir le menu contextuel, puis cliquez sur Propriétés.

  3. Dans la boîte de dialogue Propriétés de : Release, cliquez sur l'onglet Sécurité.

  4. Cliquez sur Modifier.

  5. Dans la boîte de dialogue Autorisations pour Release, cliquez sur Ajouter.

  6. Dans la boîte de dialogue Sélectionnez des utilisateurs ou des groupes, sous Entrez les noms des objets à sélectionner, saisissez LOCAL SERVICE, puis cliquez sur OK.

  7. Dans la boîte de dialogue Autorisations pour Release, cliquez sur LOCAL SERVICE.

  8. Sous Autorisations pour LOCAL SERVICE, assurez-vous que les autorisations suivantes sont activées :

    • Lecture et exécution
    • Affichage du contenu du dossier
    • Lecture
  9. Cliquez sur OK.

Enfin, installez le service de wrapper de code :

  1. Sur votre machine distante, ouvrez le terminal de ligne de commande en tant qu'administrateur, puis accédez au dossier Release.

  2. Installez le service de wrapper de code :

    C:\> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe ShoutService.exe
    

Déployer l'application App Engine

Pour déployer l'application App Engine :

  1. Sur votre machine locale, dans le terminal de ligne de commande, accédez au dossier appengine-python-flask de votre copie locale du dépôt pubsub-shout-csharp.

  2. Déployez l'application.

    C:\> appcfg.py -A <your_project_id> -V 1 --oauth2 update .
  3. Authentifiez l'application lorsque vous y êtes invité.

  4. Activez Cloud Pub/Subl'API requise.

    Activer l'API.

  5. Pour initialiser l'application, accédez à l'URL suivante dans votre navigateur Web :

    https://<your_project_id>.appspot.com/init

    Lorsque vous accédez à cette URL, l'application App Engine crée un sujet Cloud Pub/Sub, puis abonne le service de wrapper de code à ce sujet.

Félicitations ! Votre application est maintenant en ligne. Accédez à <your_project_id>.appspot.com pour la voir fonctionner.

Effectuer un nettoyage

Une fois que vous avez terminé ce tutoriel consacré à l'appel de code ancien, vous pouvez procéder au nettoyage des ressources que vous avez créées sur GCP afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.

Supprimer votre projet GCP

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans la console GCP, accédez à la page Projets.

    Accéder à la page Projets

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer delete.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer votre instance Compute Engine

Pour supprimer une instance Compute Engine, procédez comme suit :

  1. Dans la console GCP, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cochez la case à côté de l'instance que vous souhaitez supprimer.
  3. Cliquez sur le bouton Supprimer delete situé en haut de la page pour supprimer l'instance.

Étape suivante

  • Testez d'autres fonctionnalités de Google Cloud Platform. Découvrez nos tutoriels.
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…