Udostępnij przez


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

Potrzebny jest program Visual Studio 2022 zainstalowany z pakietem roboczym ASP.NET oraz tworzenie aplikacji internetowych i tworzenie aplikacji na platformie Azure .

Jeśli masz już zainstalowany program Visual Studio:

  • Zainstaluj najnowsze aktualizacje w programie Visual Studio, wybierając pozycję Sprawdzanie dostępnościaktualizacji>.
  • Sprawdź, czy pakiety robocze tworzenia aplikacji ASP.NET i tworzenia aplikacji internetowych i tworzenia aplikacji na platformie Azure są instalowane, wybierając pozycję Narzędzia>Pobierz narzędzia i funkcje.

Ostrzeżenie

W tym artykule użyto parametrów połączenia. Należy zachować ostrożność podczas zarządzania połączeniami przy użyciu nazw użytkowników, haseł lub kluczy dostępu. Te tajne informacje nie powinny być zatwierdzane w systemie kontroli wersji ani umieszczane w niezabezpieczonych lokalizacjach, gdzie mogą uzyskać do nich dostęp nieuprawnieni użytkownicy. Podczas programowania lokalnego zazwyczaj łączysz się z lokalną bazą danych, która nie wymaga przechowywania wpisów tajnych ani bezpośredniego łączenia się z platformą Azure. W środowisku produkcyjnym połącz się z bazą danych Azure SQL przy użyciu podejścia bez użycia sekretów, takiego jak Microsoft Entra ID, jeśli jest to możliwe.

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.

  1. Kliknij prawym przyciskiem myszy węzeł Usługi połączone w Eksploratorze rozwiązań programu Visual Studio i wybierz pozycję Dodaj > bazę danych programu SQL Server.
  2. W oknie dialogowym Łączenie z zależnością wybierz pozycję SQL Server Express LocalDB (lokalnie), a następnie wybierz przycisk Dalej.
  3. W oknie dialogowym Łączenie z bazą danych SQL Server Express LocalDB (lokalnie) 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ść parametrów połączenia w: Wybierz pozycję Brak.
    • Wybierz pozycję Dalej
  4. Na ekranie Podsumowanie zmian pozostaw wartości domyślne ustawień i wybierz pozycję Zakończ , aby ukończyć przepływ pracy.

Program Visual Studio wyświetla podsumowanie zależności usługi, w tym połączenie z LocalDB.

Zrzut ekranu przedstawiający sposób dodawania migracji przy użyciu programu Visual Studio.

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.

  1. Wybierz ikonę ... po prawej stronie listy zależności usługi obok LocalDB połączenia, a następnie wybierz pozycję Dodaj migrację.
  2. W oknie dialogowym Entity Framework Migrations zaczekaj chwilę, aż Visual Studio zlokalizuje klasę DbContext uwzględnioną w projekcie. Po załadowaniu wartości wybierz pozycję Zakończ.
  3. 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.
  4. Wybierz ponownie ikonę ... obok LocalDB usługi, a następnie wybierz pozycję Aktualizuj bazę danych.
  5. W oknie dialogowym Migracje programu Entity Framework zaczekaj chwilę na ponowne zlokalizowanie DbContext klasy w programie Visual Studio, a następnie wybierz pozycję Zakończ. Program Visual Studio uruchom migrację i utwórz schemat bazy danych na serwerze LocalDB.

Uruchom projekt, wybierając przycisk Uruchamiania DotNetCoreSqlDb w górnej części 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 pliku appsettings.json i udostępniane do programu Entity Framework. Ta konfiguracja umożliwia zaewidencjonowanie parametrów połączenia localdb 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:

  • Aplikacja kontenera: Wymagane do hostowania i uruchamiania wdrożonej aplikacji.
  • Container Registry: Przechowuje utworzony artefakt obrazu aplikacji konteneryzowanej.
  • SQL Database: Baza danych Azure SQL Database 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

  1. W Eksploratorze rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy węzeł projektu najwyższego poziomu i wybierz pozycję Publikuj.

  2. W oknie dialogowym publikowania wybierz pozycję Azure jako element docelowy wdrożenia, a następnie wybierz pozycję Dalej.

  3. Dla określonego elementu docelowego wybierz pozycję Azure Container Apps (Linux), a następnie wybierz pozycję Dalej.

  4. Utwórz nową aplikację kontenera do wdrożenia. Wybierz przycisk + Utwórz nowy , aby otworzyć nowe okno dialogowe i wprowadź następujące wartości:

    Zrzut ekranu przedstawiający sposób tworzenia aplikacji kontenera.

    • Nazwa aplikacji kontenera: Pozostaw wartość domyślną lub wprowadź nazwę.
    • Nazwa subskrypcji: Wybierz subskrypcję do wdrożenia.
    • Grupa zasobów: Wybierz pozycję Nowy i utwórz nową grupę zasobów o nazwie msdocs-app-db-ef.
    • Środowisko aplikacji kontenera: Wybierz pozycję Nowy , aby otworzyć okno dialogowe środowiska aplikacji kontenera i wprowadź 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 pozycję 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 przycisk OK , aby zamknąć okno dialogowe.
      • Wybierz przycisk 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.
  5. Po utworzeniu zasobu upewnij się, że został wybrany na liście aplikacji kontenera, a następnie wybierz pozycję Dalej.

  6. Musisz utworzyć usługę Azure Container Registry, aby przechowywać opublikowany artefakt obrazu dla aplikacji. Wybierz zieloną + ikonę na ekranie Container Registry .

    Zrzut ekranu przedstawiający sposób tworzenia nowego rejestru kontenerów.

  7. Pozostaw wartości domyślne, a następnie wybierz pozycję Utwórz.

  8. Po utworzeniu rejestru kontenerów upewnij się, że jest zaznaczona, a następnie wybierz pozycję Dalej.

  9. Na ekranie Typ wdrożenia wybierz CI/CD za pomocą przepływów pracy GitHub Actions (generuje plik yml), a następnie wybierz 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 GitHub Actions .yml , 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

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy węzeł Połączone usługi i wybierz polecenie Dodaj > bazę danych programu SQL Server.
  2. W oknie dialogowym Łączenie z zależnością wybierz pozycję Azure SQL Database , a następnie wybierz pozycję Dalej.
  3. Wybierz pozycję + Utwórz nowy , aby dodać nową bazę danych.
  4. 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ą msdocs-app-db-ef grupę utworzoną wcześniej.
    • Serwer bazy danych: Wybierz Nowy... i wprowadź następujące wartości w nowym okienku:
      • Nazwa serwera bazy danych: Wprowadź unikatową nazwę serwera lub dołącz losowe liczby na końcu automatycznie wygenerowanej nazwy.
      • 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 przycisk OK , aby zamknąć okno dialogowe programu SQL Server
    • Wybierz pozycję Utwórz , aby utworzyć program SQL Server i bazę danych.
    • Po zakończeniu operacji wybierz serwer z listy, a następnie wybierz pozycję Dalej
  5. W oknie dialogowym Łączenie z usługą Azure SQL Database pozostaw wartości domyślne, ale upewnij się, że dla opcji Zapisz parametry połączenia na samym dole jest zaznaczona opcja Brak.
  6. Wybierz pozycję Zakończ , a program Visual Studio utworzy zasoby SQL.

Łączenie aplikacji kontenera z usługą Azure SQL

  1. Na stronie przeglądu utworzonej aplikacji kontenera wybierz Łącznik usługi (wersja zapoznawcza) w lewym menu nawigacyjnym.

  2. Wybierz + Utwórz, aby stworzyć nowe połączenie.

  3. W wysuwanym oknie Tworzenie połączenia , wprowadź następujące wartości:

    • Kontener: Wybierz utworzony kontener dotnetcoresqldb .

    • Typ usługi: Wybierz pozycję 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.

    • Baza danych SQL: Wybierz utworzoną wcześniej bazę danych.

    • Typ klienta: Wybierz pozycję .NET.

      Zrzut ekranu przedstawiający sposób korzystania z łącznika usługi.

  4. Wybierz pozycję Dalej: Uwierzytelnianie i wprowadź następujące wartości:

    • Wybierz łańcuch 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.
  5. Pozostaw pozostałe ustawienia domyślne i wybierz pozycję Dalej: Sieć.

  6. Pozostaw wartość domyślną i wybierz Dalej: Przejrzyj i utwórz.

  7. Po zweryfikowaniu przez platformę Azure ustawień 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.

  1. W witrynie Azure Portal wyszukaj bazę danych utworzoną na głównym pasku wyszukiwania i wybierz ją z wyników.

  2. Na stronie przeglądu bazy danych wybierz pozycję Parametry połączenia w obszarze nawigacji po lewej stronie.

  3. Na karcie ADO.NET skopiuj ciąg połączenia z pola formularza.

    Zrzut ekranu przedstawiający sposób pobierania parametrów połączenia.

  4. Przejdź do rozgałęzionego repozytorium GitHub aplikacji.

  5. Na karcie Ustawienia wybierz pozycję Tajne akcje > z lewego panelu nawigacyjnego, a następnie wybierz pozycję Nowy tajny klucz repozytorium.

  6. Na stronie Nowy wpis tajny wprowadź następujące wartości:

    • Nazwa: Wprowadź nazwę DbConnection.

    • Tajny: Wklej parametry połączenia skopiowane z platformy Azure. Pamiętaj, aby zastąpić symbol zastępczy hasła w parametrach połączenia hasłem wybranym podczas tworzenia bazy danych.

    • Wybierz pozycję Dodaj wpis tajny.

      Zrzut ekranu pokazujący, jak utworzyć tajny GitHub.

Ł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

  1. Otwórz plik przepływu pracy funkcji GitHub Actions wygenerowany przez program Visual Studio, wybierając przycisk .yml na stronie podsumowania publikowania.

    Zrzut ekranu przedstawiający sposób edytowania przepływu pracy.

  2. 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 polecenia database update, aby zastąpić ciąg połączenia localdb przechowywany w pliku appsettings.json wartością dodaną do sekretów GitHub.

Uruchamianie przepływu pracy funkcji GitHub Actions i testowanie wdrożenia

  1. 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
    
  2. Przejdź do repozytorium GitHub i wybierz kartę Akcje. Przepływ pracy powinien uruchomić się automatycznie, jeśli przesłanie danych zakończyło się pomyślnie.

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

    Zrzut ekranu przedstawiający przepływ pracy akcji usługi GitHub.

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.