Wdrażanie aplikacji ASP.NET Core w App Engine

1. Przegląd

ASP.NET Core to nowa platforma typu open source i na wielu platformach, która umożliwia tworzenie nowoczesnych aplikacji działających w chmurze i połączonych z internetem przy użyciu języka programowania C#.

W tym module wdrożysz prostą aplikację ASP.NET Core w elastycznym środowisku App Engine. Ten moduł opiera się na module Tworzenie i uruchamianie aplikacji ASP.NET Core za pomocą Google Cloud Shell. Zanim rozpoczniesz ten moduł, możesz najpierw wykonać tamten.

Aplikacje Google App Engine można łatwo tworzyć, utrzymywać i skalować w miarę zmian w ruchu i potrzebach związanych z przechowywaniem danych. W App Engine nie musisz zarządzać serwerami. Wystarczy przesłać aplikację, aby była gotowa do użycia.

Aplikacje App Engine automatycznie skalują się na podstawie przychodzącego ruchu. App Engine natywnie obsługuje równoważenie obciążenia, mikroserwisy, autoryzację, bazy danych SQL i NoSQL, Memcache, dzielenie ruchu, rejestrowanie, wyszukiwanie, obsługę wersji, wdrażanie i wycofywanie zmian oraz skanowanie pod kątem bezpieczeństwa. Wszystkie te funkcje można w dużym stopniu dostosowywać.

Środowiska App Engine, czyli środowisko standardowe i środowisko elastyczne, obsługują wiele języków programowania, w tym C#, Java, Python, PHP, Node.js, Go i inne. Dzięki tym 2 środowiskom użytkownicy mają maksymalną elastyczność w zakresie działania aplikacji, ponieważ każde z nich ma określone zalety. Więcej informacji znajdziesz w artykule Wybór środowiska App Engine.

Czego się nauczysz

  • Jak spakować prostą aplikację ASP.NET Core jako kontener Dockera.
  • Jak wdrożyć prostą aplikację ASP.NET Core w App Engine.

Czego potrzebujesz

  • projekt Google Cloud Platform,
  • przeglądarka, np. Chrome lub Firefox;

Jak zamierzasz korzystać z tego samouczka?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia

Jak oceniasz korzystanie z Google Cloud Platform?

Początkujący Średnio zaawansowany Zaawansowany

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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. Możesz go w dowolnym momencie zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości modułów z kodem musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Po utworzeniu projektu jest on „zamrażany”.
  • Istnieje też trzecia wartość, czyli numer projektu, którego 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. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczenia opłat po zakończeniu tego samouczka, postępuj zgodnie z instrukcjami „czyszczenia” na końcu ćwiczenia. 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.

Uruchamianie Cloud Shell

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

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni (część strony widoczna po przewinięciu) z opisem tego środowiska. W takim przypadku kliknij Dalej, a ten ekran nie będzie się już wyświetlać. Ten wyświetlany jednorazowo ekran wygląda tak:

70f315d7b402b476.png

Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

fbe3a0674c982259.png

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 w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce lub na Chromebooku.

Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.

  1. Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list

Wynik polecenia

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli nie, możesz go ustawić za pomocą tego polecenia:

gcloud config set project <PROJECT_ID>

Wynik polecenia

Updated property [core/project].

3. Tworzenie aplikacji ASP.NET Core w Cloud Shell

W wierszu poleceń Cloud Shell możesz sprawdzić, czy narzędzie wiersza poleceń dotnet jest już zainstalowane, wyświetlając listę zainstalowanych pakietów SDK .NET:

dotnet --list-sdks

Następnie utwórz nowy szkielet aplikacji internetowej ASP.NET Core z platformą docelową netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Spowoduje to utworzenie projektu i przywrócenie zależności. Wyświetli się komunikat podobny do tego poniżej.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. Uruchamianie aplikacji ASP.NET Core

Nasza aplikacja jest już prawie gotowa do uruchomienia. Otwórz folder aplikacji.

cd HelloWorldAspNetCore

Na koniec uruchom aplikację.

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

Aplikacja zaczyna nasłuchiwać na porcie 8080.

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

Aby sprawdzić, czy aplikacja działa, kliknij przycisk podglądu w przeglądarce w prawym górnym rogu i wybierz „Podejrzyj na porcie 8080”.

Capture.PNG

Zobaczysz domyślną stronę internetową ASP.NET Core:

f579a9baedc108a9.png

Gdy sprawdzisz, czy aplikacja działa, naciśnij Ctrl+C, aby ją wyłączyć.

5. Publikowanie aplikacji ASP.NET Core

Teraz opublikuj aplikację, aby uzyskać samodzielną bibliotekę DLL, używając polecenia dotnet publish.

dotnet publish -c Release

Uruchomienie publish wyświetla na końcu procesu niektóre komunikaty z informacją o pomyślnym opublikowaniu biblioteki DLL.

...
  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. Tworzenie pliku app.yaml dla elastycznego środowiska App Engine

Plik app.yaml opisuje, jak wdrożyć aplikację w App Engine, w tym przypadku w środowisku elastycznym App Engine.

Najpierw otwórz folder publish. Powinien znajdować się w folderze bin/Release, ale dokładna ścieżka zależy od wersji .NET:

cd bin/Release/netcoreapp3.1/publish/

Utwórz plik app.yaml w folderze publish:

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

Zwróć uwagę, że w pliku app.yaml środowisko jest określone jako flex, a środowisko wykonawcze jako aspnetcore.

7. Wdrażanie w elastycznym środowisku App Engine

Możesz już wdrożyć aplikację w elastycznym środowisku App Engine za pomocą gcloud. W katalogu publish uruchom to polecenie:

gcloud app deploy --version v0

Podczas wdrażania może pojawić się prośba o wybranie regionu dla aplikacji. Wybierz region, w którym ma działać aplikacja.

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

Spowoduje to utworzenie obrazu aplikacji w chmurze, zapisanie go w Google Container Registry i wdrożenie w App Engine. Podczas wdrażania możesz zobaczyć, jak tworzony jest obraz kontenera:

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

Na koniec powinna pojawić się informacja o wdrożeniu aplikacji.

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

Po wdrożeniu aplikacji otwórz ją,wpisując adres URL http://<project-id>.appspot.com w przeglądarce.

W nowej karcie zobaczysz domyślną stronę ASP.NET Core.

f579a9baedc108a9.png

Możesz też sprawdzić utworzony dla Ciebie w chmurze obraz kontenera. W konsoli Cloud otwórz Container Registry > Images (Rejestr kontenerów > Obrazy), a następnie w folderze appengine powinien być widoczny obraz aplikacji.

de788f4949d0c5a.png

8. Wdrażanie nowej wersji usługi

W pewnym momencie aplikacja wdrożona w środowisku produkcyjnym będzie wymagać poprawek lub dodatkowych funkcji. App Engine pomoże Ci wdrożyć nową wersję w środowisku produkcyjnym bez wpływu na użytkowników.

Najpierw zmodyfikujemy aplikację. Otwórz edytor kodu w Cloud Shell.

868c4f615e2331fe.png

Otwórz Index.cshtml w folderze Views/HomeHelloWorldAspNetCore i zaktualizuj domyślną wiadomość:

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

Zapisz zmiany i wróć do Cloud Shell. W HelloWorldAspNetCore,opublikuj aplikację, aby uzyskać samodzielną bibliotekę DLL.

dotnet publish -c Release

Przejdź do katalogu publikowania.

cd bin/Release/netcoreapp3.1/publish/

Możesz teraz wdrożyć nową wersję aplikacji (w tym przypadku v1).

gcloud app deploy --version v1

Po wdrożeniu możesz przejść do sekcji wersji App Engine w konsoli Google Cloud, aby zobaczyć nową wersję aplikacji, która obsługuje cały ruch z nowym komunikatem.

8cc0cc992b4e07ed.png

9. Panele informacyjne i podział ruchu

W App Engine w sekcji Panel znajdziesz kilka paneli dotyczących aplikacji, np. opóźnienia czy procesora. Zapoznaj się z nimi.

5c879431935b080d.png

W sekcji Wersje możesz zobaczyć wdrożone wersje aplikacji, a w sekcji Podział ruchu możesz podzielić ruch między różne wersje. Podzielmy ruch między 2 wersje:

176a2e22e755b6d3.png

10. Gratulacje!

Czyszczenie

Czas wyłączyć aplikację, aby zaoszczędzić koszty i być dobrym użytkownikiem chmury.

Otwórz sekcję wersji App Engine.

7e9b3b4406e785b9.png

Wybierz wersję i zatrzymaj ją.

7f80d9ff2c959e0.png

Po zatrzymaniu wersji instancje zapasowe zostaną usunięte, a liczba instancji powinna spaść do zera.

29f3cb5c71225b2d.png

Omówione zagadnienia

Gotowe! Utworzyliśmy aplikację ASP.NET Core, spakowaliśmy ją jako kontener Dockera i wdrożyliśmy w elastycznym środowisku Google App Engine.

  • Jak spakować prostą aplikację ASP.NET Core jako kontener Dockera.
  • Jak wdrożyć prostą aplikację ASP.NET Core w App Engine.

Następne kroki

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.