Samouczek: wdrażanie aplikacji ASP.NET Core i bazy danych w usłudze Azure Container Apps przy użyciu funkcji GitHub Actions
Z tego samouczka dowiesz się, jak wdrożyć aplikację ASP.NET Core i usługę SQL Database w usłudze Azure Container Apps przy użyciu programu Visual Studio i funkcji GitHub Actions. Dowiesz się również, jak zarządzać migracjami platformy Entity Framework i aktualizacjami baz danych w funkcji GitHub Actions, chociaż koncepcje mogą być również stosowane do innych narzędzi i środowisk ciągłej integracji/ciągłego wdrażania.
Warunki wstępne
Potrzebujesz programu Visual Studio 2022 zainstalowanego z funkcjonalnością ASP.NET i deweloperów aplikacji internetowych oraz z funkcjonalnością tworzenia aplikacji na platformie Azure.
Jeśli masz już zainstalowany program Visual Studio:
- Zainstaluj najnowsze aktualizacje w programie Visual Studio, wybierając pozycję Pomoc>Sprawdź dostępność aktualizacji.
- Sprawdź, czy zainstalowane są obciążenia ASP.NET, tworzenie aplikacji internetowych oraz tworzenie aplikacji na platformie Azure, wybierając Narzędzia >Pobierz narzędzia i funkcje.
Konfigurowanie przykładowej aplikacji lokalnie
Skorzystaj z przykładowej aplikacji TODO, aby wykonać czynności opisane w tym samouczku. Sklonuj aplikację z usługi GitHub przy użyciu następującego polecenia:
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
Przejdź do folderu projektu i otwórz rozwiązanie DotNetCoreSqlDb.sln
w programie Visual Studio.
Aplikacja TODO jest gotowa do użycia, ale musisz ustanowić połączenie z programem localdb
SQL Server dostępnym w programie Visual Studio. Nawiązywanie połączenia z localdb
umożliwi uruchamianie aplikacji i zapisywanie zadań podczas pracy lokalnej.
- Kliknij prawym przyciskiem myszy na węźle usług połączonych w Eksploratorze rozwiązań programu Visual Studio i wybierz Dodaj bazę danych SQL Server>.
- W oknie dialogowym Połącz z zależnością wybierz SQL Server Express LocalDB (local), a następnie wybierz Dalej.
- W oknie dialogowym Connect to SQL Server Express LocalDB (Lokalna) ustaw następujące wartości:
- Nazwa parametrów połączenia: Pozostaw wartość domyślną.
- Wartość parametrów połączenia: Pozostaw wartość domyślną.
- Zapisz wartość ciągu połączenia w: Wybierz None.
- Wybierz Dalej
- Na ekranie Podsumowanie zmian pozostaw ustawienia na wartościach domyślnych i wybierz opcję Zakończ, aby zakończyć przepływ pracy.
Program Visual Studio wyświetla podsumowanie zależności usługi, w tym połączenie z LocalDB
.
Następnie należy utworzyć migrację początkową i użyć jej do zaktualizowania lokalnej bazy danych przy użyciu poprawnego schematu dla aplikacji TODO.
- Wybierz ikonę ... po prawej stronie listy zależności usługi obok połączenia
LocalDB
, a następnie wybierz pozycję Dodaj migrację. - W oknie dialogowym Entity Framework Migrations poczekaj chwilę, aż Visual Studio zlokalizuje klasę
DbContext
uwzględnioną w projekcie. Po załadowaniu wartości wybierz Zakończ. - Program Visual Studio generuje folder
Migrations
w projekcie i tworzy początkową klasę migracji. Ta klasa może służyć do aktualizowania bazy danych przy użyciu poprawnego schematu. - Wybierz ponownie ikonę ... obok usługi
LocalDB
i wybierz pozycję Aktualizuj bazę danych. - W oknie dialogowym migracji Entity Framework zaczekaj chwilę na ponowne zlokalizowanie klasy
DbContext
programu Visual Studio, a następnie wybierz pozycję Zakończ. Program Visual Studio uruchom migrację i utwórz schemat bazy danych na serwerzeLocalDB
.
Uruchom projekt, wybierając przycisk uruchamiania DotNetCoreSqlDb na górze programu Visual Studio.
Po załadowaniu aplikacji sprawdź, czy baza danych działa poprawnie, wprowadzając nową czynność do wykonania. TODO jest wyświetlane w widoku listy głównej na ekranie głównym aplikacji.
Eksplorowanie konfiguracji uruchamiania aplikacji
Przykładowa aplikacja zawiera następujący kod w pliku Program.cs
:
if(builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}
Ten kod stosuje następujące konfiguracje:
- Gdy aplikacja działa lokalnie, parametry połączenia
localdb
są pobierane z plikuappsettings.json
i udostępniane do programu Entity Framework. Ta konfiguracja umożliwia zaewidencjonowanie parametrów połączenialocaldb
w kontroli źródła, dzięki czemu inni deweloperzy mogą łatwo łączyć się z lokalną bazą danych podczas programowania. Umożliwia również lokalne uruchamianie migracji programu Entity Framework. Domyślnie program Entity Framework nie odnajduje parametrów połączenia przechowywanych w zmiennej środowiskowej podczas uruchamiania migracji. - Gdy aplikacja działa w przepływach pracy funkcji GitHub Actions lub w środowisku produkcyjnym, parametry połączenia są pobierane ze zmiennych środowiskowych. Zmienne środowiskowe mogą uniemożliwić ewidencjonanie bezpiecznych parametrów połączenia w środowisku produkcyjnym w kontroli źródła lub dołączanie ich do plików konfiguracji.
Tworzenie usług platformy Azure
Aplikacja będzie wymagać utworzenia następujących usług platformy Azure w celu pomyślnego wdrożenia:
- Container App: Wymagane jest do hostowania i uruchamiania wdrożonej aplikacji.
- Container Registry: Przechowuje utworzony artefakt obrazu aplikacji konteneryzowanej.
- SQL Database: Bazę danych Azure SQL do przechowywania danych aplikacji.
Funkcje publikowania programu Visual Studio mogą obsługiwać tworzenie tych zasobów.
Tworzenie aplikacji kontenera platformy Azure i usługi Azure Container Registry
W Eksploratorze rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy węzeł projektu najwyższego poziomu i wybierz pozycję Publikuj.
W oknie dialogowym publikowania wybierz opcję Azure jako cel wdrożenia, a następnie wybierz opcję Dalej.
Dla określonego celu wybierz pozycję Azure Container Apps (Linux), a następnie wybierz pozycję Dalej.
Utwórz nową aplikację kontenera do wdrożenia. Wybierz przycisk + Utwórz nowy, aby otworzyć nowe okno dialogowe i wprowadzić następujące wartości:
- Nazwa aplikacji kontenera: Pozostaw wartość domyślną lub wprowadź nazwę.
- Nazwa subskrypcji: Wybierz subskrypcję, którą chcesz wdrożyć.
- Grupa zasobów: Wybierz Nowy i utwórz nową grupę zasobów o nazwie msdocs-app-db-ef.
-
Środowisko aplikacji kontenera: Wybierz Nowy, aby otworzyć okno dialogowe środowiska aplikacji kontenera i wprowadzić następujące wartości:
- Nazwa środowiska: Zachowaj wartość domyślną.
- Lokalizacja: Wybierz lokalizację w pobliżu.
-
Obszar roboczy usługi Azure Log Analytics: Wybierz Nowy, aby otworzyć okno dialogowe obszaru roboczego usługi Log Analytics.
- Nazwa: Pozostaw wartość domyślną.
- Lokalizacja: Wybierz lokalizację w pobliżu, a następnie wybierz ok, aby zamknąć okno dialogowe.
- Wybierz pozycję ok, aby zamknąć okno dialogowe środowiska aplikacji kontenera.
- Wybierz pozycję Utwórz, aby zamknąć okno dialogowe oryginalnych aplikacji kontenera. Program Visual Studio tworzy zasób aplikacji kontenera na platformie Azure.
Po utworzeniu zasobu upewnij się, że jest wybrany na liście aplikacji kontenerowych, a następnie wybierz Dalej.
Musisz utworzyć rejestr kontenerów platformy Azure, aby przechowywać opublikowany artefakt obrazu dla aplikacji. Wybierz ikonę + w kolorze zielonym na ekranie rejestru kontenerów.
Pozostaw wartości domyślne, a następnie wybierz pozycję Utwórz.
Po utworzeniu rejestru kontenerów upewnij się, że jest zaznaczona, a następnie wybierz pozycję Dalej.
Na ekranie typ wdrożenia wybierz pozycję ciągłej integracji/ciągłego wdrażania przy użyciu przepływów pracy funkcji GitHub Actions (generuje plik yml), a następnie wybierz pozycję Zakończ. Jeśli program Visual Studio wyświetli monit o włączenie użytkownikowi administracyjnemu dostępu do opublikowanego kontenera platformy Docker, wybierz pozycję Tak.
Program Visual Studio tworzy i wyświetla profil publikowania. Większość kroków publikowania i szczegółów opisano w pliku .yml
funkcji GitHub Actions, który można wyświetlić, klikając przycisk Edytuj przepływ pracy w widoku podsumowania profilu publikowania. Ten plik został szczegółowo omówiony w dalszej części artykułu.
Tworzenie bazy danych Azure SQL Database
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy na węźle usług połączonych i wybierz Dodaj bazę danych SQL Server>.
- W oknie dialogowym Połącz z zależnością wybierz pozycję Azure SQL Database, a następnie wybierz pozycję Dalej.
- Wybierz pozycję + Utwórz nową, aby dodać nową bazę danych.
- W oknie dialogowym Azure SQL Database wprowadź następujące wartości:
- Nazwa bazy danych: Pozostaw wartość domyślną.
- Nazwa subskrypcji: Wybierz tę samą subskrypcję co poprzednio.
-
grupa zasobów: Wybierz tę samą grupę
msdocs-app-db-ef
utworzoną wcześniej. -
Serwer bazy danych: Wybierz Nowy..., a następnie wprowadź następujące wartości w nowym okienku podręcznym:
- Nazwa serwera bazy danych: wprowadź unikatową nazwę serwera lub dołącz losowe liczby na końcu nazwy wygenerowanej automatycznie.
- Lokalizacja: Wybierz lokalizację znajdującą się blisko Ciebie.
- nazwa użytkownika administratora: Wprowadź wybraną wartość.
- hasło administratora: Wprowadź wybraną wartość.
- hasło administratora (potwierdź): wprowadź to samo hasło, aby potwierdzić. Wybierz OK, aby zamknąć okno dialogowe SQL Server
- Wybierz pozycję Utwórz, aby utworzyć program SQL Server i bazę danych.
- Po zakończeniu operacji wybierz serwer z listy i wybierz pozycję Dalej
- W oknie dialogowym Połącz z usługą Azure SQL Database pozostaw wartości domyślne, ale upewnij się, że Brak jest zaznaczone u dołu opcji Zapisz wartość parametrów połączenia w.
- Wybierz pozycję Zakończ, a program Visual Studio utworzy zasoby SQL.
Łączenie aplikacji kontenera z usługą Azure SQL
Na stronie przeglądu utworzonej aplikacji kontenera wybierz pozycję Service Connector (wersja zapoznawcza) na lewym pasku nawigacyjnym.
Wybierz pozycję + Utwórz, aby utworzyć nowe połączenie.
W wysuwanym oknie Tworzenie połączenia , wprowadź następujące wartości:
Container: Wybierz utworzony kontener dotnetcoresqldb.
typ usługi : wybierz SQL Database.
Subskrypcja: Wybierz tę samą subskrypcję, która była używana do utworzenia aplikacji kontenera.
Nazwa połączenia: Pozostaw wartość domyślną.
SQL Server: Wybierz utworzony wcześniej serwer bazy danych.
SQL Database: Wybierz bazę danych, którą stworzyłeś wcześniej.
typ klienta : Wybierz .NET.
Wybierz pozycję Dalej, Uwierzytelnianie i wprowadź następujące wartości:
- Wybierz ciąg połączenia dla typu uwierzytelniania.
- Nazwa użytkownika: wprowadź nazwę użytkownika użytą podczas tworzenia serwera bazy danych.
- hasło: wprowadź hasło użyte podczas tworzenia serwera bazy danych.
Pozostaw pozostałe ustawienia domyślne i wybierz pozycję Dalej: Sieć.
Pozostaw wybraną wartość domyślną i wybierz opcję Dalej: Przejrzyj i utwórz.
Po zweryfikowaniu ustawień platformy Azure wybierz pozycję Utwórz.
Po chwili powinno zostać wyświetlone połączenie z bazą danych SQL. Wybierz strzałkę, aby rozwinąć połączenie i wyświetlić wartość AZURE_SQL_CONNECTIONSTRING. Ta nazwa połączenia jest zgodna z nazwą parametrów połączenia zmiennej środowiskowej zdefiniowanych w przykładowej aplikacji.
Konfigurowanie przepływu pracy funkcji GitHub Actions
Plik przepływu pracy GitHub Actions wygenerowany przez Visual Studio może być używany przez GitHub do kompilowania i wdrażania aplikacji na platformie Azure, gdy zmiany zostaną wprowadzone. Obecnie ten proces zadziała, ale wdrożona aplikacja zgłosi wyjątek. Mimo że baza danych Azure SQL Database została utworzona, należy dodać krok do przepływu pracy funkcji GitHub Actions w celu wygenerowania schematu. Parametry połączenia dla bazy danych Azure SQL Database mogą być bezpiecznie przechowywane jako wpis tajny w usłudze GitHub i pobierane przez przepływ pracy po jego uruchomieniu.
Pobierz ciąg połączenia i dodaj go do tajnych danych GitHub.
W witrynie Azure Portal wyszukaj bazę danych utworzoną na głównym pasku wyszukiwania i wybierz ją z wyników.
Na stronie przeglądu bazy danych wybierz pozycję Ciągi połączeniowe z lewego panelu nawigacyjnego.
Na karcie ADO.NET skopiuj ciąg połączenia z pola formularza.
Przejdź do rozgałęzionego repozytorium GitHub aplikacji.
Na karcie Ustawienia wybierz pozycję Wpisy tajne > Akcje w obszarze nawigacji po lewej stronie, a następnie wybierz pozycję Nowy wpis tajny repozytorium.
Na stronie Nowa strona tajna wprowadź następujące wartości:
Łańcuch połączenia jest teraz bezpiecznie przechowywany w tajnych danych repozytorium GitHub i można go pobrać za pomocą przepływu pracy GitHub.
Modyfikowanie przepływu pracy funkcji GitHub Actions w celu włączenia migracji
Otwórz plik przepływu pracy funkcji GitHub Actions
.yml
wygenerowany przez program Visual Studio, wybierając przycisk Edytuj przepływ pracy na stronie podsumowania publikowania.Dołącz następujący kod yaml na końcu pliku przepływu pracy:
- name: Run EF run: | dotnet tool install --global dotnet-ef dotnet tool restore dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
Ten kod instaluje narzędzia wiersza polecenia platformy Entity Framework i uruchamia migracje aplikacji. Po uruchomieniu przepływu pracy kod używa również parametru
connection
poleceniadatabase update
, aby zastąpić ciąg połączenialocaldb
przechowywany w plikuappsettings.json
wartością dodaną do sekretów GitHub.
Uruchamianie przepływu pracy funkcji GitHub Actions i testowanie wdrożenia
Zatwierdź zmiany w aplikacji i wypchnij do zforowanego repozytorium przy użyciu następującego polecenia:
git add --all git commit -m "Added GitHub Actions workflow" git push
Przejdź do repozytorium GitHub i wybierz kartę Actions. Uruchomienie workflow powinno zostać automatycznie uruchomione, jeśli wypychanie zakończyło się pomyślnie.
Wybierz aktywny przepływ pracy, aby wyświetlić szczegóły dziennika dla każdego kroku po zakończeniu. Migracja trwa ostatnio, aby zaktualizować bazę danych na platformie Azure.
Po zakończeniu przepływu pracy aplikacja zostanie wdrożona w usłudze Azure Container Apps i połączona z bazą danych ze zaktualizowanym schematem.
Wdrożenie można przetestować, przechodząc do strony głównej aplikacji kontenera i tworząc todo, podobnie jak lokalnie. Adres URL aplikacji kontenera można zawsze znaleźć na stronie przeglądu aplikacji w witrynie Azure Portal.