Eine ASP.NET Core-Anwendung für App Engine bereitstellen

1. Übersicht

ASP.NET Core ist ein neues, plattformübergreifendes Open-Source-Framework zum Entwickeln moderner cloudbasierter und mit dem Internet verbundener Anwendungen mithilfe der Programmiersprache C#.

In diesem Lab stellen Sie eine einfache ASP.NET Core-App in der flexiblen App Engine-Umgebung bereit. Dieses Codelab baut auf dem Codelab ASP.NET Core-App mit Google Cloud Shell erstellen und starten auf. Es empfiehlt sich, dieses Lab zuerst zu absolvieren, bevor Sie mit diesem Lab beginnen.

Google App Engine-Anwendungen lassen sich einfach erstellen, pflegen und skalieren, wenn sich Traffic und Datenspeicheranforderungen ändern. Mit App Engine müssen keine Server verwaltet werden. Sie laden einfach Ihre Anwendung hoch und es kann losgehen.

App Engine-Anwendungen werden auf der Basis des eingehenden Traffics automatisch skaliert. Load-Balancing, Mikrodienste, Autorisierung, SQL- und NoSQL-Datenbanken, Memcache, Traffic-Aufteilung, Logging, Suche, Versionsverwaltung, Rollouts und Rollbacks sowie Sicherheitsscans werden in App Engine nativ unterstützt und können individuell angepasst werden.

In den App Engine-Umgebungen – Standardumgebung und flexible Umgebung – wird eine Vielzahl von Programmiersprachen unterstützt, z. B. C#, Java, Python, PHP, Node.js und Go. Beide Umgebungen bieten Nutzern maximale Flexibilität für die Bereitstellung von Anwendungen, wobei jede ihre spezifischen Vorteile hat. Weitere Informationen finden Sie unter App Engine-Umgebung auswählen.

Lerninhalte

  • Eine einfache ASP.NET Core-App als Docker-Container verpacken
  • Eine einfache ASP.NET Core-App für App Engine bereitstellen

Voraussetzungen

  • Google Cloud Platform-Projekt
  • Ein Browser, z. B. Chrome oder Firefox

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und Übungen durchführen

Wie würden Sie Ihre Erfahrung mit der Google Cloud Platform bewerten?

Anfänger Mittelstufe Fortgeschritten

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird und den Sie jederzeit aktualisieren können.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als PROJECT_ID angegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Nachdem das Projekt erstellt wurde, wird es „eingefroren“.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit nach Abschluss dieses Codelabs keine Gebühren anfallen, folgen Sie den Bereinigungsanweisungen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren 4292cbf4971c9786.png.

bce75f34b2c53987.png

Wenn Sie die Cloud Shell zuvor noch nicht gestartet haben, wird ein Fenster mit einer Beschreibung eingeblendet. Klicken Sie in diesem Fall einfach auf Weiter. So sieht dieses Fenster aus:

70f315d7b402b476.png

Das Herstellen der Verbindung mit der Cloud Shell sollte nur wenige Augenblicke dauern.

fbe3a0674c982259.png

Auf dieser virtuellen Maschine sind alle Entwicklungstools installiert, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht sogar alle Aufgaben in diesem Codelab können mit einem Browser oder Ihrem Chromebook erledigt werden.

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in der Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. ASP.NET Core-App in Cloud Shell erstellen

Sie können in der Cloud Shell-Eingabeaufforderung prüfen, ob das dotnet-Befehlszeilentool bereits installiert ist, indem Sie die installierten .NET SDKs auflisten:

dotnet --list-sdks

Erstellen Sie als Nächstes das Grundgerüst für eine neue ASP.NET Core-Web-App mit dem Zielframework netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Dadurch sollte ein Projekt mit wiederhergestellten Abhängigkeiten erstellt werden, was durch eine Meldung wie die folgende bestätigt wird.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. ASP.NET Core-App ausführen

Die Anwendung ist fast einsatzbereit. Rufen Sie den App-Ordner auf.

cd HelloWorldAspNetCore

Führen Sie die App zum Schluss aus.

dotnet run --urls=http://localhost:8080

Die Anwendung überwacht nun Port 8080.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

Klicken Sie oben rechts auf die Schaltfläche „Webvorschau“ und wählen Sie „Vorschau auf Port 8080“ aus, um zu prüfen, ob die App ausgeführt wird.

Capture.PNG

Sie sehen die ASP.NET Core-Standardwebseite:

f579a9baedc108a9.png

Wenn Sie bestätigt haben, dass die App ausgeführt wird, drücken Sie Strg + C, um sie zu beenden.

5. ASP.NET Core-App veröffentlichen

Veröffentlichen Sie die Anwendung mithilfe des Befehls dotnet publish, um eine eigenständige DLL zu erhalten.

dotnet publish -c Release

Wenn Sie den Befehl publish ausführen, werden am Ende des Vorgangs einige Nachrichten mit dem Verweis auf die erfolgreiche Veröffentlichung einer DLL angezeigt.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. app.yaml für die flexible App Engine-Umgebung erstellen

In der Datei app.yaml ist beschrieben, wie die App in App Engine, in diesem Fall in der flexiblen Umgebung, bereitgestellt wird.

Rufen Sie zuerst den Ordner publish auf. Das sollte sich im Ordner bin/Release befinden. Der genaue Pfad hängt jedoch von der Version von .NET ab:

cd bin/Release/netcoreapp3.1/publish/

Erstellen Sie im Ordner publish eine app.yaml-Datei:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

Beachten Sie, dass in der Datei app.yaml die Umgebung als flex und die Laufzeit als aspnetcore angegeben sind.

7. In der flexiblen App Engine-Umgebung bereitstellen

Sie können Ihre App jetzt mit gcloud in der flexiblen App Engine-Umgebung bereitstellen. Führen Sie im Verzeichnis publish den folgenden Befehl aus:

gcloud app deploy --version v0

Im Rahmen des Bereitstellungsprozesses werden Sie möglicherweise aufgefordert, eine Region für Ihre Anwendung auszuwählen. Wählen Sie eine Region aus, in der die App ausgeführt werden soll.

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

Dadurch wird ein Image für Ihre Anwendung in der Cloud erstellt, in Google Container Registry gespeichert und in App Engine bereitgestellt. Während des Deployments können Sie sehen, wie das Container-Image erstellt wird:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

Am Ende sollten Sie sehen, dass die App bereitgestellt wurde.

...
Deployed service [default] to [https://<project-id>.appspot.com]

Nachdem Sie die Anwendung bereitgestellt haben,können Sie sie über die URL http://<project-id>.appspot.com in Ihrem Webbrowser aufrufen.

Die ASP.NET Core-Standardwebseite wird in einem neuen Tab angezeigt.

f579a9baedc108a9.png

Sie können sich auch das Container-Image ansehen, das für Sie in der Cloud erstellt wurde. Rufen Sie in der Cloud Console „Container Registry“ > „Images“ auf. Im Ordner „appengine“ sollte das Image für Ihre Anwendung angezeigt werden.

de788f4949d0c5a.png

8. Neue Dienstversion bereitstellen

Früher oder später sind für die Anwendung, die Sie für die Produktion bereitgestellt haben, Fehlerbehebungen oder zusätzliche Funktionen erforderlich. App Engine unterstützt Sie bei der Bereitstellung einer neuen Version für die Produktion, ohne Ihre Nutzer zu beeinträchtigen.

Ändern wir zuerst die Anwendung. Öffnen Sie den Code-Editor über Cloud Shell.

868c4f615e2331fe.png

Rufen Sie Index.cshtml im Ordner Views/Home von HelloWorldAspNetCore auf und aktualisieren Sie die Standardnachricht so:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

Speichern Sie die Änderungen und kehren Sie dann zu Cloud Shell zurück. Veröffentlichen Sie die App im Verzeichnis HelloWorldAspNetCore,, um eine eigenständige DLL zu erhalten.

dotnet publish -c Release

Rufen Sie das Verzeichnis "Publish" auf.

cd bin/Release/netcoreapp3.1/publish/

Sie können jetzt eine neue Version Ihrer App bereitstellen, in diesem Fall v1.

gcloud app deploy --version v1

Nachdem Sie die App bereitgestellt haben, können Sie in der Google Cloud Console im Bereich „App Engine-Versionen“ nachsehen, wie die neue App-Version den gesamten Traffic mit der neuen Nachricht weiterleitet.

8cc0cc992b4e07ed.png

9. Dashboards und Trafficaufteilung

Im App Engine-Dashboard finden Sie eine Reihe von Dashboards für Ihre Anwendung, z. B. für Latenz und CPU. Sehen Sie sich diese selbst an.

5c879431935b080d.png

Im Bereich „Versionen“ sehen Sie die bereitgestellten Versionen Ihrer App. Im Bereich „Trafficaufteilung“ können Sie den Traffic zwischen verschiedenen Versionen aufteilen. So teilen Sie den Traffic auf zwei Versionen auf:

176a2e22e755b6d3.png

10. Glückwunsch!

Cleanup

Es ist an der Zeit, die App herunterzufahren, um Kosten zu sparen und nicht mehr benötigte Ressourcen für andere freizugeben.

Rufen Sie den Bereich „Versionen“ von App Engine auf.

7e9b3b4406e785b9.png

Wählen Sie die Version aus und beenden Sie sie.

7f80d9ff2c959e0.png

Sobald die Version beendet wurde, werden die zugrunde liegenden Instanzen gelöscht und die Anzahl der Instanzen sollte auf null sinken.

29f3cb5c71225b2d.png

Behandelte Themen

Geschafft! Sie haben eine ASP.NET Core-App erstellt, sie als Docker-Container verpackt und in der flexiblen Google App Engine-Umgebung bereitgestellt.

  • Eine einfache ASP.NET Core-App als Docker-Container verpacken
  • Eine einfache ASP.NET Core-App für App Engine bereitstellen

Nächste Schritte

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.