Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
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:
- 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 wszystkie gałęzie.
- Wybierz Utwórz fork.
Krok 2: W forku na GitHub:
- 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.
- 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:
- 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 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:
- Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
- 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.
- 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 - 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.
- 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.
- 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
- W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
- Wybierz pozycję AZURE_POSTGRESQL_CONNECTIONSTRING.
- W Dodaj/Edytuj ustawienia aplikacji, w polu Wartość, znajdź część hasło= znajdującą się na końcu ciągu.
- 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
- Na górnym pasku wyszukiwania wpisz "key vault", a następnie wybierz pozycję Marketplace>Key Vault.
- W Grupie zasobów wybierz msdocs-python-postgres-tutorial.
- W polu Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
- W Regionie ustaw taką samą lokalizację jak 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 Grupie zasobów wybierz 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 sieci wirtualnej wybierz msdocs-python-postgres-XYZVnet.
- W podsiecimsdocs-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 usługi > Łącznik. Kreator tworzenia aplikacji już utworzył dla Ciebie łącznik.
- Zaznacz pole wyboru obok łącznika PostgreSQL, a następnie wybierz pozycję Edytuj.
- 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.
- Wybierz kartę Uwierzytelnianie.
- W polu Hasło wklej skopiowane wcześniej hasło.
- Wybierz Zapisz tajemnicę w 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
- 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.
- 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 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:
- 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 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.
- 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 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):
- Rozpocznij nową sesję czatu, wybierając widok Czat, a następnie klikając +.
- 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.
- 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.
- 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 łańcucha połączenia dla biblioteki SQLAlchemy, korzystając z
AZURE_POSTGRESQL_USER
,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
iAZURE_POSTGRESQL_NAME
.
Krok 5:
- Wybierz rozszerzenie Kontrola wersji.
- 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 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
- Wybierz Narzędzia deweloperskie>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 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:
- 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 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:
- W menu po lewej stronie wybierz Monitorowanie>dzienniki usługi App Service.
- Pod Rejestrowanie aplikacji, wybierz 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 Azure, uruchamiając polecenie
azd auth login
i postępując zgodnie z instrukcjami na ekranie.azd auth login
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ą 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. 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.
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 codespace GitHub rozpocznij nową sesję czatu, wybierając widok Czat, a następnie wybierając +.
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.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.
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
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
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
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.
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_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 debugować błędy podczas wdrażania akcji GitHub?
- 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 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: