Samouczek: wdrażanie aplikacji usługi ASP.NET Core i bazy danych Azure SQL w usłudze Azure App Service
Z tego samouczka dowiesz się, jak wdrożyć aplikację ASP.NET Core opartą na danych w celu Azure App Service i nawiązać połączenie z usługą Azure SQL Database. Wdrożysz również Azure Cache for Redis w celu włączenia kodu buforowania w aplikacji. Azure App Service to wysoce skalowalna, samonastosowalna usługa hostingu sieci Web, która może łatwo wdrażać aplikacje w systemie Windows lub Linux. Mimo że w tym samouczku jest używana aplikacja ASP.NET Core 7.0, proces jest taki sam w przypadku innych wersji platformy ASP.NET Core i platformy ASP.NET Framework.
Dla tego samouczka wymagane są następujące elementy:
- Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
- Konto usługi GitHub. Możesz również uzyskać jeden za darmo.
Przykładowa aplikacja
Aby zapoznać się z przykładową aplikacją używaną w tym samouczku, pobierz ją z repozytorium https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore lub sklonuj za pomocą następującego polecenia Git:
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
1. Tworzenie App Service, bazy danych i pamięci podręcznej
W tym kroku utworzysz zasoby platformy Azure. Kroki używane w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących App Service, bazę danych Azure SQL i usługę Azure Cache. W przypadku procesu tworzenia określisz następujące elementy:
- Nazwa aplikacji internetowej. Jest to nazwa używana jako część nazwy DNS aplikacji internetowej w postaci
https://<app-name>.azurewebsites.net
. - Region do fizycznego uruchamiania aplikacji na świecie.
- Stos środowiska uruchomieniowego dla aplikacji. W tym miejscu należy wybrać wersję platformy .NET do użycia dla aplikacji.
- Plan hostingu aplikacji. Jest to warstwa cenowa obejmująca zestaw funkcji i pojemność skalowania aplikacji.
- Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.
Zaloguj się do Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby Azure App Service.
Krok 1. W witrynie Azure Portal:
- Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części Azure Portal.
- Wybierz element z etykietą Web App + Database pod nagłówkiem Marketplace . Możesz również przejść bezpośrednio do kreatora tworzenia .
Krok 2. Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.
- Grupa zasobów → wybierz pozycję Utwórz nową i użyj nazwy msdocs-core-sql-tutorial.
- Region → dowolny region świadczenia usługi Azure w pobliżu.
- Nazwa → msdocs-core-sql-XYZ , gdzie XYZ to dowolne trzy losowe znaki. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.
- Stos środowiska uruchomieniowego → .NET 7 (STS).
- Czy dodać Azure Cache for Redis? → Tak.
- Plan hostingu → Podstawowa. Gdy wszystko będzie gotowe, możesz później przeprowadzić skalowanie w górę do produkcyjnej warstwy cenowej.
- Program SQLAzure jest domyślnie wybierany jako aparat bazy danych. Azure SQL Database to w pełni zarządzany aparat bazy danych platformy jako usługi (PaaS), który zawsze działa w najnowszej stabilnej wersji SQL Server.
- Wybierz pozycję Przejrzyj i utwórz.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
Krok 3. Wdrożenie trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Następuje przekierowanie bezpośrednio do aplikacji App Service, ale tworzone są następujące zasoby:
- Grupa zasobów → Kontener dla wszystkich utworzonych zasobów.
- App Service plan → Definiuje zasoby obliczeniowe dla App Service. Zostanie utworzony plan systemu Linux w warstwie Podstawowa .
- App Service → reprezentuje aplikację i działa w planie App Service.
- Sieć wirtualna → zintegrowana z aplikacją App Service izoluje ruch sieciowy zaplecza.
- Prywatne punkty końcowe → punkty końcowe programu Access dla serwera bazy danych i pamięci podręcznej Redis w sieci wirtualnej.
- Interfejsy sieciowe → Reprezentuje prywatne adresy IP, po jednym dla każdego z prywatnych punktów końcowych.
- Azure SQL serwer bazy danych → dostępny tylko zza prywatnego punktu końcowego.
- Azure SQL Database → A database i użytkownik są tworzone dla Ciebie na serwerze.
- Azure Cache for Redis → dostępne tylko zza prywatnego punktu końcowego.
- Prywatna strefa DNS stref → włączyć rozpoznawanie nazw DNS serwera bazy danych i pamięci podręcznej Redis w sieci wirtualnej.
2. Weryfikowanie parametrów połączenia
Kreator tworzenia wygenerował parametry połączenia dla bazy danych SQL i pamięci podręcznej Redis. W tym kroku znajdź wygenerowane parametry połączenia dla późniejszego użycia.
Krok 1. Na stronie App Service w menu po lewej stronie wybierz pozycję Konfiguracja.
Krok 2.
- Przewiń do dołu strony i znajdź AZURE_SQL_CONNECTIONSTRING w sekcji Parametry połączenia . Ten ciąg został wygenerowany na podstawie nowej bazy danych SQL przez kreatora tworzenia. Aby skonfigurować aplikację, ta nazwa jest potrzebna.
- Ponadto znajdź AZURE_REDIS_CONNECTIONSTRING w sekcji Ustawienia aplikacji . Ten ciąg został wygenerowany na podstawie nowej pamięci podręcznej Redis przez kreatora tworzenia. Aby skonfigurować aplikację, ta nazwa jest potrzebna.
- Jeśli chcesz, możesz wybrać przycisk Edytuj po prawej stronie każdego ustawienia i wyświetlić lub skopiować jego wartość.
Później zmienisz aplikację tak, aby używała wartości
AZURE_SQL_CONNECTIONSTRING
iAZURE_REDIS_CONNECTIONSTRING
.
3. Wdrażanie przykładowego kodu
W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w App Service, ale także doskonały sposób ciągłej integracji w procesie wdrażania. Domyślnie każde git push
z repozytorium GitHub rozpocznie akcję kompilacji i wdrożenia.
Krok 1. W nowym oknie przeglądarki:
- Zaloguj się do konta usługi GitHub.
- Przejdź do adresu https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
- Wybierz pozycję Rozwidlenie.
- Wybierz pozycję Utwórz rozwidlenie.
Krok 2. Na stronie App Service w menu po lewej stronie wybierz pozycję Centrum wdrażania.
Krok 3. Na stronie Centrum wdrażania:
- W obszarze Źródło wybierz pozycję GitHub. Domyślnie GitHub Actions jest wybierana jako dostawca kompilacji.
- Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
- W obszarze Organizacja wybierz swoje konto.
- W obszarze Repozytorium wybierz pozycję msdocs-app-service-sqldb-dotnetcore.
- W obszarze Gałąź wybierz pozycję main.
- W górnym menu wybierz pozycję Zapisz. App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w
.github/workflows
katalogu.
Krok 4. Wróć do strony GitHub przykładu rozwidlenia, otwórz Visual Studio Code w przeglądarce, naciskając .
klawisz .
Krok 5. W Visual Studio Code w przeglądarce:
- Otwórz plik DotNetCoreSqlDb/appsettings.json w eksploratorze.
- Zmień nazwę
MyDbConnection
parametrów połączenia naAZURE_SQL_CONNECTIONSTRING
, która odpowiada parametrom połączenia utworzonym we wcześniejszej App Service.
Krok 6.
- Otwórz plik DotNetCoreSqlDb/Program.cs w eksploratorze.
- W metodzie
options.UseSqlServer
zmień nazwęMyDbConnection
parametrów połączenia naAZURE_SQL_CONNECTIONSTRING
. W tym miejscu parametry połączenia są używane przez przykładową aplikację. - Usuń metodę
builder.Services.AddDistributedMemoryCache();
i zastąp ją następującym kodem. Zmienia kod z używania pamięci podręcznej w pamięci do pamięci podręcznej Redis Cache na platformie Azure i robi to za pomocą wcześniejszejAZURE_REDIS_CONNECTIONSTRING
wersji.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});
Krok 7.
- Otwórz plik .github/workflows/main_msdocs-core-sql-XYZ w eksploratorze. Ten plik został utworzony przez kreatora tworzenia App Service.
dotnet publish
W kroku dodaj krok, aby zainstalować narzędzie Entity Framework Core za pomocą poleceniadotnet tool install -g dotnet-ef
.- W ramach nowego kroku dodaj kolejny krok, aby wygenerować pakiet migracji bazy danych w pakiecie wdrożeniowym:
dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate
. Pakiet migracji to samodzielny plik wykonywalny, który można uruchomić w środowisku produkcyjnym bez konieczności używania zestawu .NET SDK. Kontener App Service linux ma tylko środowisko uruchomieniowe platformy .NET, a nie zestaw SDK platformy .NET.
Krok 8.
- Wybierz rozszerzenie Kontrola źródła .
- W polu tekstowym wpisz komunikat zatwierdzenia, taki jak
Configure DB & Redis & add migration bundle
. - Wybierz pozycję Zatwierdź i wypchnij.
Krok 9. Wróć do strony Centrum wdrażania w Azure Portal:
- Wybierz pozycję Dzienniki. Nowy przebieg wdrożenia został już uruchomiony z zatwierdzonych zmian.
- W elemencie dziennika przebiegu wdrożenia wybierz wpis Build/Deploy Logs z najnowszym znacznikiem czasu.
Krok 10. Przejdź do repozytorium GitHub i zobaczysz, że akcja usługi GitHub jest uruchomiona. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie. Poczekaj na uruchomienie usługi GitHub, aby wyświetlić stan Ukończono. Potrwa to kilka minut.
4. Generowanie schematu bazy danych
W przypadku SQL Database chronionej przez sieć wirtualną najprostszym sposobem uruchamiania migracji bazy danych dotnet jest sesja SSH z kontenerem App Service.
Krok 1. Z powrotem na stronie App Service w menu po lewej stronie wybierz pozycję SSH.
Krok 2. W terminalu SSH:
- Uruchom polecenie
cd /home/site/wwwroot
. Oto wszystkie wdrożone pliki. - Uruchom pakiet migracji wygenerowany przez przepływ pracy usługi GitHub przy użyciu polecenia
./migrate
. Jeśli to się powiedzie, App Service pomyślnie nawiązuje połączenie z SQL Database. Tylko zmiany w plikach w/home
programie mogą być utrwalane poza ponownym uruchomieniem aplikacji. Zmiany poza/home
nie są utrwalane.
5. Przejdź do aplikacji
Krok 1. Na stronie App Service:
- W menu po lewej stronie wybierz pozycję Przegląd.
- Wybierz adres URL aplikacji. Możesz również przejść bezpośrednio do
https://<app-name>.azurewebsites.net
adresu .
Krok 2. Dodaj kilka zadań do listy. Gratulacje, korzystasz z bezpiecznej aplikacji opartej na danych ASP.NET Core w Azure App Service.
Porada
Przykładowa aplikacja implementuje wzorzec odkładania do pamięci podręcznej . Gdy po raz drugi odwiedzisz widok danych lub ponownie załadujesz tę samą stronę po wprowadzeniu zmian danych, czas przetwarzania na stronie internetowej jest znacznie szybszy, ponieważ ładuje dane z pamięci podręcznej zamiast bazy danych.
6. Przesyłanie strumieniowe dzienników diagnostycznych
Azure App Service przechwytuje wszystkie komunikaty zarejestrowane w konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja generuje komunikaty dziennika konsoli w każdym z jego punktów końcowych, aby zademonstrować tę funkcję.
Krok 1. Na stronie App Service:
- W menu po lewej stronie wybierz pozycję App Service dzienniki.
- W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.
Krok 2. W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.
7. Czyszczenie zasobów
Po zakończeniu możesz usunąć wszystkie zasoby z subskrypcji platformy Azure, usuwając grupę zasobów.
Krok 1. Na pasku wyszukiwania w górnej części Azure Portal:
- Wpisz nazwę grupy zasobów.
- Wybierz odpowiednią grupę zasobów.
Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.
Krok 3.
- Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
- Wybierz pozycję Usuń.
Często zadawane pytania
- Ile kosztuje ta konfiguracja?
- Jak mogę nawiązać połączenie z serwerem bazy danych Azure SQL zabezpieczonym za siecią wirtualną za pomocą innych narzędzi?
- W jaki sposób programowanie aplikacji lokalnych działa z GitHub Actions?
- Jak mogę błędy debugowania podczas wdrażania GitHub Actions?
Ile kosztuje ta konfiguracja?
Cennik zasobów tworzenia jest następujący:
- Plan App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz cennik App Service.
- Baza danych Azure SQL jest tworzona w warstwie ogólnego przeznaczenia bezserwerowej na sprzęcie serii Standardowa z minimalnymi rdzeniami. Istnieje niewielki koszt i może być dystrybuowany do innych regionów. Możesz jeszcze bardziej zminimalizować koszt, zmniejszając maksymalny rozmiar lub skalować go w górę, dostosowując warstwę obsługi, warstwę obliczeniową, konfigurację sprzętu, liczbę rdzeni, rozmiar bazy danych i nadmiarowość strefy. Zobacz Cennik usługi Azure SQL Database.
- Azure Cache for Redis jest tworzony w warstwie Podstawowa z minimalnym rozmiarem pamięci podręcznej. Istnieje niewielki koszt związany z tą warstwą. Można ją skalować w górę do wyższych warstw wydajności, aby uzyskać wyższą dostępność, klastrowanie i inne funkcje. Zobacz cennik Azure Cache for Redis.
- Sieć wirtualna nie ponosi opłaty, chyba że skonfigurujesz dodatkowe funkcje, takie jak komunikacja równorzędna. Zobacz Cennik usługi Azure Virtual Network.
- Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.
Jak mogę nawiązać połączenie z serwerem bazy danych Azure SQL zabezpieczonym za siecią wirtualną za pomocą innych narzędzi?
- Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, możesz uruchomić
sqlcmd
go z poziomu terminalu SSH aplikacji. Kontener aplikacji nie zawiera elementusqlcmd
, dlatego należy zainstalować go ręcznie. Należy pamiętać, że zainstalowany klient nie utrzymuje się po ponownym uruchomieniu aplikacji. - Aby nawiązać połączenie z klienta SQL Server Management Studio lub z programu Visual Studio, maszyna musi znajdować się w sieci wirtualnej. Na przykład może to być maszyna wirtualna platformy Azure połączona z jedną z podsieci lub maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
W jaki sposób programowanie aplikacji lokalnych działa z GitHub Actions?
Pobierz automatycznie wygenerowany plik przepływu pracy z App Service jako przykład, a każdy z nich git push
rozpoczyna nową kompilację i przebieg wdrożenia. Z lokalnego klonu repozytorium GitHub należy wypchnąć żądane aktualizacje do usługi GitHub. Na przykład:
git add .
git commit -m "<some-message>"
git push origin main
Jak mogę błędy debugowania podczas wdrażania GitHub Actions?
Jeśli krok zakończy się niepowodzeniem w automatycznie wygenerowanym pliku przepływu pracy usługi GitHub, spróbuj zmodyfikować polecenie, które nie powiodło się, aby wygenerować bardziej pełne dane wyjściowe. Na przykład możesz uzyskać więcej danych wyjściowych dotnet
z dowolnego polecenia, dodając -v
opcję. Zatwierdzanie i wypychanie zmian w celu wyzwolenia innego wdrożenia w celu App Service.
Następne kroki
Przejdź do następnego samouczka, aby dowiedzieć się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.
Możesz też zapoznać się z innymi zasobami: