Udostępnij za pośrednictwem


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

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

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

Do ukończenia tego samouczka potrzebne są następujące elementy:

Przejdź do końca

Po zainstalowaniu interfejsu wiersza polecenia dla deweloperów platformy Azure możesz wdrożyć w pełni skonfigurowaną przykładową aplikację pokazaną w tym samouczku i zobaczyć ją uruchomioną na platformie Azure. Wystarczy uruchomić następujące polecenia w pustym katalogu roboczym:

azd auth login
azd init --template msdocs-flask-postgresql-sample-app
azd up

Aplikacja przykładowa

Udostępniono przykładowe aplikacje w języku Python korzystające z platformy Flask i Django, które pomogą Ci wykonać czynności opisane w tym samouczku. Aby wdrożyć je bez uruchamiania ich lokalnie, pomiń tę część.

Aby uruchomić aplikację lokalnie, upewnij się, że masz zainstalowany lokalnie język Python 3.7 lub nowszy i program PostgreSQL . Następnie sklonuj gałąź przykładowego repozytorium starter-no-infra i przejdź do katalogu głównego repozytorium.

git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app

Utwórz plik env, jak pokazano poniżej, korzystając z pliku .env.sample jako przewodnika. Ustaw wartość DBNAME na nazwę istniejącej bazy danych w lokalnym wystąpieniu bazy danych PostgreSQL. Ustaw wartości DBHOST, DBUSERi DBPASS zgodnie z potrzebami dla lokalnego wystąpienia bazy danych PostgreSQL.

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

Utwórz środowisko wirtualne dla aplikacji:

py -m venv .venv
.venv\scripts\activate

Zainstaluj zależności:

pip install -r requirements.txt

Uruchom przykładową aplikację przy użyciu następujących poleceń:

# Run database migration
flask db upgrade
# Run the app at http://127.0.0.1:5000
flask run

1. 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 procesie tworzenia określisz następujące elementy:

  • Nazwa aplikacji internetowej. Jest to nazwa używana jako część nazwy DNS aplikacji internetowej w postaci https://<app-name>.azurewebsites.net.
  • Region do fizycznego uruchamiania aplikacji na świecie.
  • Stos środowiska uruchomieniowego dla aplikacji. W tym miejscu wybierasz wersję języka Python, która ma być używana dla aplikacji.
  • Plan hostingu aplikacji. Jest to warstwa cenowa obejmująca zestaw funkcji i pojemność skalowania aplikacji.
  • Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.

Zaloguj się do witryny Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby usługi aplikacja systemu Azure.

Krok 1. W witrynie Azure Portal:

  1. Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
  2. Wybierz element z etykietą Web App + Database w obszarze nagłówka Marketplace . Możesz również przejść bezpośrednio do kreatora tworzenia.

Zrzut ekranu przedstawiający sposób użycia pola wyszukiwania na górnym pasku narzędzi w celu znalezienia kreatora tworzenia aplikacji internetowej i bazy danych (Flask).

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-python-postgres-tutorial.
  2. Region → dowolny region świadczenia usługi Azure w pobliżu.
  3. Nazwamsdocs-python-postgres-XYZ , gdzie XYZ jest dowolnymi trzema losowymi znakami. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.
  4. Stos środowiska uruchomieniowego → python 3.10.
  5. DatabasePostgreSQL — serwer elastyczny jest domyślnie wybierany jako aparat bazy danych. Nazwa serwera i nazwa bazy danych są również domyślnie ustawione na odpowiednie wartości.
  6. Plan hostinguPodstawowa. Gdy wszystko będzie gotowe, możesz później skalować w górę do warstwy cenowej produkcyjnej.
  7. Wybierz pozycję Przejrzyj i utwórz.
  8. Po zakończeniu walidacji wybierz pozycję Utwórz.

Zrzut ekranu przedstawiający sposób konfigurowania nowej aplikacji i bazy danych w kreatorze Aplikacji internetowej i bazy danych (Flask).

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.
  • Usługa 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.
  • 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 serwera PostgreSQL w sieci wirtualnej.

Zrzut ekranu przedstawiający ukończony proces wdrażania (Flask).

2. Zabezpieczanie wpisów tajnych połączenia

Kreator tworzenia wygenerował parametry łączności bazy danych dla Ciebie już jako ustawienie aplikacji. Jednak najlepszym rozwiązaniem w zakresie zabezpieczeń jest całkowite przechowywanie wpisów tajnych z usługi App Service. Możesz przenieść wpisy tajne do magazynu kluczy i zmienić ustawienie aplikacji na odwołanie do usługi Key Vault za pomocą łączników usługi.

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

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

Zrzut ekranu przedstawiający sposób wyświetlania wartości ustawienia aplikacji.

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

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

Zrzut ekranu przedstawiający sposób tworzenia magazynu kluczy.

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

  1. Wybierz kartę Sieć.
  2. Usuń zaznaczenie pozycji Włącz dostęp publiczny.
  3. Wybierz pozycję Utwórz prywatny punkt końcowy.
  4. W obszarze Grupa zasobów wybierz pozycję msdocs-python-postgres-tutorial.
  5. W polu Nazwa wpisz nazwę prywatnego punktu końcowego, który składa się tylko z liter i cyfr.
  6. W obszarze Region ustaw tę samą lokalizację co grupa zasobów.
  7. W oknie dialogowym w polu Lokalizacja wybierz tę samą lokalizację co aplikacja usługi App Service.
  8. W obszarze Grupa zasobów wybierz pozycję msdocs-python-postgres-tutorial.
  9. W polu Nazwa wpisz msdocs-python-postgres-XYZVaultEndpoint.
  10. W obszarze Sieć wirtualna wybierz pozycję msdocs-python-postgres-XYZVnet.
  11. W podsieci msdocs-python-postgres-XYZSubnet.
  12. Wybierz przycisk OK.
  13. 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".

Zrzut ekranu przedstawiający sposób zabezpieczania magazynu kluczy przy użyciu prywatnego punktu końcowego.

Krok 4. Konfigurowanie łącznika usługi

  1. Na górnym pasku wyszukiwania wpisz msdocs-python-postgres, a następnie wybierz zasób usługi App Service o nazwie msdocs-python-postgres-XYZ.
  2. Na stronie App Service w menu po lewej stronie wybierz pozycję Ustawienia > Łącznik usługi. Istnieje już łącznik, który został utworzony przez kreatora tworzenia aplikacji.
  3. Zaznacz pole wyboru obok łącznika, a następnie wybierz pozycję Edytuj.
  4. Na karcie Podstawy w obszarze Baza danych PostgreSQL wybierz utworzoną bazę danych PostgreSQL.
  5. Wybierz kartę Uwierzytelnianie.
  6. W polu Hasło wklej skopiowane wcześniej hasło.
  7. Wybierz pozycję Zapisz wpis tajny w usłudze Key Vault.
  8. W obszarze Połączenie z usługą Key Vault wybierz pozycję Utwórz nową. Okno dialogowe Tworzenie połączenia jest otwierane w górnej części okna dialogowego edycji.

Zrzut ekranu przedstawiający sposób edytowania łącznika usługi za pomocą połączenia magazynu kluczy.

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.

Zrzut ekranu przedstawiający sposób konfigurowania łącznika usługi key vault.

Krok 6. Finalizowanie konfiguracji łącznika usługi

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

Zrzut ekranu przedstawiający połączenie magazynu kluczy wybrane w domyślnymŁączniku.

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

Zrzut ekranu przedstawiający sposób wyświetlania wartości zmiennej środowiskowej MySQL na platformie Azure.

Podsumowując, proces pobierania parametry połączenia PostgreSQL ze zmiennych środowiskowych usługi App Service, tworzenia usługi Azure Key Vault na potrzeby bezpiecznego zarządzania wpisami tajnymi przy użyciu dostępu prywatnego i aktualizowania łącznika usługi w celu przechowywania hasła w magazynie kluczy. Nawiązano bezpieczne połączenie między aplikacją usługi App Service i magazynem kluczy przy użyciu tożsamości zarządzanej przypisanej przez system, a konfiguracja została zweryfikowana przez potwierdzenie, że parametry połączenia używa odwołania do usługi Key Vault.

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


3. 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 uruchamia akcję kompilacji i wdrażania.

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.
  3. Wybierz pozycję Rozwidlenie.
  4. Wybierz pozycję Utwórz rozwidlenie.

Zrzut ekranu przedstawiający sposób tworzenia rozwidlenia przykładowego repozytorium GitHub (Flask).

Krok 2. Na stronie GitHub otwórz program Visual Studio Code w przeglądarce, naciskając . .

Zrzut ekranu przedstawiający sposób otwierania środowiska przeglądarki programu Visual Studio Code w usłudze GitHub (Flask).

Krok 3. W programie Visual Studio Code w przeglądarce otwórz plik azureproject/production.py w eksploratorze. Zobacz zmienne środowiskowe używane w środowisku produkcyjnym, w tym ustawienia aplikacji widoczne na stronie konfiguracji.

Zrzut ekranu przedstawiający program Visual Studio Code w przeglądarce i otwarty plik (Flask).

Krok 4. Powrót na stronę usługi App Service w menu po lewej stronie wybierz pozycję Centrum wdrażania.

Zrzut ekranu przedstawiający sposób otwierania centrum wdrażania w usłudze App Service (Flask).

Krok 5. Na stronie Centrum wdrażania:

  1. W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
  2. Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
  3. W obszarze Organizacja wybierz swoje konto.
  4. W obszarze Repozytorium wybierz pozycję msdocs-flask-postgresql-sample-app.
  5. W obszarze Gałąź wybierz pozycję main.
  6. Pozostaw wybraną opcję domyślną, aby dodać przepływ pracy.
  7. W obszarze Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
  8. W górnym menu wybierz pozycję Zapisz. Usługa App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w .github/workflows katalogu.

Zrzut ekranu przedstawiający sposób konfigurowania ciągłej integracji/ciągłego wdrażania przy użyciu funkcji GitHub Actions (Flask).

Krok 6. Na stronie Centrum wdrażania:

  1. Wybierz pozycję Dzienniki. Uruchomienie wdrożenia zostało już uruchomione.
  2. W elemencie dziennika dla przebiegu wdrożenia wybierz pozycję Kompiluj/Wdróż dzienniki.

Zrzut ekranu przedstawiający sposób otwierania dzienników wdrażania w centrum wdrażania (Flask).

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 Ukończono. Trwa to około 5 minut.

Zrzut ekranu przedstawiający przebieg usługi GitHub w toku (Flask).

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

4. 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 usługi App Service.

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

  1. Wybierz pozycję SSH.
  2. Wybierz pozycję Idź.

Zrzut ekranu przedstawiający sposób otwierania powłoki SSH dla aplikacji w witrynie Azure Portal (Flask).

Krok 2. W terminalu SSH uruchom polecenie flask db upgrade. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych. Tylko zmiany w plikach w /home programie mogą być utrwalane poza ponownymi uruchomieniami aplikacji. Zmiany poza programem /home nie są utrwalane.

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

5. 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. Możesz również przejść bezpośrednio do https://<app-name>.azurewebsites.netadresu .

Zrzut ekranu przedstawiający sposób uruchamiania usługi App Service z witryny Azure Portal (Flask).

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.

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

6. Przesyłanie strumieniowe dzienników diagnostycznych

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

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

Krok 1. Na stronie usługi App Service:

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

Zrzut ekranu przedstawiający sposób włączania dzienników natywnych w usłudze App Service w witrynie Azure Portal.

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

Zrzut ekranu przedstawiający sposób wyświetlania strumienia dziennika w witrynie Azure Portal.

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.

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

Zrzut ekranu przedstawiający wyszukiwanie i przechodzenie do grupy zasobów w witrynie Azure Portal.

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

Zrzut ekranu przedstawiający lokalizację przycisku Usuń grupę zasobów w witrynie Azure Portal.

Krok 3:

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

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

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

  1. Jeśli jeszcze tego nie zrobiono, sklonuj gałąź przykładowego repozytorium starter-no-infra w lokalnym terminalu.

    git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app
    cd msdocs-flask-postgresql-sample-app
    

    Ta sklonowana gałąź jest punktem wyjścia. Zawiera prostą aplikację platformy Flask dysku danych.

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

    azd init --template python-app-service-postgresql-infra
    
  3. 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>.azurewebsites.net). Znaki alfanumeryczne i łączniki są dozwolone.
  4. Uruchom polecenie , azd up aby aprowizować niezbędne zasoby platformy Azure i wdrożyć kod aplikacji. Jeśli jeszcze nie zalogowałeś się na platformie Azure, zostanie uruchomiona przeglądarka i poprosi o zalogowanie się. Polecenie azd up wyświetli również monit o wybranie żądanej subskrypcji i lokalizacji do wdrożenia.

    azd up
    

    Wykonanie azd up polecenia może potrwać kilka minut. Ponadto kompiluje i wdraża kod aplikacji, ale później zmodyfikujesz kod, aby pracować z usługą App Service. Gdy jest uruchomiona, polecenie udostępnia komunikaty dotyczące procesu aprowizacji i wdrażania, w tym link do wdrożenia na platformie Azure. Po zakończeniu polecenie wyświetli również link do aplikacji wdrażania.

    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. Określono plan systemu Linux w warstwie B1 .
    • Usługa 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.
    • 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 serwera PostgreSQL w sieci wirtualnej.
    • Obszar roboczy usługi Log Analytics → Działa jako kontener docelowy dla aplikacji w celu wysłania dzienników, gdzie można również wykonywać zapytania dotyczące dzienników.

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

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

  1. W danych wyjściowych azd znajdź ustawienia aplikacji i znajdź ustawienia AZURE_POSTGRESQL_CONNECTIONSTRING i AZURE_REDIS_CONNECTIONSTRING. Aby zachować bezpieczeństwo wpisów tajnych, wyświetlane są tylko nazwy ustawień. Wyglądają one następująco w danych wyjściowych azd:

     App Service app has the following settings:
    
             - AZURE_POSTGRESQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
             - FLASK_DEBUG
             - SCM_DO_BUILD_DURING_DEPLOYMENT
             - SECRET_KEY
     
  2. AZURE_POSTGRESQL_CONNECTIONSTRINGzawiera parametry połączenia do bazy danych Postgres na platformie Azure i AZURE_REDIS_CONNECTIONSTRING zawiera parametry połączenia do pamięci podręcznej Redis na platformie Azure. Aby nawiązać z nim połączenie, musisz użyć kodu. Otwórz plik azureproject/production.py, usuń komentarz z następujących wierszy i zapisz plik:

    conn_str = os.environ['AZURE_POSTGRESQL_CONNECTIONSTRING']
    conn_str_params = {pair.split('=')[0]: pair.split('=')[1] for pair in conn_str.split(' ')}
    DATABASE_URI = 'postgresql+psycopg2://{dbuser}:{dbpass}@{dbhost}/{dbname}'.format(
        dbuser=conn_str_params['user'],
        dbpass=conn_str_params['password'],
        dbhost=conn_str_params['host'],
        dbname=conn_str_params['dbname']
    )
    

    Kod aplikacji jest teraz skonfigurowany do nawiązywania połączenia z bazą danych PostgreSQL na platformie Azure. Jeśli chcesz, otwórz app.py i zobacz, jak jest używana zmienna DATABASE_URI środowiskowa.

  3. W terminalu uruchom polecenie azd deploy.

    azd deploy
    

4. 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 usługi App Service.

  1. W danych wyjściowych 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 terminalu SSH uruchom polecenie flask db upgrade. Jeśli to się powiedzie, usługa App Service pomyślnie nawiązuje połączenie z bazą danych.

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

    Uwaga

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

5. Przejdź do aplikacji

  1. W danych wyjściowych 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.

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

6. 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 włączył już rejestrowanie w lokalnym systemie plików, a także wysyłanie ich 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 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 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.

7. Czyszczenie zasobów

Aby usunąć wszystkie zasoby platformy Azure w bieżącym środowisku wdrażania, uruchom polecenie azd down.

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_CONNECTIONSTRING'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_CONNECTIONSTRING) zostały zmienione. Bez tego parametry połączenia polecenie migracji nie może komunikować się z bazą danych.

Często zadawane pytania

Ile kosztuje ta konfiguracja?

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

  • Plan usługi App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
  • Serwer elastyczny PostgreSQL jest tworzony w najniższej warstwie z możliwością zwiększania szybkości Standard_B1ms z minimalnym rozmiarem magazynu, który można skalować w górę lub w dół. Zobacz Cennik usługi Azure Database for PostgreSQL.
  • Sieć wirtualna nie powoduje naliczania opłat, chyba że skonfigurujesz dodatkowe funkcje, takie jak komunikacja równorzędna. Zobacz Cennik usługi Azure Virtual Network.
  • Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.

Jak mogę nawiązać połączenie z serwerem PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?

  • Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, można uruchomić psql z poziomu terminalu 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

W jaki sposób przykład Django jest skonfigurowany do uruchamiania w usłudze aplikacja systemu Azure?

Uwaga

Jeśli korzystasz z tego samouczka z własną aplikacją, zapoznaj się z opisem pliku requirements.txt w pliku README.md każdego projektu (Flask, Django), aby zobaczyć, jakich pakietów potrzebujesz.

Przykładowa aplikacja Django konfiguruje ustawienia w pliku azureproject/production.py, aby mogła działać w usłudze aplikacja systemu Azure Service. Te zmiany są typowe dla wdrażania platformy Django w środowisku produkcyjnym, a nie specyficzne dla usługi App Service.

  • Django weryfikuje nagłówek HTTP_HOST w żądaniach przychodzących. Przykładowy kod używa zmiennej WEBSITE_HOSTNAME środowiskowej w usłudze App Service, aby dodać nazwę domeny aplikacji do ustawienia ALLOWED_HOSTS Django.

    # Configure the domain name using the environment variable
    # that Azure automatically creates for us.
    ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
    
  • Platforma Django nie obsługuje obsługi plików statycznych w środowisku produkcyjnym. Na potrzeby tego samouczka użyjesz funkcji WhiteNoise , aby włączyć obsługę plików. Pakiet WhiteNoise został już zainstalowany z requirements.txt, a jego oprogramowanie pośredniczące jest dodawane do listy.

    
    # WhiteNoise configuration
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        # Add whitenoise middleware after the security middleware
        'whitenoise.middleware.WhiteNoiseMiddleware',
    

    Następnie ustawienia pliku statycznego są konfigurowane zgodnie z dokumentacją platformy Django.

    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
    

Aby uzyskać więcej informacji, zobacz Ustawienia produkcyjne aplikacji Django.

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: