Hello Cloud Run mit C#

1. Einführung

89eb4723767d4525.png

Cloud Run ist eine verwaltete Plattform, mit der Sie zustandslose Container ausführen können, die sich über HTTP-Anfragen aufrufen lassen. Cloud Run arbeitet serverlos und benötigt keine Infrastrukturverwaltung. So können Sie sich ganz auf das Programmieren von Anwendungen konzentrieren.

Mit dieser auf Knative basierenden Plattform können Sie Container wahlweise vollständig verwaltet mit Cloud Run oder in einem Google Kubernetes Engine-Cluster mit Cloud Run in GKE ausführen.

In diesem Codelab erfahren Sie, wie Sie ein Container-Image erstellen und in Cloud Run bereitstellen.

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte 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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als PROJECT_ID bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.

Google Cloud Shell

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden wir jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell ist eine Umgebung für Online-Entwicklung und -Betrieb, auf die Sie mit Ihrem Browser von überall aus zugreifen können. Sie können Ihre Ressourcen mit dem Online-Terminal verwalten, auf dem Dienstprogramme wie das gcloud-Befehlszeilentool und kubectl vorinstalliert sind. Mit dem Cloud Shell Editor können Sie außerdem cloudbasierte Anwendungen entwickeln, erstellen, debuggen und bereitstellen.

Diese virtuelle Maschine verfügt über alle Entwicklungstools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird direkt in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser – ja, er funktioniert auf Chromebooks.

  • Klicken Sie einfach auf Cloud Shell aktivieren, um Cloud Shell über die Cloud Console zu aktivieren :

cb81e7c8e34bc8d.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

bfde7b083abc9544.png

Die Bereitstellung der Umgebung dauert nur wenige Sekunden :

cbb597d2be277a14.png

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind :

gcloud auth list

Befehlsausgabe

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

Das Projekt sollte außerdem bereits auf PROJECT_ID festgelegt sein (vorausgesetzt, du hast ein Projekt in der Webkonsole ausgewählt) :

gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Sollte das Projekt aus irgendeinem Grund nicht eingerichtet sein, geben Sie einfach den folgenden Befehl ein:

gcloud config set project <PROJECT_ID>

Du suchst dein Gerät (PROJECT_ID)? Sehen Sie sich das Drop-down-Menü oben in der Cloud Console an :

2c7a57249d954735.png

Sie können Ihre Projektdetails auch unter „Einstellungen und Dienstprogramme“ überprüfen. Abschnitt:

791f101797cfef39.png

Cloud Shell legt außerdem standardmäßig einige Umgebungsvariablen fest, die bei der Ausführung zukünftiger Befehle nützlich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  • Abschließend können Sie die Standardzone festlegen :
gcloud config set compute/zone us-central1-f

Du kannst verschiedene Zonen auswählen. Weitere Informationen finden Sie unter Regionen und Zonen.

Aktivieren Sie die Cloud Run API.

Aktivieren Sie in Cloud Shell die Cloud Run API:

gcloud services enable run.googleapis.com

In diesem Fall sollte eine Meldung ähnlich der folgenden angezeigt werden :

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Beispielanwendung schreiben

Wir erstellen eine einfache ASP.NET-C#-Anwendung, die auf HTTP-Anfragen reagiert.

Verwenden Sie zum Erstellen Ihrer Anwendung das dotnet-Befehlszeilentool in Cloud Shell:

dotnet new web -o helloworld-csharp

Wechseln Sie zum Verzeichnis helloworld-csharp:

cd helloworld-csharp

Aktualisieren Sie als Nächstes Program.cs entsprechend:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Mit diesem Code wird ein einfacher Webserver erstellt, der den von der Umgebungsvariablen PORT definierten Port überwacht und mit Hello World antwortet.

Sie können die Anwendung testen, indem Sie sie lokal in Cloud Shell ausführen. Es sollte Port 8080 überwacht werden:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. In Cloud Run bereitstellen

Stellen Sie die Anwendung mit dem folgenden Befehl in Cloud Run bereit:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world ist der Name des Diensts.
  • Das Flag allow-unauthenticated stellt den Dienst als öffentlich verfügbarer Dienst ohne Authentifizierungsanforderungen bereit.
  • us-central1 ist die Region, in der die Anwendung bereitgestellt wird.
  • Das Flag source bestimmt den Speicherort der zu erstellenden Quelle. Cloud Run erstellt mithilfe von Buildpacks automatisch einen Container aus dem Quellcode.

Warten Sie einige Minuten, bis die Bereitstellung abgeschlossen ist. Bei Erfolg wird in der Befehlszeile die Dienst-URL angezeigt :

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

Sie können jetzt den bereitgestellten Container aufrufen, indem Sie die Dienst-URL in einem Webbrowser öffnen :

85e7fbbd264444c9.png

Glückwunsch! Sie haben eine in einem Container-Image verpackte Anwendung in Cloud Run bereitgestellt. Cloud Run skaliert das Container-Image automatisch horizontal, damit die empfangenen Anfragen bearbeitet werden können, und skaliert es wieder herunter, wenn der Bedarf sinkt. Es fallen nur Kosten für die CPU-, Arbeitsspeicher- und Netzwerkressourcen an, die während der Anfrageverarbeitung verbraucht werden.

5. Zeit zum Aufräumen

Sie können entweder Ihr GCP-Projekt löschen, um Gebühren zu vermeiden, wodurch die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet wird, oder einfach den Cloud Run-Dienst löschen:

gcloud run services delete helloworld

6. Nächste Schritte

Ein guter nächster Schritt wäre die Bereitstellung in Cloud Run in GKE.

Lesen Sie, wie Sie einen zustandslosen, für Cloud Run geeigneten HTTP-Container aus einer Codequelle erstellen und in Container Registry hochladen: