Wprowadzenie do Cloud Run w języku C#

1. Wprowadzenie

89eb4723767d4525.png

Cloud Run to zarządzana platforma, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. Cloud Run jest rozwiązaniem bezserwerowym, które nie wymaga zarządzania infrastrukturą, dzięki czemu możesz skupić się na tym, co najważniejsze, czyli tworzeniu świetnych aplikacji.

Rozwiązanie to jest oparte na platformie Knative, co pozwala uruchamiać w pełni zarządzane kontenery w Cloud Run lub kontenery w klastrze Google Kubernetes Engine przy użyciu Cloud Run w GKE.

Celem tego laboratorium jest utworzenie obrazu kontenera i wdrożenie go w Cloud Run.

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Google Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module użyjemy Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

Cloud Shell to środowisko programistyczne i operacyjne online, które można otworzyć w dowolnym miejscu przy użyciu przeglądarki. Możesz zarządzać zasobami za pomocą terminala online wyposażonego w takie narzędzia jak narzędzie wiersza poleceń gcloud czy kubectl. Możesz również tworzyć, kompilować, debugować i wdrażać aplikacje działające w chmurze przy użyciu edytora Cloud Shell online.

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa bezpośrednio w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Oznacza to, że do ukończenia tego ćwiczenia potrzebujesz tylko przeglądarki (działa ona na Chromebooku).

  • Aby aktywować Cloud Shell w konsoli Cloud, kliknij Aktywuj Cloud Shell :

cb81e7c8e34bc8d.png

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.

bfde7b083abc9544.png

Udostępnienie środowiska powinno zająć tylko kilka sekund :

cbb597d2be277a14.png

Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone :

gcloud auth list

Wynik polecenia

Credentialed Accounts

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

Projekt powinien być już ustawiony na PROJECT_ID (zakładając, że został wybrany w konsoli internetowej) :

gcloud config list project

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli z jakiegoś powodu projekt nie jest ustawiony, po prostu wydaj to polecenie:

gcloud config set project <PROJECT_ID>

Szukasz urządzenia PROJECT_ID? Sprawdź menu u góry konsoli Cloud :

2c7a57249d954735.png

Szczegóły projektu możesz też sprawdzić w sekcji „Ustawienia i narzędzia”:

791f101797cfef39.png

Cloud Shell domyślnie ustawia też niektóre zmienne środowiskowe, które mogą być przydatne podczas wykonywania kolejnych poleceń.

echo $GOOGLE_CLOUD_PROJECT

Wynik polecenia

<PROJECT_ID>
  • Na koniec możesz ustawić strefę domyślną :
gcloud config set compute/zone us-central1-f

Możesz wybrać różne strefy. Więcej informacji znajdziesz w artykule Regiony i strefy.

Włącz Cloud Run API

W Cloud Shell włącz Cloud Run API :

gcloud services enable run.googleapis.com

Powinien wyświetlić się komunikat o powodzeniu podobny do tego :

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

3. Tworzenie przykładowej aplikacji

Utworzymy prostą aplikację ASP.NET C#, która będzie odpowiadać na żądania HTTP.

Aby utworzyć aplikację, użyj narzędzia wiersza poleceń dotnet w Cloud Shell:

dotnet new web -o helloworld-csharp

Przejdź do katalogu helloworld-csharp:

cd helloworld-csharp

Następnie zaktualizuj Program.cs, aby pasowało do tych wartości:

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();

Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie określonym przez zmienną środowiskową PORT i odpowiada Hello World.

Aplikację możesz przetestować, uruchamiając ją lokalnie w Cloud Shell. Powinien nasłuchiwać na porcie 8080:

$ 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. Wdrożenie w Cloud Run

Aby wdrożyć aplikację w Cloud Run, użyj tego polecenia:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world to nazwa usługi.
  • Flaga allow-unauthenticated wdraża usługę jako publicznie dostępną bez wymagań dotyczących uwierzytelniania.
  • us-central1 to region, w którym zostanie wdrożona aplikacja.
  • Flaga source określa lokalizację źródła do skompilowania. Cloud Run używa pakietów kompilacji do automatycznego tworzenia kontenera z kodu źródłowego.

Poczekaj kilka minut na zakończenie wdrażania. Kiedy operacja zostanie wykonana, w wierszu poleceń wyświetli się URL usługi :

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

Możesz teraz zobaczyć wdrożony kontener, otwierając URL usługi w przeglądarce :

85e7fbbd264444c9.png

Gratulacje! Właśnie udało Ci się wdrożyć w Cloud Run aplikację spakowaną do obrazu kontenera. Cloud Run automatycznie skaluje obraz kontenera w poziomie, aby obsługiwać otrzymane żądania, a następnie skaluje go w dół, gdy zapotrzebowanie maleje. Płacisz tylko za procesor, pamięć i sieć wykorzystywane w trakcie obsługiwania żądań.

5. Czas na zwolnienie miejsca

Możesz usunąć projekt GCP, co spowoduje zaprzestanie naliczania opłat za wszelkie zasoby wykorzystywane w ramach tego projektu, albo usunąć tylko usługę Cloud Run:

gcloud run services delete helloworld

6. Co dalej?

Dobrym kolejnym krokiem będzie wdrożenie w Cloud Run w GKE.

Więcej informacji o tworzeniu na podstawie kodu bezstanowego kontenera HTTP, który będzie odpowiedni do zastosowania w Cloud Run, i przekazywaniu go do Container Registry znajdziesz w tych materiałach (w języku angielskim):