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) do Azure App Service z użyciem usługi relacyjnej bazy danych Azure Database for PostgreSQL. Usługa Azure App Service obsługuje ję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 architekturę o domyślnie wysokim poziomie zabezpieczeń dla App Service, PostgreSQL i pamięci podręcznej Redis.
  • Zabezpieczanie tajemnic połączeń przy użyciu tożsamości zarządzanej i odwołań Key Vault.
  • Wdróż przykładową aplikację w języku Python w usłudze App Service z repozytorium GitHub.
  • Uzyskaj dostęp do ciągów połączeń usługi App Service oraz ustawień aplikacji w kodzie aplikacji.
  • Wprowadź aktualizacje i ponownie wdróż kod aplikacji.
  • Wygeneruj schemat bazy danych, uruchamiając migracje baz danych.
  • Przesyłaj dzienniki diagnostyczne z 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ć GitHub Copilot, potrzebne jest konto 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 oraz rozwój aplikacji z użyciem Flask.
  • (Opcjonalnie) Aby wypróbować GitHub Copilot, potrzebne jest konto 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 wszystkie gałęzie.
  4. Wybierz Utwórz fork.

Krok 2: W forku na GitHub:

  1. Wybierz 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 Code>Utwórz przestrzeń kodu na starter-no-infra. Skonfigurowanie przestrzeni kodu trwa kilka minut i uruchamia się 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 określonym obszarze. Jest ona również używana jako część nazwy DNS aplikacji.
  • Runtime stack 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 portalu Azure i wykonaj następujące kroki, aby utworzyć zasoby usługi Azure App Service.

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 oznaczony jako Web App + Database w sekcji 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 - elastyczny serwer 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.
  • Prywatne strefy DNS: Umożliwia rozpoznawanie nazw DNS kluczy w usłudze Key Vault i serwera bazy danych w sieci wirtualnej.

3. Zabezpieczenie tajnych danych połączenia

Kreator tworzenia już wygenerował zmienne łączności jako ustawienia aplikacji. Jednak najlepszą praktyką w zakresie bezpieczeństwa jest całkowite unikanie przechowywania tajemnic w usłudze 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 Dodaj/Edytuj ustawienia aplikacji, w polu Wartość, znajdź część hasło= znajdującą się na końcu ciągu.
  4. Skopiuj ciąg hasła po polu Password= do późniejszego użycia. To ustawienie aplikacji pozwala na nawiązanie połączenia z bazą danych Postgres zabezpieczoną 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: Utwórz magazyn kluczy w celu bezpiecznego zarządzania tajemnicami

  1. Na górnym pasku wyszukiwania wpisz "key vault", a następnie wybierz pozycję Marketplace>Key Vault.
  2. W Grupie zasobów wybierz msdocs-python-postgres-tutorial.
  3. W polu Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
  4. W Regionie ustaw taką samą lokalizację jak 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 Grupie zasobów wybierz 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 sieci wirtualnej wybierz msdocs-python-postgres-XYZVnet.
  8. W podsiecimsdocs-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 usługi > Łącznik. Kreator tworzenia aplikacji już utworzył dla Ciebie łącznik.
  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ę Flask, typ klienta Django w łączniku usługi PostgreSQL udostępnia zmienne bazy danych w oddzielnych ustawieniach zamiast jednego parametru 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 Zapisz tajemnicę w 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. Wracasz do okna dialogowego edycji domyślnego łącznika. Na karcie Uwierzytelnianie poczekaj na utworzenie łącznika magazynu kluczy. Po zakończeniu w rozwijanej liście Połączenie usługi Key Vault zostanie automatycznie wybrane.
  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 być @Microsoft.KeyVault(...), co oznacza, że jest to odwołanie do magazynu kluczy, ponieważ sekret jest teraz zarządzany w magazynie kluczy.

Podsumowując, proces zabezpieczania tajemnic połączenia obejmował:

  • Pobieranie tajnych danych połączenia ze zmiennych środowiskowych aplikacji 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 tajemnic 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 na zapewnienie ciągłej integracji w procesie wdrażania. Domyślnie każde git push do twojego repozytorium GitHub uruchamia akcję kompilacji i wdrażania.

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

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 Branch wybierz 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 katalogu .github/workflows. Domyślnie centrum wdrażania tworzy tożsamość przypisaną przez użytkownika dla przepływu pracy w celu uwierzytelniania za pomocą Microsoft Entra (uwierzytelnianie 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 codespace GitHub przykładowego forka, uruchom git pull origin starter-no-infra. Spowoduje to pobranie nowo zatwierdzonego pliku przepływu pracy do twojej przestrzeni kodowej.

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

  1. Rozpocznij nową sesję czatu, wybierając widok Czat, a następnie klikając +.
  2. Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?" Copilot może ci wyjaśnić, jak skonfigurowany jest identyfikator URI połączenia w plikach 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 Azure Service Connector do łączenia się z elastycznym serwerem PostgreSQL przy użyciu typu klienta Django. Jakie są nazwy zmiennych środowiskowych, których muszę użyć?" Copilot może zasugerować kod podobny do tego w Opcji 2: bez użycia GitHub Copilot i 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 łańcucha połączenia dla biblioteki SQLAlchemy, korzystając z AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOST i AZURE_POSTGRESQL_NAME.

Krok 5:

  1. Wybierz rozszerzenie Kontrola wersji.
  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 pozycji dziennika dla przebiegu wdrożenia wybierz wpis Dzienniki kompilacji i wdrażania z najnowszym znacznikiem czasu.

Krok 7: Zostaniesz przeniesiony do swojego repozytorium GitHub i zobaczysz, że akcja 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 Narzędzia deweloperskie>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 tylko zmiany w plikach w /home mogą przetrwać ponowne uruchomienia aplikacji. Zmiany poza /home nie są zachowywane.

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 aplikacyjna 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 Monitorowanie>dzienniki usługi App Service.
  2. Pod Rejestrowanie aplikacji, wybierz 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ń.

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 Azure, uruchamiając polecenie azd auth login i postępując zgodnie z instrukcjami na ekranie.

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

    azd provision
    

    Wykonanie polecenia azd provision trwa około 15 minut (najwięcej czasu zajmuje pamięć podręczna Redis). 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. Tworzy się plan systemu Linux w poziomie Podstawowym.
    • 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.
    • Prywatna strefa DNS: umożliwia 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 z prywatnego punktu końcowego.
    • Key Vault: dostępny tylko zza prywatnego punktu końcowego. Służy do zarządzania sekretami dla aplikacji 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 ciągu połączenia z bazą danych

Szablon AZD, którego używasz, wygenerował dla Ciebie zmienne łączności już jako ustawienia aplikacji i dla Twojej wygody wyprowadza je do terminalu. Ustawienia aplikacji to jeden ze sposobów na utrzymanie danych uwierzytelniających z dala od 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 codespace GitHub rozpocznij nową sesję czatu, wybierając widok Czat, a następnie wybierając +.

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

  3. Zapytaj: "@workspace W trybie produkcyjnym moja aplikacja działa jako aplikacja internetowa w usłudze App Service, która używa łącznika usługi Azure do łączenia się z elastycznym serwerem PostgreSQL za pomocą 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 użycia narzędzia GitHub Copilot w poniższych krokach i nawet zasugerować wprowadzenie zmian 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 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 oraz ich wyniki.

    Uwaga

    Tylko zmiany w plikach w /home mogą być zapisywane po ponownym uruchomieniu aplikacji. Zmiany poza obszarem /home nie są zapisywane.

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.

Przesyłanie dzienników diagnostycznych strumieniowo

Usługa Azure App Service może przechwytywać dzienniki konsoli, aby ułatwić diagnostykę usterek w aplikacji. 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 demonstrujące tę funkcjonalność, jak pokazano w poniższym fragmencie.

@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 burstable Standard_B1ms, z minimalnym rozmiarem pamięci, 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 peerowanie. 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 debugować błędy podczas wdrażania w 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ć bardziej szczegółowe dane wyjściowe. Na przykład możesz uzyskać więcej danych wyjściowych z polecenia python, dodając opcję -d. Zatwierdź i wypchnij zmiany, aby uruchomić kolejne wdrożenie dla usługi App Service.

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

Zobacz Skonfiguruj wdrożenie GitHub Actions z Centrum wdrożeń.

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

Być może zauważyłeś, że widok czatu GitHub Copilot był już dostępny, gdy tworzyłeś swoją przestrzeń 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 nawzajem, a ty możesz precyzyjnie dostosować swoje pytania, aby poprawić 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 wskazać, gdzie należy je wprowadzić, ale nie ma uprawnień do wprowadzania zmian za Ciebie. 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: