Udostępnij za pośrednictwem


Wdrażanie aplikacji internetowej w języku Python (Flask) przy użyciu bazy danych PostgreSQL na platformie Azure

W tym samouczku wdrożysz opartą na danych aplikację internetową języka Python (Flask) w celu aplikacja systemu Azure Service za pomocą usługi relacyjnej bazy danych Azure Database for PostgreSQL. Obsługa usługi aplikacja systemu AzureJęzyk Python w środowisku serwera z systemem Linux. Jeśli chcesz, zobacz zamiast tego samouczek Django lub samouczek FastAPI.

Diagram architektury przedstawiający usługę App Service z bazą danych PostgreSQL na platformie Azure.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz domyślną architekturę usługi App Service, PostgreSQL i pamięci podręcznej Redis.
  • Zabezpieczanie wpisów tajnych połączenia przy użyciu tożsamości zarządzanej i odwołań usługi Key Vault.
  • Wdróż przykładową aplikację w języku Python w usłudze App Service z repozytorium GitHub.
  • Uzyskaj dostęp do parametry połączenia usługi App Service i ustawień aplikacji w kodzie aplikacji.
  • Wprowadź aktualizacje i ponownie wdróż kod aplikacji.
  • Wygeneruj schemat bazy danych, uruchamiając migracje baz danych.
  • Przesyłanie strumieniowe dzienników diagnostycznych z platformy Azure.
  • Zarządzanie aplikacją w witrynie Azure Portal.
  • Aprowizuj tę samą architekturę i wdróż przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.
  • Zoptymalizuj przepływ pracy programowania za pomocą usług GitHub Codespaces i GitHub Copilot.

Wymagania wstępne

  • 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.
  • Znajomość języka Python z programowaniem platformy Flask.
  • (Opcjonalnie) Aby wypróbować narzędzie GitHub Copilot, konto narzędzia GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.
  • Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
  • Zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure. Możesz wykonać kroki opisane w usłudze Azure Cloud Shell, ponieważ ma już zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure.
  • Znajomość języka Python z programowaniem platformy Flask.
  • (Opcjonalnie) Aby wypróbować narzędzie GitHub Copilot, konto narzędzia GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.

Przejdź do końca

Jeśli chcesz zobaczyć przykładową aplikację w tym samouczku uruchomionym na platformie Azure, uruchom następujące polecenia w usłudze Azure Cloud Shell i postępuj zgodnie z monitem:

mkdir msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
azd init --template msdocs-flask-postgresql-sample-app
azd up

1. Uruchamianie przykładu

Najpierw należy skonfigurować przykładową aplikację opartą na danych jako punkt wyjścia. Dla wygody przykładowe repozytorium zawiera konfigurację kontenera deweloperskiego . Kontener deweloperski ma wszystko, czego potrzebujesz, aby opracować aplikację, w tym bazę danych, pamięć podręczną i wszystkie zmienne środowiskowe wymagane przez przykładową aplikację. Kontener deweloperski może działać w usłudze GitHub codespace, co oznacza, że można uruchomić przykład na dowolnym komputerze z przeglądarką internetową.

Uwaga

Jeśli korzystasz z tego samouczka z własną aplikacją, zapoznaj się z opisem pliku requirements.txt w README.md , aby zobaczyć, jakich pakietów potrzebujesz.

Krok 1. W nowym oknie przeglądarki:

  1. Zaloguj się na istniejącym koncie GitHub.
  2. Przejdź do https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
  3. Usuń zaznaczenie pola Kopiuj tylko gałąź główną. Chcesz, aby wszystkie gałęzie.
  4. Wybierz pozycję Utwórz rozwidlenie.

Krok 2. W rozwidleniu usługi GitHub:

  1. Wybierz opcję main>starter-no-infra dla gałęzi początkowej. Ta gałąź zawiera tylko przykładowy projekt i brak plików ani konfiguracji związanych z platformą Azure.
  2. Wybierz pozycję Code>Create codespace on starter-no-infra (Utwórz przestrzeń kodu w infrastrukturze starter-no-infra). Skonfigurowanie przestrzeni kodu trwa kilka minut i jest uruchamiane pip install -r requirements.txt dla repozytorium na końcu.

Krok 3. W terminalu usługi Codespace:

  1. Uruchom migracje bazy danych za pomocą polecenia flask db upgrade.
  2. Uruchom aplikację za pomocą polecenia flask run.
  3. Po wyświetleniu powiadomienia Your application running on port 5000 is available.wybierz pozycję Otwórz w przeglądarce. Przykładowa aplikacja powinna być widoczna na nowej karcie przeglądarki. Aby zatrzymać aplikację, wpisz Ctrl+C.

Napiwek

Możesz zapytać narzędzie GitHub Copilot o to repozytorium. Na przykład:

  • @workspace Co robi ten projekt?
  • @workspace Co robi folder devcontainer?

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

2. Tworzenie usług App Service i PostgreSQL

W tym kroku utworzysz zasoby platformy Azure. Kroki użyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for PostgreSQL. W przypadku procesu tworzenia należy określić:

  • Nazwa aplikacji internetowej. Jest ona używana jako część nazwy DNS aplikacji w postaci https://<app-name>-<hash>.<region>.azurewebsites.net.
  • Region do fizycznego uruchamiania aplikacji na świecie. Jest ona również używana jako część nazwy DNS aplikacji.
  • Stos środowiska uruchomieniowego dla aplikacji. W tym miejscu wybierasz wersję języka Python, która ma być używana 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 witryny Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby usługi aplikacja systemu Azure.

Krok 1. W witrynie Azure Portal:

  1. Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
  2. Wybierz element z etykietą Web App + Database w obszarze nagłówka 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.

  1. Grupa zasobów: wybierz pozycję Utwórz nową i użyj nazwy msdocs-flask-postgres-tutorial.
  2. Region: dowolny region świadczenia usługi Azure blisko Ciebie.
  3. Nazwa: msdocs-python-postgres-XYZ.
  4. Stos środowiska uruchomieniowego: Python 3.12.
  5. Baza danych: PostgreSQL — serwer elastyczny jest domyślnie wybierany jako aparat bazy danych. Nazwa serwera i nazwa bazy danych są również domyślnie ustawione na odpowiednie wartości.
  6. Dodaj usługę Azure Cache for Redis?: Nie.
  7. Plan hostingu: Podstawowy. Gdy wszystko będzie gotowe, możesz skalować w górę do warstwy cenowej produkcyjnej.
  8. Wybierz pozycję Przejrzyj i utwórz.
  9. Po zakończeniu walidacji wybierz pozycję Utwórz.

Krok 3. Ukończenie wdrożenia trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Jesteś przekierowany bezpośrednio do aplikacji usługi App Service, ale tworzone są następujące zasoby:

  • Grupa zasobów: kontener dla wszystkich utworzonych zasobów.
  • Plan usługi App Service: definiuje zasoby obliczeniowe dla usługi App Service. Zostanie utworzony plan systemu Linux w warstwie Podstawowa.
  • App Service: reprezentuje aplikację i działa w planie usługi App Service.
  • Sieć wirtualna: zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
  • Interfejsy sieciowe: reprezentuje prywatne adresy IP, po jednym dla każdego z prywatnych punktów końcowych.
  • Serwer elastyczny usługi Azure Database for PostgreSQL: dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
  • Prywatna strefa DNS strefy: umożliwia rozpoznawanie nazw DNS magazynu kluczy i serwera bazy danych w sieci wirtualnej.

3. Zabezpieczanie wpisów tajnych połączenia

Kreator tworzenia wygenerował zmienne łączności już jako ustawienia aplikacji. Jednak najlepszym rozwiązaniem w zakresie zabezpieczeń jest całkowite przechowywanie wpisów tajnych z usługi App Service. Przeniesiesz wpisy tajne do magazynu kluczy i zmienisz ustawienie aplikacji na odwołania do usługi Key Vault za pomocą łączników usługi.

Krok 1. Pobieranie istniejącej parametry połączenia

  1. W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
  2. Wybierz pozycję AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. W ustawieniu Dodaj/Edytuj aplikację w polu Wartość znajdź hasło = część na końcu ciągu.
  4. Skopiuj ciąg hasła po polu Password= do późniejszego użycia. To ustawienie aplikacji umożliwia nawiązanie połączenia z bazą danych Postgres zabezpieczoną za prywatnym punktem końcowym. Wpis tajny jest jednak zapisywany bezpośrednio w aplikacji usługi App Service, co nie jest najlepsze. Zmienisz to.

Krok 2. Tworzenie magazynu kluczy na potrzeby bezpiecznego zarządzania wpisami tajnymi

  1. Na górnym pasku wyszukiwania wpisz "key vault", a następnie wybierz pozycję Marketplace>Key Vault.
  2. W obszarze Grupa zasobów wybierz pozycję msdocs-python-postgres-tutorial.
  3. W polu Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
  4. W obszarze Region ustaw tę samą lokalizację co grupa zasobów.

Krok 3. Zabezpieczanie magazynu kluczy przy użyciu prywatnego punktu końcowego

  1. Wybierz kartę Sieć.
  2. Usuń zaznaczenie pozycji Włącz dostęp publiczny.
  3. Wybierz pozycję Utwórz prywatny punkt końcowy.
  4. W obszarze Grupa zasobów wybierz pozycję msdocs-python-postgres-tutorial.
  5. W oknie dialogowym w polu Lokalizacja wybierz tę samą lokalizację co aplikacja usługi App Service.
  6. W polu Nazwa wpisz msdocs-python-postgres-XYZVaultEndpoint.
  7. W obszarze Sieć wirtualna wybierz pozycję msdocs-python-postgres-XYZVnet.
  8. W podsieci msdocs-python-postgres-XYZSubnet.
  9. Wybierz przycisk OK.
  10. Wybierz pozycję Przeglądanie i tworzenie, a następnie wybierz pozycję Utwórz. Poczekaj na zakończenie wdrożenia magazynu kluczy. Powinien zostać wyświetlony komunikat "Wdrożenie zostało ukończone".

Krok 4. Konfigurowanie łącznika PostgreSQL

  1. Na górnym pasku wyszukiwania wpisz msdocs-python-postgres, a następnie wybierz zasób usługi App Service o nazwie msdocs-python-postgres-XYZ.
  2. Na stronie App Service w menu po lewej stronie wybierz pozycję Ustawienia > Łącznik usługi. Istnieje już łącznik, który został utworzony przez kreatora tworzenia aplikacji.
  3. Zaznacz pole wyboru obok łącznika PostgreSQL, a następnie wybierz pozycję Edytuj.
  4. W polu Typ klienta wybierz pozycję Django. Mimo że masz aplikację Platformy Flask, typ klienta Django w łączniku usługi PostgreSQL udostępnia zmienne bazy danych w oddzielnych ustawieniach zamiast jednego parametry połączenia. Oddzielne zmienne są łatwiejsze do użycia w kodzie aplikacji, który używa biblioteki SQLAlchemy do nawiązywania połączenia z bazą danych.
  5. Wybierz kartę Uwierzytelnianie.
  6. W polu Hasło wklej skopiowane wcześniej hasło.
  7. Wybierz pozycję Zapisz wpis tajny w usłudze Key Vault.
  8. W obszarze Połączenie z usługą Key Vault wybierz pozycję Utwórz nową. Okno dialogowe Tworzenie połączenia jest otwierane w górnej części okna dialogowego edycji.

Krok 5. Ustanawianie połączenia usługi Key Vault

  1. W oknie dialogowym Tworzenie połączenia dla połączenia usługi Key Vault w usłudze Key Vault wybierz utworzony wcześniej magazyn kluczy.
  2. Wybierz pozycję Przejrzyj i utwórz.
  3. Po zakończeniu walidacji wybierz pozycję Utwórz.

Krok 6. Finalizowanie ustawień łącznika PostgreSQL

  1. Wrócisz do okna dialogowego edycji domyślnegoŁącznika. Na karcie Uwierzytelnianie poczekaj na utworzenie łącznika magazynu kluczy. Po zakończeniu zostanie automatycznie wybrana lista rozwijana Połączenie usługi Key Vault.
  2. Wybierz pozycję Dalej: Sieć.
  3. Wybierz pozycję Zapisz. Zaczekaj na wyświetlenie powiadomienia Aktualizacja powiodła się .

Krok 7. Weryfikowanie integracji z usługą Key Vault

  1. W menu po lewej stronie ponownie wybierz pozycję Ustawienia > Zmienne środowiskowe .
  2. Obok pozycji AZURE_POSTGRESQL_PASSWORD wybierz pozycję Pokaż wartość. Wartość powinna mieć @Microsoft.KeyVault(...)wartość , co oznacza, że jest to odwołanie do magazynu kluczy, ponieważ wpis tajny jest teraz zarządzany w magazynie kluczy.

Podsumowując, proces zabezpieczania wpisów tajnych połączenia:

  • Pobieranie wpisów tajnych połączenia ze zmiennych środowiskowych aplikacji usługi App Service.
  • Tworzenie magazynu kluczy.
  • Tworzenie połączenia usługi Key Vault z tożsamością zarządzaną przypisaną przez system.
  • Aktualizowanie łączników usługi w celu przechowywania wpisów tajnych w magazynie kluczy.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.


4. Wdrażanie przykładowego kodu

W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu funkcji GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w usłudze App Service, ale także doskonały sposób ciągłej integracji w procesie wdrażania. Domyślnie każde git push repozytorium GitHub rozpoczyna akcję kompilacji i wdrażania.

Krok 1. W menu po lewej stronie wybierz pozycję Centrum wdrażania>.

Krok 2. Na stronie Centrum wdrażania:

  1. W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
  2. Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
  3. W obszarze Organizacja wybierz swoje konto.
  4. W obszarze Repozytorium wybierz pozycję msdocs-flask-postgresql-sample-app.
  5. W obszarze Gałąź wybierz pozycję starter-no-infra. Jest to ta sama gałąź, w której pracowaliśmy z przykładową aplikacją bez żadnych plików ani konfiguracji związanych z platformą Azure.
  6. W polu Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
  7. W górnym menu wybierz pozycję Zapisz. Usługa App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w .github/workflows katalogu. Domyślnie centrum wdrażania tworzy tożsamość przypisaną przez użytkownika dla przepływu pracy do uwierzytelniania przy użyciu uwierzytelniania Microsoft Entra (OIDC). Aby uzyskać informacje o opcjach uwierzytelniania alternatywnego, zobacz Wdrażanie w usłudze App Service przy użyciu funkcji GitHub Actions.

Krok 3. Po powrocie do przestrzeni kodu usługi GitHub przykładowego rozwidlenia uruchom polecenie git pull origin starter-no-infra. Spowoduje to ściągnięcie nowo zatwierdzonego pliku przepływu pracy do przestrzeni kodu.

Krok 4 (opcja 1: w usłudze GitHub Copilot):

  1. Rozpocznij nową sesję czatu, wybierając widok Czat , a następnie wybierając +pozycję .
  2. Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?". Copilot może wyjaśnić SQLAlchemy , jak jest skonfigurowany identyfikator URI połączenia w witrynie azureproject/development.py i azureproject/production.py.
  3. Zapytaj: "@workspace W trybie produkcyjnym moja aplikacja jest uruchomiona w aplikacji internetowej usługi App Service, która używa łącznika usługi Azure Do łączenia się z serwerem elastycznym PostgreSQL przy użyciu typu klienta Django. Jakie są nazwy zmiennych środowiskowych, których muszę użyć?" Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków narzędzia GitHub Copilot , a nawet poinformować o zmianie w pliku azureproject/production.py .
  4. Otwórz plik azureproject/production.py w eksploratorze i dodaj sugestię kodu. Narzędzie GitHub Copilot nie daje tej samej odpowiedzi za każdym razem i nie zawsze jest poprawne. Może być konieczne zadawanie większej liczby pytań, aby dostosować jego odpowiedź. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.

Krok 4 (opcja 2: bez narzędzia GitHub Copilot):

  1. Otwórz Program.cs w eksploratorze.
  2. Znajdź skomentowany kod (wiersze 3–8) i usuń komentarz. Spowoduje to utworzenie parametry połączenia dla biblioteki SQLAlchemy przy użyciu poleceń AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOSTi AZURE_POSTGRESQL_NAME.

Krok 5:

  1. Wybierz rozszerzenie Kontroli źródła.
  2. W polu tekstowym wpisz komunikat zatwierdzenia, taki jak Configure Azure database connecton. Możesz też wybrać i zezwolić usłudze GitHub Copilot na wygenerowanie komunikatu zatwierdzenia.
  3. Wybierz pozycję Zatwierdź, a następnie potwierdź wartość Tak.
  4. Wybierz pozycję Synchronizuj zmiany 1, a następnie potwierdź przy użyciu przycisku OK.

Krok 6. Powrót do strony Centrum wdrażania w witrynie Azure Portal:

  1. Wybierz kartę Dzienniki , a następnie wybierz pozycję Odśwież , aby wyświetlić nowe uruchomienie wdrożenia.
  2. W elemencie dziennika dla przebiegu wdrożenia wybierz wpis Build/Deploy Logs (Wdróż dzienniki kompilacji/wdrażania) z najnowszym znacznikiem czasu.

Krok 7. Wykonano cię 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 Powodzenie. Trwa to około 5 minut.

Masz problemy? Zapoznaj się z przewodnikiem rozwiązywania problemów.

5. Generowanie schematu bazy danych

W przypadku bazy danych PostgreSQL chronionej przez sieć wirtualną najprostszym sposobem uruchamiania migracji baz danych platformy Flask jest sesja SSH z kontenerem systemu Linux w usłudze App Service.

Krok 1. Powrót na stronę usługi App Service w menu po lewej stronie

  1. Wybierz pozycję Narzędzia>programistyczne SSH.
  2. Wybierz pozycję Idź.

Krok 2. W sesji SSH uruchom polecenie flask db upgrade. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych.

Napiwek

W sesji SSH zmiany tylko w plikach w /home programie mogą być utrwalane poza ponownym uruchomieniem aplikacji. Zmiany poza programem /home nie są utrwalane.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

6. Przejdź do aplikacji

Krok 1. Na stronie usługi App Service:

  1. W menu po lewej stronie wybierz pozycję Przegląd.
  2. Wybierz adres URL aplikacji.

Krok 2. Dodaj kilka restauracji do listy. Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.

7. Przesyłanie strumieniowe dzienników diagnostycznych

usługa aplikacja systemu Azure przechwytuje wszystkie dzienniki konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja zawiera print() instrukcje, aby zademonstrować tę funkcję, jak pokazano poniżej.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

Krok 1. Na stronie usługi App Service:

  1. W menu po lewej stronie wybierz pozycję Monitorowanie>dzienników usługi App Service.
  2. W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.
  3. W górnym menu wybierz pozycję Zapisz.

Krok 2. W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.

Dowiedz się więcej na temat rejestrowania w aplikacjach języka Python w serii dotyczącej konfigurowania usługi Azure Monitor dla aplikacji języka Python.

8. 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 witryny Azure Portal:

  1. Wpisz nazwę grupy zasobów.
  2. Wybierz odpowiednią grupę zasobów.

Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.

Krok 3:

  1. Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
  2. Wybierz Usuń.

Zrzut ekranu przedstawiający okno dialogowe potwierdzenia dotyczące usuwania grupy zasobów w witrynie Azure Portal. :

2. Tworzenie zasobów platformy Azure i wdrażanie przykładowej aplikacji

W tym kroku utworzysz zasoby platformy Azure i wdrożysz przykładową aplikację w celu App Service dla systemu Linux. Kroki użyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for PostgreSQL.

Kontener deweloperski ma już interfejs wiersza polecenia dla deweloperów platformy Azure (AZD).

  1. W katalogu głównym repozytorium uruchom polecenie azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. Po wyświetleniu monitu podaj następujące odpowiedzi:

    Pytanie Odpowiedź
    Bieżący katalog nie jest pusty. Czy chcesz zainicjować projekt tutaj w katalogu "<your-directory>"? Y
    Co chcesz zrobić z tymi plikami? Zachowaj istniejące pliki bez zmian
    Wprowadź nową nazwę środowiska Wpisz unikatową nazwę. Szablon AZD używa tej nazwy jako części nazwy DNS aplikacji internetowej na platformie Azure (<app-name>-<hash>.azurewebsites.net). Znaki alfanumeryczne i łączniki są dozwolone.
  3. Zaloguj się do platformy azd auth login Azure, uruchamiając polecenie i postępując zgodnie z wierszem polecenia:

    azd auth login
    
  4. Utwórz niezbędne zasoby platformy Azure za azd provision pomocą polecenia . Postępuj zgodnie z monitem, aby wybrać żądaną subskrypcję i lokalizację zasobów platformy Azure.

    azd provision
    

    Wykonanie azd provision polecenia trwa około 15 minut (pamięć podręczna Redis cache zajmuje najwięcej czasu). Później zmodyfikujesz kod, aby pracować z usługą App Service i wdrożyć zmiany za pomocą polecenia azd deploy. Gdy jest uruchomiona, polecenie udostępnia komunikaty dotyczące procesu aprowizacji i wdrażania, w tym link do wdrożenia na platformie Azure.

    Ten szablon AZD zawiera pliki (azure.yaml i katalog infra ), które generują domyślną architekturę secure-by-default z następującymi zasobami platformy Azure:

    • Grupa zasobów: kontener dla wszystkich utworzonych zasobów.
    • Plan usługi App Service: definiuje zasoby obliczeniowe dla usługi App Service. Zostanie utworzony plan systemu Linux w warstwie Podstawowa.
    • App Service: reprezentuje aplikację i działa w planie usługi App Service.
    • Sieć wirtualna: zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
    • Prywatne punkty końcowe: dostęp do punktów końcowych magazynu kluczy 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.
    • Serwer elastyczny usługi Azure Database for PostgreSQL: dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
    • strefa Prywatna strefa DNS: włącza rozpoznawanie nazw DNS serwera PostgreSQL w sieci wirtualnej.
    • Obszar roboczy usługi Log Analytics: działa jako kontener docelowy aplikacji w celu wysłania dzienników, gdzie można również wykonywać zapytania dotyczące dzienników.
    • Azure Cache for Redis: dostępna tylko zza prywatnego punktu końcowego.
    • Magazyn kluczy: dostępny tylko zza prywatnego punktu końcowego. Służy do zarządzania wpisami tajnymi dla aplikacji usługi App Service.

    Po zakończeniu tworzenia zasobów i wdrażaniu kodu aplikacji po raz pierwszy wdrożona przykładowa aplikacja nie działa jeszcze, ponieważ musisz wprowadzić niewielkie zmiany, aby połączyć się z bazą danych na platformie Azure.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

3. Użyj parametry połączenia bazy danych

Szablon AZD wygenerował zmienne łączności dla Ciebie już jako ustawienia aplikacji i wyprowadza je do terminalu dla wygody. Ustawienia aplikacji to jeden ze sposobów przechowywania wpisów tajnych połączenia z repozytorium kodu.

  1. W danych wyjściowych usługi AZD znajdź ustawienia AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOSTi AZURE_POSTGRESQL_NAME. Aby zachować bezpieczeństwo wpisów tajnych, wyświetlane są tylko nazwy ustawień. Wyglądają one następująco w danych wyjściowych usługi AZD:

     App Service app has the following connection settings:
             - AZURE_POSTGRESQL_NAME
             - AZURE_POSTGRESQL_HOST
             - AZURE_POSTGRESQL_USER
             - AZURE_POSTGRESQL_PASSWORD
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     
  2. Dla wygody szablon AZD wyświetla bezpośredni link do strony ustawień aplikacji. Znajdź link i otwórz go na nowej karcie przeglądarki.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

4. Modyfikowanie przykładowego kodu i ponowne wdrażanie

  1. W obszarze codespace usługi GitHub rozpocznij nową sesję czatu, wybierając widok Czat , a następnie wybierając +pozycję .

  2. Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?". Copilot może wyjaśnić SQLAlchemy , jak jest skonfigurowany identyfikator URI połączenia w witrynie azureproject/development.py i azureproject/production.py.

  3. Zapytaj: "@workspace W trybie produkcyjnym moja aplikacja jest uruchomiona w aplikacji internetowej usługi App Service, która używa łącznika usługi Azure Do łączenia się z serwerem elastycznym PostgreSQL przy użyciu typu klienta Django. Jakie są nazwy zmiennych środowiskowych, których muszę użyć?" Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków narzędzia GitHub Copilot , a nawet poinformować o zmianie w pliku azureproject/production.py .

  4. Otwórz plik azureproject/production.py w eksploratorze i dodaj sugestię kodu.

    Narzędzie GitHub Copilot nie daje tej samej odpowiedzi za każdym razem i nie zawsze jest poprawne. Może być konieczne zadawanie większej liczby pytań, aby dostosować jego odpowiedź. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.

  5. W terminalu uruchom polecenie azd deploy.

    azd deploy
    

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

5. Generowanie schematu bazy danych

W przypadku bazy danych PostgreSQL chronionej przez sieć wirtualną najprostszym sposobem uruchamiania migracji baz danych platformy Flask jest sesja SSH z kontenerem systemu Linux w usłudze App Service.

  1. W danych wyjściowych usługi AZD znajdź adres URL sesji SSH i przejdź do niego w przeglądarce. Wygląda na to w danych wyjściowych:

     Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
     
  2. W sesji SSH uruchom polecenie flask db upgrade. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych.

    Zrzut ekranu przedstawiający polecenia do uruchomienia w powłoce SSH i ich danych wyjściowych.

    Uwaga

    Tylko zmiany w plikach w /home programie mogą być utrwalane poza ponownymi uruchomieniami aplikacji. Zmiany poza programem /home nie są utrwalane.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

6. Przejdź do aplikacji

  1. W danych wyjściowych usługi AZD znajdź adres URL aplikacji i przejdź do niej w przeglądarce. Adres URL wygląda następująco w danych wyjściowych usługi AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. Dodaj kilka restauracji do listy.

    Zrzut ekranu aplikacji internetowej Platformy Flask z bazą danych PostgreSQL działającą na platformie Azure przedstawiający restauracje i recenzje restauracji.

    Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

7. Przesyłanie strumieniowe dzienników diagnostycznych

usługa aplikacja systemu Azure może przechwytywać dzienniki konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Dla wygody szablon AZD umożliwia już rejestrowanie w lokalnym systemie plików i wysyła dzienniki do obszaru roboczego usługi Log Analytics.

Przykładowa aplikacja zawiera print() instrukcje demonstrowania tej możliwości, jak pokazano w poniższym fragmencie kodu.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

W danych wyjściowych usługi AZD znajdź link do strumieniowego przesyłania dzienników usługi App Service i przejdź do niego w przeglądarce. Link wygląda następująco w danych wyjściowych usługi AZD:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

Dowiedz się więcej na temat rejestrowania w aplikacjach języka Python w serii dotyczącej konfigurowania usługi Azure Monitor dla aplikacji języka Python.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

8. Czyszczenie zasobów

Aby usunąć wszystkie zasoby platformy Azure w bieżącym środowisku wdrażania, uruchom polecenie azd down i postępuj zgodnie z monitami.

azd down

Rozwiązywanie problemów

Poniżej wymieniono problemy, które mogą wystąpić podczas próby wykonania czynności opisanych w tym samouczku i krokach, które należy rozwiązać.

Nie mogę nawiązać połączenia z sesją SSH

Jeśli nie możesz nawiązać połączenia z sesją SSH, uruchomienie samej aplikacji nie powiodło się. Sprawdź dzienniki diagnostyczne, aby uzyskać szczegółowe informacje. Jeśli na przykład zostanie wyświetlony błąd KeyError: 'AZURE_POSTGRESQL_HOST'podobny do , może to oznaczać, że brakuje zmiennej środowiskowej (być może usunięto ustawienie aplikacji).

Otrzymuję błąd podczas uruchamiania migracji bazy danych

Jeśli wystąpią jakiekolwiek błędy związane z nawiązywaniem połączenia z bazą danych, sprawdź, czy ustawienia aplikacji (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOSTi AZURE_POSTGRESQL_NAME) zostały zmienione lub usunięte. Bez tego parametry połączenia polecenie migracji nie może komunikować się z bazą danych.

Często zadawane pytania

Ile kosztuje ta konfiguracja?

Cennik utworzonych zasobów jest następujący:

  • Plan usługi App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
  • Serwer elastyczny PostgreSQL jest tworzony w najniższej warstwie z możliwością zwiększania szybkości Standard_B1ms z minimalnym rozmiarem magazynu, który można skalować w górę lub w dół. Zobacz Cennik usługi Azure Database for PostgreSQL.
  • Sieć wirtualna nie powoduje naliczania opłat, 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 PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?

  • Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, można uruchomić psql z poziomu sesji SSH aplikacji.
  • Aby nawiązać połączenie z poziomu narzędzia klasycznego, 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.
  • Usługę Azure Cloud Shell można również zintegrować z siecią wirtualną.

W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?

Na przykład przy użyciu automatycznie wygenerowanego pliku przepływu pracy z usługi App Service każdy git push rozpoczyna nowy przebieg kompilacji i wdrożenia. Z lokalnego klonu repozytorium GitHub należy wprowadzić żądane aktualizacje i wypchnąć je 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 funkcji 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 zakończyło się niepowodzeniem, aby wygenerować więcej pełnych danych wyjściowych. Na przykład możesz uzyskać więcej danych wyjściowych python z polecenia, dodając -d opcję . Zatwierdź i wypchnij zmiany, aby wyzwolić kolejne wdrożenie w usłudze App Service.

Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika

Zobacz Konfigurowanie wdrożenia funkcji GitHub Actions z Centrum wdrażania.

Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?

Być może zauważysz, że widok czatu Copilot w usłudze GitHub był już dostępny podczas tworzenia przestrzeni kodu. Dla Twojej wygody dołączamy rozszerzenie czatu Copilot w usłudze GitHub w definicji kontenera (zobacz .devcontainer/devcontainer.json). Potrzebujesz jednak konta GitHub Copilot (dostępna jest 30-dniowa bezpłatna wersja próbna).

Kilka wskazówek dotyczących rozmowy z usługą GitHub Copilot:

  • W jednej sesji czatu pytania i odpowiedzi opierają się na sobie i możesz dostosować swoje pytania, aby dostosować uzyskaną odpowiedź.
  • Domyślnie narzędzie GitHub Copilot nie ma dostępu do żadnego pliku w repozytorium. Aby zadać pytania dotyczące pliku, najpierw otwórz plik w edytorze.
  • Aby umożliwić usłudze GitHub Copilot dostęp do wszystkich plików w repozytorium podczas przygotowywania odpowiedzi, zacznij od pytania @workspace. Aby uzyskać więcej informacji, zobacz Use the @workspace agent.
  • W sesji czatu narzędzie GitHub Copilot może sugerować zmiany i (z @workspace) nawet tam, gdzie wprowadzić zmiany, ale nie może wprowadzać zmian. Wystarczy dodać sugerowane zmiany i przetestować je.

Następne kroki

Przejdź do następnego samouczka, aby dowiedzieć się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.

Dowiedz się, jak usługa App Service uruchamia aplikację w języku Python: