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, Compute Engine et Pub/Sub, et fournit un exemple de mise en œuvre 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écouvrez un modèle architectural simple pour appeler le code ancien sur Google Cloud.
  • 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 l'écrit dans un sujet 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 Pub/Sub.
  • Le wrapper de code qui s'abonne au sujet Pub/Sub et, lorsqu'il reçoit une requête, renvoie celle-ci à un code Windows ancien.

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 suivants de Google Cloud :

  • Une instance de Compute Engine avec une licence Windows Server 2012
  • Services Pub/Sub

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Prérequis

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 Cloud Console, accédez à la page Créer une instance.

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

  3. Dans l'onglet Images publiques, sélectionnez le système d'exploitation Windows Server et la version 2012 R2 Datacenter Edition.

  4. Cliquez sur Enregistrer pour confirmer les options du disque de démarrage.

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

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

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

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

  9. 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 Cloud Console, 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 Cloud Console, 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 Cloud Console, 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 2012 ou version ultérieure.

  8. Modifiez ShoutLib/Constants.cs, définissez la variable ProjectId pour votre ID de projet sur 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 ordinateur local, dans l'Explorateur Windows, accédez au dossier ShoutService\bin situé sous le dossier windows-csharp.

  3. Copiez le dossier Release à partir de l'Explorateur Windows, puis collez-le dans la fenêtre de connexion à distance pour copier le dossier dans 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 ordinateur distant, ouvrez le terminal de ligne de commande en tant qu'administrateur et 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 ordinateur local, 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 l'API Pub/Sub.

    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 Pub/Sub, puis abonne le service de wrapper de code à ce sujet.

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

Nettoyer

Une fois que vous avez terminé le tutoriel "Appeler le code ancien", vous pouvez procéder au nettoyage des ressources que vous avez créées sur Google Cloud 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 Google Cloud

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 Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  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 Cloud Console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cochez la case correspondant à à l'instance que vous souhaitez supprimer.
  3. Cliquez sur Supprimer  pour supprimer l'instance.

Étape suivante

  • Testez d'autres fonctionnalités de Google Cloud. Découvrez nos tutoriels.