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 wird ein Architekturmuster zum Aufrufen von Legacy-Code mit App Engine, Compute Engine und Cloud Pub/Sub beschrieben. Es enthält eine Beispielimplementierung des Musters. 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 der Google Cloud Platform (GCP) 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 Cloud 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.

Beispielhafte Implementierung 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 Cloud Pub/Sub-Thema
  • Der Code-Wrapper zum Abonnieren des Cloud Pub/Sub-Themas und zum Senden empfangener Anfragen an einen Legacy-Code auf Windows-Basis

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 wie folgt aus:

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

Wenn Sie den Begriff "mars" eingeben und auf Submit (Senden) klicken, erhalten Sie dieses Ergebnis:

Shout-Anwendungsergebnis
Abbildung 3: Shout-Anwendungsergebnis

In dieser Anleitung werden folgende abrechenbare Komponenten der Google Cloud Platform verwendet:

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

Mit dem Preisrechner können Sie die Kosten für Ihre voraussichtliche Nutzung schätzen lassen. Neuen Nutzern der GCP steht unter Umständen 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. Wechseln Sie in der GCP Console zur Seite "Neue Instanz erstellen".

  2. Klicken Sie im Abschnitt Bootlaufwerk auf Ändern.

  3. Wählen Sie in der Liste der vorkonfigurierten Images Windows Server 2012 R2 Datacenter Edition aus und klicken Sie auf Auswählen.

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

  5. Lassen Sie im Abschnitt Projektzugriff uneingeschränkten API-Zugriff auf alle GCP-Dienste in Ihrem Projekt zu.

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

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

  8. 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. Rufen Sie in der GCP Console die Seite VM-Instanzen auf.

  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 Firewallregel, um den RDP-Zugriff auf Ihre Instanz zuzulassen:

  1. Rufen Sie in der GCP 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 GCP 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 System 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 Repositorys pubsub-shout-csharp in den Ordner windows-csharp.

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

  8. Bearbeiten Sie ShoutLib/Constants.cs. Setzen Sie die Variable ProjectId auf Ihre Projekt-ID in https://console.cloud.google.com/ und speichern Sie die Datei.

  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 Rechner im Windows Explorer zum Ordner ShoutService\bin, der dem Ordner windows-csharp untergeordnet ist.

  3. Kopieren Sie den Ordner Release in Ihre Instanz. Kopieren Sie dazu den Ordner aus Windows Explorer und fügen Sie ihn in das Fenster Ihrer Remote-Verbindung ein. 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, indem Sie LOCAL SERVICE, einem vordefinierten Windows-Nutzerkonto, das vom Service Control Manager verwendet wird, entsprechende Berechtigungen erteilen:

  1. Wechseln Sie im 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 in den 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 Rechner im Befehlszeilenterminal unter der lokalen Kopie des Repositorys pubsub-shout-csharp in den Ordner appengine-python-flask.

  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 Cloud Pub/Sub erforderliche 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 Cloud 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 alle Schritte in der Anleitung zu "Legacy-Code aufrufen" abgeschlossen haben, können Sie die Ressourcen bereinigen, die Sie auf der Google Cloud Platform erstellt haben. Damit verhindern Sie, dass Ihr Kontingent unnötig in Anspruch genommen wird und dass Ihnen die Ressourcen in Zukunft in Rechnung gestellt werden. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

GCP-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. Rufen Sie in der GCP Console die Seite Projekte auf.

    Zur Seite Projekte

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen delete.
  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. Wechseln Sie in der GCP Console zur Seite VM-Instanzen.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf das Kästchen neben der Instanz, die Sie löschen wollen.
  3. Klicken Sie oben auf der Seite auf Löschen delete, um die Instanz zu löschen.

Weitere Informationen

  • Weitere Google Cloud Platform-Features ausprobieren: Werfen Sie einen Blick auf unsere Anleitungen.
Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...