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. To ćwiczenie jest kontynuacją ćwiczenia 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 ruchu przychodzącego. App Engine natywnie obsługuje równoważenie obciążenia, mikrousługi, 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 wykorzystać ten samouczek?

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 lub Google Workspace, musisz je utworzyć.

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • Nazwa projektu to wyświetlana nazwa dla 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 przewodników programistycznych 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 programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchom Cloud Shell

Z Google Cloud można korzystać zdalnie na laptopie, ale w tym ćwiczeniu użyjesz 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 (poniżej linii podziału) 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 laboratorium, 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 nową szkieletową aplikację internetową 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

Już niedługo będzie można uruchomić aplikację. Otwórz folder aplikacji.

cd HelloWorldAspNetCore

Na koniec uruchom aplikację.

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

Aplikacja zacznie 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ę 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

Po uruchomieniu polecenia publish wyświetli się kilka komunikatów, a na końcu procesu informacja 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 sposób wdrażania aplikacji w App Engine, w tym przypadku w elastycznym środowisku 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 plik app.yaml określa środowisko 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 zobaczysz, że aplikacja została wdrożona.

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

Na 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 (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 błędów 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 i dzielenie 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! Aplikacja ASP.NET Core została utworzona, spakowana jako kontener Dockera i wdrożona 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.