Legacy-Code aufrufen

Sie möchten Ihre App zu App Engine migrieren, es gibt jedoch ein Problem: Der serverseitige Code ist an ein bestimmtes Betriebssystem gebunden und kann nicht einfach portiert werden. Vielleicht verwenden Sie ein veraltetes COM-Objekt, das in C++ oder Visual Basic geschrieben wurde. Oder, schlimmer, Ihr Quellcode existiert nicht mehr und nur die ausführbare Binärdatei ist noch vorhanden.

In dieser Anleitung werden ein Architekturmuster zum Aufrufen von Legacy-Code mit App Engine, Compute Engine und Pub/Sub beschrieben und eine Beispielimplementierung des Musters vorgestellt. Obwohl bei dieser Beispielimplementierung überwiegend mit Windows-spezifischem Code gearbeitet wird, können Sie das hier beschriebene Muster für jeden Legacy-Code wiederverwenden.

Ziele

  • Einfaches Architekturmuster zum Aufrufen von Legacy-Code in Google Cloud kennenlernen
  • Beispielimplementierung des Architekturmusters herunterladen und einsetzen

Architekturmuster zum Aufrufen von Legacy-Code

Das folgende Diagramm veranschaulicht ein Architekturmuster, mit dem Sie Legacy-Code aus der App Engine-App aufrufen können.

Architekturmuster zum Aufrufen von Legacy-Code
Abbildung 1: Architekturmuster zum Aufrufen von Legacy-Code

Diese Architektur funktioniert so:

  1. Der Webclient sendet eine Anfrage an die App Engine-Anwendung, die die Anfrage für ein Pub/Sub-Thema schreibt.

  2. Ein Code-Wrapper bezieht die Anfrage aus dem Thema.

  3. Der Code-Wrapper ruft den Legacy-Code auf.

  4. Der Legacy-Code gibt das Ergebnis an den Wrapper zurück. Der Wrapper gibt das Ergebnis anschließend an die App Engine-Anwendung zurück, die es ihrerseits an den Webclient zurücksendet.

Beispielimplementierung des Musters

Sie finden eine Implementierung des obigen Musters bei GitHub. Diese Beispielanwendung nimmt einen String als Eingabe, verarbeitet diesen mit den im Muster umrissenen Komponenten und gibt eine Version in Großbuchstaben zurück. Der Anwendungscode enthält zwei Hauptkomponenten:

  • Die App Engine-Anwendung zum Veröffentlichen der eingehenden Anfragen in einem Pub/Sub-Thema
  • Den Code-Wrapper, der das Pub/Sub-Thema abonniert und, wenn eine Anfrage eingeht, die Anfrage an einen Windows-basierten Legacy-Code sendet.

In dieser Implementierung ist der Wrapper ein Windows-Dienst, der in C# geschrieben ist. Dieser Wrapper-Dienst ist so konfiguriert, dass er beim Start der Instanz ausgeführt wird. Er kann jedes Skript oder jede Binärdatei aufrufen, das/die von C# aufgerufen werden kann. Sowohl der Wrapper-Dienst als auch die aufgerufene Binärdatei befinden sich auf einer Compute Engine-Instanz, die unter Windows Server 2012 R2 ausgeführt wird.

Die Benutzeroberfläche der Anwendung sieht so aus:

Benutzeroberfläche der Shout-Anwendung
Abbildung 2: Benutzeroberfläche der Shout-Anwendung

Wenn Sie den Begriff „mars“ eingeben und auf Senden klicken, ist dies das Ergebnis:

Shout-Anwendungsergebnis
Abbildung 3: Shout-Anwendungsergebnis

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

  • Eine Compute Engine-Instanz mit einer Lizenz für Windows Server 2012
  • Pub/Sub-Dienste

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Voraussetzungen

In dieser Beispielanwendung wird Folgendes vorausgesetzt:

Quellcode abrufen

Laden Sie hier den Beispielcode herunter und entpacken Sie ihn. Wenn Sie es vorziehen, können Sie das GitHub-Projekt-Repository stattdessen mit folgendem Befehl klonen:

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

Abhängigkeiten installieren

Rufen Sie in Ihrem Befehlszeilenterminal den Ordner appengine-python-flask in Ihrer lokalen Kopie des Repositorys pubsub-shout-csharp auf und führen Sie dann Folgendes aus:

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

Compute Engine-Instanz erstellen

Erstellen Sie die Compute Engine-Instanz, in der der Code-Wrapper und der Legacy-Code ausgeführt werden:

  1. Rufen Sie in der Cloud Console die Seite Neue Instanz erstellen auf.

  2. Klicken Sie im Abschnitt Bootlaufwerk auf Ändern.

  3. Wählen Sie auf dem Tab Öffentliche Images das Betriebssystem Windows Server und die Version 2012 R2 Datacenter Edition aus.

  4. Klicken Sie auf Speichern, um die Bootlaufwerksoptionen zu bestätigen.

  5. Lassen Sie im Bereich Firewalls HTTP- und HTTPS-Traffic zu.

  6. Gewähren Sie im Abschnitt Projektzugriff uneingeschränkten API-Zugriff auf alle Google Cloud-Dienste in Ihrem Projekt.

  7. Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten und dann auf den Tab Netzwerk, um erweiterte Optionen einzublenden.

  8. Fügen Sie im Abschnitt Netzwerktags das Tag rdp-tag hinzu. Im späteren Verlauf dieser Anleitung werden Sie eine Firewallregel erstellen, die einen externen RDP-Zugriff auf alle mit diesem Tag markierten Instanzen ermöglicht.

  9. Klicken Sie auf Erstellen, um mit der Erstellung Ihrer neuen Instanz zu beginnen.

Nachdem Sie die Instanz erstellt haben, fügen Sie der Instanz einen Windows-Standardnutzer hinzu:

  1. Öffnen Sie in der Cloud Console die Seite VM-Instanzen.

  2. Klicken Sie auf den Namen der neu bereitgestellten Instanz.

  3. Klicken Sie auf der Instanzseite auf Windows-Passwort festlegen.

  4. Erstellen Sie das Nutzerkonto für Ihre Instanz. Geben Sie dazu im Dialogfeld Neues Windows-Kennwort festlegen einen Nutzernamen ein und klicken Sie auf Festlegen.

  5. Notieren Sie das angegebene Passwort und schließen Sie das Dialogfeld.

Erstellen Sie als Nächstes eine Firewalregel, um den RDP-Zugriff auf Ihre Instanz zuzulassen:

  1. Rufen Sie in der Cloud Console die Seite Firewallregel erstellen auf.

  2. Füllen Sie das Formular so aus:

    • Name: rdp-rule
    • Quell-IP-Bereiche: 0.0.0.0/0
    • Zulässige Protokolle und Ports: tcp:3389
    • Zieltags: rdp-tag
  3. Klicken Sie zum Erstellen der Firewallregel auf Erstellen.

Code-Wrapper erstellen und einsetzen

So erstellen Sie den Code-Wrapper-Dienst:

  1. Rufen Sie in der Cloud Console die Seite Anmeldedaten auf.

  2. Klicken Sie auf Neue Anmeldedaten und wählen Sie Dienstkontoschlüssel aus.

  3. Füllen Sie auf der Seite Dienstkontoschlüssel erstellen das Formular wie folgt aus:

    • Dienstkonto: Neues Dienstkonto
    • Name: Ein Name Ihrer Wahl.
    • Dienstkonto-ID: Eine ID Ihrer Wahl.
    • Schlüsseltyp: JSON
  4. Klicken Sie auf Erstellen. Nach einigen Sekunden wird eine JSON-Schlüsseldatei auf Ihren lokalen Computer heruntergeladen.

  5. Erstellen Sie auf Ihrem lokalen Computer eine neue Umgebungsvariable mit der Bezeichnung GOOGLE_APPLICATION_CREDENTIALS und setzen Sie sie auf den absoluten Pfad der JSON-Schlüsseldatei.

  6. Wechseln Sie in Ihrer lokalen Kopie des pubsub-shout-csharp-Repositorys zum Ordner windows-csharp.

  7. Öffnen Sie ShoutService.sln in Visual Studio 2012 oder höher.

  8. Bearbeiten Sie ShoutLib/Constants.cs, legen Sie die Variable ProjectId auf die Projekt-ID von https://console.cloud.google.com/ fest und speichern Sie sie.

  9. Klicken Sie im Menü Erstellen auf Lösung erstellen, um die Anwendung zu erstellen.

Nachdem Sie den Code-Wrapper-Dienst erstellt haben, kopieren Sie ihn auf Ihre Compute Engine-Instanz:

  1. Stellen Sie eine Remote Desktop-Verbindung zu der Instanz her, die Sie zuvor im Rahmen der Anleitung erstellt haben.

  2. Wechseln Sie auf Ihrem lokalen Computer im Windows Explorer zum Ordner ShoutService\bin im Ordner windows-csharp.

  3. Kopieren Sie den Ordner Release aus Windows Explorer und fügen Sie ihn in das Fenster der Remote-Verbindung ein, um den Ordner in Ihre Instanz zu kopieren. Der Ordner Release enthält den Wrapper und den Dienst "Shout".

Als Nächstes können Sie zulassen, dass der Windows Service Control Manager Ihren Dienst startet, anhält und anderweitig mit ihm interagiert. Erteilen Sie hierzu LOCAL SERVICE, einem vordefinierten Windows-Nutzerkonto, das vom Service Control Manager verwendet wird, entsprechende Berechtigungen:

  1. Wechseln Sie in Windows Explorer zum Ordner Release.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner, um das Kontextmenü zu öffnen, und klicken Sie dann auf Eigenschaften.

  3. Klicken Sie im Dialogfeld Freigabeeigenschaften auf den Tab Sicherheit.

  4. Klicken Sie auf Bearbeiten.

  5. Klicken Sie im Dialogfeld Berechtigungen für Freigabe auf Hinzufügen.

  6. Geben Sie im Dialogfeld Nutzer oder Gruppen auswählen unter Geben Sie die zu verwendenden Objektnamen ein den String LOCAL SERVICE ein und klicken Sie auf OK.

  7. Klicken Sie im Dialogfeld Berechtigungen für Freigabe auf LOKALER DIENST.

  8. Stellen Sie unter Berechtigungen für LOKALEN DIENST sicher, dass die folgenden Berechtigungen aktiviert sind:

    • Lesen und Ausführen
    • Ordnerinhalt auflisten
    • Lesen
  9. Klicken Sie auf OK.

Installieren Sie schließlich den Code-Wrapper-Dienst:

  1. Öffnen Sie auf Ihrem Remote-Computer das Befehlszeilenterminal als Administrator und wechseln Sie zum Ordner Release.

  2. Installieren Sie den Code-Wrapper-Dienst:

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

App Engine-Anwendung bereitstellen

So stellen Sie die App Engine-Anwendung bereit:

  1. Wechseln Sie auf Ihrem lokalen Computer in Ihrem Befehlszeilenterminal zum Ordner appengine-python-flask in Ihrer lokalen Kopie des pubsub-shout-csharp-Repositorys.

  2. Stellen Sie die Anwendung bereit.

    C:\> appcfg.py -A <your_project_id> -V 1 --oauth2 update .
  3. Authentifizieren Sie die Anwendung, wenn Sie dazu aufgefordert werden.

  4. Aktivieren Sie die Pub/Sub API.

    Aktivieren Sie die API

  5. Rufen Sie die folgende URL in Ihrem Webbrowser auf, um die Anwendung zu initialisieren:

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

    Wenn Sie diese URL besuchen, erstellt die App Engine-Anwendung ein Pub/Sub-Thema und abonniert dann den Code-Wrapper-Dienst für das Thema.

Das wars! Ihre Anwendung ist jetzt live. Öffnen Sie <your_project_id>.appspot.com, um sie in Aktion zu sehen.

Bereinigen

Nachdem Sie die Anleitung zum Aufrufen des Legacy-Codes abgeschlossen haben, können Sie die Ressourcen, die Sie in Google Cloud erstellt haben, bereinigen, damit diese keine kostenpflichtigen Kontingente verbrauchen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

Google Cloud-Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Compute Engine-Instanz löschen

So löschen Sie eine Compute Engine-Instanz:

  1. Öffnen Sie in der Cloud Console die Seite VM-Instanzen.

    Die Seite VM-Instanzen aufrufen

  2. Klicken Sie auf das Kästchen für die Instanz, die Sie löschen möchten.
  3. Klicken Sie auf Löschen , um die Instanz zu löschen.

Weitere Informationen