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.
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:
- Zaloguj się na istniejącym koncie GitHub.
- Przejdź do https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
- Usuń zaznaczenie pola Kopiuj tylko gałąź główną. Chcesz, aby wszystkie gałęzie.
- Wybierz pozycję Utwórz rozwidlenie.
Krok 2. W rozwidleniu usługi GitHub:
- 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.
- 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:
- Uruchom migracje bazy danych za pomocą polecenia
flask db upgrade
. - Uruchom aplikację za pomocą polecenia
flask run
. - 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ę, wpiszCtrl
+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:
- Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
- 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.
- Grupa zasobów: wybierz pozycję Utwórz nową i użyj nazwy msdocs-flask-postgres-tutorial.
- Region: dowolny region świadczenia usługi Azure blisko Ciebie.
- Nazwa: msdocs-python-postgres-XYZ.
- Stos środowiska uruchomieniowego: Python 3.12.
- 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.
- Dodaj usługę Azure Cache for Redis?: Nie.
- Plan hostingu: Podstawowy. Gdy wszystko będzie gotowe, możesz skalować w górę do warstwy cenowej produkcyjnej.
- Wybierz pozycję Przejrzyj i utwórz.
- 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
- W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
- Wybierz pozycję AZURE_POSTGRESQL_CONNECTIONSTRING.
- W ustawieniu Dodaj/Edytuj aplikację w polu Wartość znajdź hasło = część na końcu ciągu.
- 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
- Na górnym pasku wyszukiwania wpisz "key vault", a następnie wybierz pozycję Marketplace>Key Vault.
- W obszarze Grupa zasobów wybierz pozycję msdocs-python-postgres-tutorial.
- W polu Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
- W obszarze Region ustaw tę samą lokalizację co grupa zasobów.
Krok 3. Zabezpieczanie magazynu kluczy przy użyciu prywatnego punktu końcowego
- Wybierz kartę Sieć.
- Usuń zaznaczenie pozycji Włącz dostęp publiczny.
- Wybierz pozycję Utwórz prywatny punkt końcowy.
- W obszarze Grupa zasobów wybierz pozycję msdocs-python-postgres-tutorial.
- W oknie dialogowym w polu Lokalizacja wybierz tę samą lokalizację co aplikacja usługi App Service.
- W polu Nazwa wpisz msdocs-python-postgres-XYZVaultEndpoint.
- W obszarze Sieć wirtualna wybierz pozycję msdocs-python-postgres-XYZVnet.
- W podsieci msdocs-python-postgres-XYZSubnet.
- Wybierz przycisk OK.
- 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
- 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.
- 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.
- Zaznacz pole wyboru obok łącznika PostgreSQL, a następnie wybierz pozycję Edytuj.
- 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.
- Wybierz kartę Uwierzytelnianie.
- W polu Hasło wklej skopiowane wcześniej hasło.
- Wybierz pozycję Zapisz wpis tajny w usłudze Key Vault.
- 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
- W oknie dialogowym Tworzenie połączenia dla połączenia usługi Key Vault w usłudze Key Vault wybierz utworzony wcześniej magazyn kluczy.
- Wybierz pozycję Przejrzyj i utwórz.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
Krok 6. Finalizowanie ustawień łącznika PostgreSQL
- 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.
- Wybierz pozycję Dalej: Sieć.
- Wybierz pozycję Zapisz. Zaczekaj na wyświetlenie powiadomienia Aktualizacja powiodła się .
Krok 7. Weryfikowanie integracji z usługą Key Vault
- W menu po lewej stronie ponownie wybierz pozycję Ustawienia > Zmienne środowiskowe .
-
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:
- W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
- Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
- W obszarze Organizacja wybierz swoje konto.
- W obszarze Repozytorium wybierz pozycję msdocs-flask-postgresql-sample-app.
- 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.
- W polu Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
- 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):
- Rozpocznij nową sesję czatu, wybierając widok Czat , a następnie wybierając +pozycję .
- 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. - 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 .
- 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):
- Otwórz Program.cs w eksploratorze.
- 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_HOST
iAZURE_POSTGRESQL_NAME
.
Krok 5:
- Wybierz rozszerzenie Kontroli źródła.
- 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.
- Wybierz pozycję Zatwierdź, a następnie potwierdź wartość Tak.
- 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:
- Wybierz kartę Dzienniki , a następnie wybierz pozycję Odśwież , aby wyświetlić nowe uruchomienie wdrożenia.
- 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
- Wybierz pozycję Narzędzia>programistyczne SSH.
- 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:
- W menu po lewej stronie wybierz pozycję Przegląd.
- 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:
- W menu po lewej stronie wybierz pozycję Monitorowanie>dzienników usługi App Service.
- W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.
- 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:
- Wpisz nazwę grupy zasobów.
- Wybierz odpowiednią grupę zasobów.
Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.
Krok 3:
- Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.
- Wybierz 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).
W katalogu głównym repozytorium uruchom polecenie
azd init
.azd init --template python-app-service-postgresql-infra
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.Zaloguj się do platformy
azd auth login
Azure, uruchamiając polecenie i postępując zgodnie z wierszem polecenia:azd auth login
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ą poleceniaazd 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.
W danych wyjściowych usługi AZD znajdź ustawienia
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
iAZURE_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
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
W obszarze codespace usługi GitHub rozpocznij nową sesję czatu, wybierając widok Czat , a następnie wybierając +pozycję .
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.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 .
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?.
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.
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
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.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
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/
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.
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_HOST
i 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?
- Jak mogę nawiązać połączenie z serwerem PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?
- W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?
- Jak mogę błędy debugowania podczas wdrażania funkcji GitHub Actions?
- Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika
- Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?
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: