Udostępnij za pośrednictwem


Samouczek: tworzenie aplikacji Django za pomocą usługi Postgres w usłudze aplikacja systemu Azure Service przy użyciu łącznika usługi Service

Uwaga

W tym samouczku użyjesz łącznika usługi, aby połączyć aplikację internetową z usługą bazy danych. Ten samouczek jest modyfikacją samouczka usługi App Service, więc może być widoczne pewne podobieństwa. Zapoznaj się z sekcją Tworzenie łącznika bez hasła do bazy danych Postgres, aby zobaczyć, gdzie łącznik usługi wchodzi w grę i upraszcza proces połączenia podany w samouczku usługi App Service.

W tym samouczku pokazano, jak wdrożyć opartą na danych aplikację internetową Języka Python Django w usłudze aplikacja systemu Azure Service i połączyć ją z bazą danych serwera elastycznego usługi Azure Database for PostgreSQL.

W tym samouczku użyjesz interfejsu wiersza polecenia platformy Azure, aby wykonać następujące zadania:

  • Konfigurowanie środowiska początkowego przy użyciu języka Python i interfejsu wiersza polecenia platformy Azure
  • Tworzenie bazy danych serwera elastycznego usługi Azure Database for PostgreSQL
  • Wdrażanie kodu w usłudze aplikacja systemu Azure i nawiązywanie połączenia z serwerem elastycznym PostgreSQL
  • Aktualizowanie kodu i ponowne wdrażanie
  • Wyświetlanie dzienników diagnostycznych
  • Zarządzanie aplikacją internetową w witrynie Azure Portal

Konfigurowanie środowiska początkowego

Uruchom usługę Azure Cloud Shell w witrynie Azure Portal i zainstaluj rozszerzenie bez hasła łącznika usługi dla interfejsu wiersza polecenia platformy Azure.

az extension add --name serviceconnector-passwordless --upgrade

Klonowanie lub pobieranie przykładowej aplikacji

Sklonuj przykładowe repozytorium:

git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git

Przejdź do następującego folderu:

cd serviceconnector-webapp-postgresql-django-passwordless

W tym samouczku wdrożysz aplikację internetową Django w usłudze aplikacja systemu Azure Service. Aplikacja internetowa używa przypisanej przez system tożsamości zarządzanej (połączeń bez hasła) z kontrolą dostępu opartą na rolach platformy Azure w celu uzyskiwania dostępu do zasobów usług Azure Storage i Azure Database for PostgreSQL — serwer elastyczny. Kod używa klasy DefaultAzureCredential biblioteki klienta tożsamości platformy Azure dla języka Python. Klasa DefaultAzureCredential automatycznie wykrywa, że istnieje tożsamość zarządzana dla usługi App Service i używa jej do uzyskiwania dostępu do innych zasobów platformy Azure.

  • Ustawienia produkcyjne znajdują się w pliku azuresite/production.py . Ustawienia programowania znajdują się w witrynie azuresite/settings.py.
  • Aplikacja używa ustawień produkcyjnych, gdy zmienna środowiskowa jest ustawiona WEBSITE_HOSTNAME . usługa aplikacja systemu Azure automatycznie ustawia tę zmienną na adres URL aplikacji internetowej, na przykład msdocs-django.azurewebsites.net.

Ustawienia produkcyjne są specyficzne dla konfigurowania platformy Django do uruchamiania w dowolnym środowisku produkcyjnym i nie są specyficzne dla usługi App Service. Aby uzyskać więcej informacji, zobacz listę kontrolną wdrażania Django. Aby uzyskać szczegółowe informacje na temat niektórych zmian, zobacz Ustawienia produkcyjne dla platformy Django na platformie Azure .

Masz problemy? Daj nam znać.

Tworzenie bazy danych Postgres na platformie Azure

  1. Skonfiguruj zmienne środowiskowe potrzebne do tego samouczka.

    LOCATION="eastus"
    RAND_ID=$RANDOM
    RESOURCE_GROUP_NAME="msdocs-mi-web-app"
    APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID"
    DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID"
    ADMIN_USER="demoadmin"
    ADMIN_PW="{your database password}"
    

    Ważne

    Musi ADMIN_PW zawierać od 8 do 128 znaków z trzech z następujących kategorii: wielkie litery angielskie, małe litery angielskie, cyfry i znaki niefanumeryczne. Podczas tworzenia nazw użytkowników lub haseł nie należy używać $ znaku . Później utworzysz zmienne środowiskowe z tymi wartościami, w których $ znak ma określone znaczenie w kontenerze systemu Linux używanym do uruchamiania aplikacji języka Python.

  2. Utwórz grupę zasobów (w razie potrzeby możesz zmienić nazwę). Nazwa grupy zasobów jest buforowana i automatycznie stosowana do kolejnych poleceń.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    
  3. Utwórz serwer bazy danych. Jeśli zostanie wyświetlony monit o włączenie dostępu do bieżącego adresu IP klienta, wpisz y wartość tak. Ten proces trwa kilka minut:

    az postgres flexible-server create \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $DB_SERVER_NAME \
      --location $LOCATION \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --sku-name Standard_D2ds_v4
      --active-directory-auth Enabled
    

    az Jeśli polecenie nie jest rozpoznawane, upewnij się, że masz zainstalowany interfejs wiersza polecenia platformy Azure zgodnie z opisem w temacie Konfigurowanie środowiska początkowego.

    Polecenie az postgres flexible-server create wykonuje następujące akcje, które potrwają kilka minut:

    • Utwórz domyślną grupę zasobów, jeśli nazwa nie jest już buforowana.
    • Tworzenie serwera elastycznego PostgreSQL:
      • Z nazwą serwera określoną z parametrem --name . Nazwa musi być unikatowa na platformie Azure.
      • W przypadku jednostki SKU określonej za pomocą parametru --sku-name .
    • Utwórz konto administratora z nazwą użytkownika i hasłem określonym za pomocą parametrów --admin-user i --admin-password .
    • Utwórz bazę danych, która nazwa jest określona za pomocą parametru --database-name .
  4. Skonfiguruj regułę zapory na serwerze za pomocą polecenia az postgres flexible-server firewall-rule create . Ta reguła umożliwia dostęp środowiska lokalnego do serwera. (Jeśli w poprzednim kroku zostanie wyświetlony monit o włączenie dostępu z adresu IP klienta, możesz pominąć ten krok).

    IP_ADDRESS=<your IP>
    az postgres flexible-server firewall-rule create \
       --resource-group $RESOURCE_GROUP_NAME \
       --name $DB_SERVER_NAME \
       --rule-name AllowMyIP \
       --start-ip-address $IP_ADDRESS \
       --end-ip-address $IP_ADDRESS
    

    Użyj dowolnego narzędzia lub witryny internetowej, które wyświetla adres IP, aby zastąpić <your IP> polecenie . Na przykład możesz użyć witryny internetowej What's My IP Address? (Co to jest mój adres IP? ).

  5. Utwórz bazę danych o nazwie restaurant przy użyciu polecenia az postgres flexible-server execute .

    az postgres flexible-server execute \
      --name $DB_SERVER_NAME \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --database-name postgres \
      --querytext 'create database restaurant;'
    

Wdrażanie kodu w usłudze aplikacja systemu Azure

W tej sekcji utworzysz hosta aplikacji w aplikacji usługi App Service, połączysz tę aplikację z bazą danych Postgres, a następnie wdrożysz kod na tym hoście.

Tworzenie aplikacji usługi App Service

  1. W terminalu upewnij się, że jesteś w folderze repozytorium serviceconnector-webapp-postgresql-django-passwordless , który zawiera kod aplikacji.

  2. Uruchom następujące az webapp up polecenie, aby utworzyć hosta usługi App Service dla aplikacji:

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.9 \
      --sku B1
    

    Jednostka SKU definiuje rozmiar (procesor, pamięć) i koszt planu usługi App Service. Plan usługi B1 (wersja podstawowa) wiąże się z niewielkim kosztem w ramach subskrypcji platformy Azure. Aby uzyskać pełną listę planów usługi App Service, wyświetl stronę cennika usługi App Service.

    To polecenie wykonuje następujące akcje, które mogą potrwać kilka minut przy użyciu grupy zasobów i lokalizacji buforowanej z poprzedniego az group create polecenia (grupy $RESOURCE_GROUP_NAME w eastus regionie w tym przykładzie).

    • Utwórz plan usługi App Service w warstwie cenowej Podstawowa (B1). Możesz pominąć --sku używanie wartości domyślnych.
    • Utwórz aplikację usługi App Service.
    • Włącz domyślne rejestrowanie dla aplikacji.
    • Przekaż repozytorium przy użyciu wdrożenia ZIP z włączoną automatyzacją kompilacji.
  3. Skonfiguruj usługę App Service, aby używała start.sh w repozytorium za pomocą polecenia az webapp config set .

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

Tworzenie łącznika bez hasła do bazy danych Postgres

Po wdrożeniu kodu w usłudze App Service następnym krokiem jest połączenie aplikacji z bazą danych Postgres na platformie Azure. Kod aplikacji oczekuje znalezienia informacji o bazie danych w zmiennej środowiskowej o nazwie dla serwera elastycznego PostgresSQL i zmiennej środowiskowej o nazwie AZURE_POSTGRESQL_CONNECTIONSTRING AZURE_STORAGEBLOB_RESOURCEENDPOINT dla konta usługi Azure Storage.

Polecenia łącznika usług konfigurują zasoby usługi Azure Storage i Azure Database for PostgreSQL w celu używania tożsamości zarządzanej i kontroli dostępu opartej na rolach platformy Azure. Polecenia tworzą ustawienia aplikacji w usłudze App Service, które łączą aplikację internetową z tymi zasobami. Dane wyjściowe z poleceń zawierają listę akcji łącznika usługi podjętych w celu włączenia funkcji bez hasła.

  1. Dodaj łącznik usługi PostgreSQL za pomocą polecenia az webapp connection create postgres-flexible . Tożsamość zarządzana przypisana przez system jest używana do uwierzytelniania aplikacji internetowej w zasobie docelowym, w tym przypadku bazy danych PostgreSQL.
    az webapp connection create postgres-flexible \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --server $DB_SERVER_NAME \
      --database restaurant \
      --client-type python \
      --system-identity
    

Uwaga

Jeśli zostanie wyświetlony komunikat o błędzie "Subskrypcja nie jest zarejestrowana do korzystania z microsoft.ServiceLinker", uruchom polecenie az provider register -n Microsoft.ServiceLinker , aby zarejestrować dostawcę zasobów łącznika usługi i ponownie uruchomić polecenie połączenia.

W kodzie języka Python uzyskujesz dostęp do tych ustawień jako zmiennych środowiskowych z instrukcjami takimi jak os.environ.get('AZURE_POSTGRESQL_HOST'). Aby uzyskać więcej informacji, zobacz Access environment variables (Uzyskiwanie dostępu do zmiennych środowiskowych).

Masz problemy? Najpierw zapoznaj się z przewodnikiem rozwiązywania problemów. W przeciwnym razie daj nam znać.

Tworzenie konta magazynu i nawiązywanie z nim połączenia

  1. Użyj polecenia az webapp connection create storage-blob, aby utworzyć konto magazynu i utworzyć łącznik usługi, który wykonuje następujące konfiguracje:
  • Włącza tożsamość zarządzaną przypisaną przez system w aplikacji internetowej

  • Dodaje aplikację internetową z rolą Współautor danych obiektu blob usługi Storage do nowo utworzonego konta magazynu.

  • Skonfiguruj sieć konta magazynu, aby akceptowała dostęp z aplikacji internetowej.

    STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \
      --new true \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP_NAME \
      --client-type python \
      --system-identity \
      --query configurations[].value \
      --output tsv)
    STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
    
  1. Zaktualizuj konto magazynu, aby zezwolić użytkownikom aplikacji restauracji na dostęp publiczny do obiektów blob.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. Utwórz kontener o nazwie photos na koncie magazynu za pomocą polecenia az storage container create . Zezwalaj na dostęp anonimowego odczytu (publicznego) do obiektów blob w nowo utworzonym kontenerze.

    # Set the BLOB_ENDPOINT variable
    BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g')
    echo $BLOB_ENDPOINT
    
    # Create the storage container using the BLOB_ENDPOINT variable
    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --auth-mode login \
      --blob-endpoint $BLOB_ENDPOINT
    

Testowanie aplikacji internetowej w języku Python na platformie Azure

Przykładowa aplikacja w języku Python używa pakietu azure.identity i jej DefaultAzureCredential klasy. Gdy aplikacja jest uruchomiona na platformie Azure, automatycznie wykrywa, DefaultAzureCredential czy istnieje tożsamość zarządzana dla usługi App Service, a jeśli tak, używa jej do uzyskiwania dostępu do innych zasobów platformy Azure (w tym przypadku magazynu i bazy danych PostgreSQL). Nie ma potrzeby udostępniania kluczy magazynu, certyfikatów ani poświadczeń usłudze App Service w celu uzyskania dostępu do tych zasobów.

  1. Przejdź do wdrożonej aplikacji pod adresem URL http://$APP_SERVICE_NAME.azurewebsites.net.

    Uruchomienie aplikacji może potrwać minutę lub dwie. Jeśli zostanie wyświetlona domyślna strona aplikacji, która nie jest domyślną stroną przykładowej aplikacji, zaczekaj minutę i odśwież przeglądarkę.

  2. Przetestuj funkcjonalność przykładowej aplikacji, dodając restaurację i kilka recenzji ze zdjęciami dla restauracji. Restauracja i przegląd informacji są przechowywane w usłudze Azure Database for PostgreSQL, a zdjęcia są przechowywane w usłudze Azure Storage. Oto przykładowy zrzut ekranu:

    Zrzut ekranu przedstawiający przykładową aplikację z funkcją przeglądania restauracji przy użyciu usługi aplikacja systemu Azure, bazy danych Azure PostgreSQL Database i usługi Azure Storage.

Czyszczenie zasobów

Jeśli chcesz zachować aplikację lub kontynuować korzystanie z kolejnych samouczków, przejdź do sekcji Następne kroki. W przeciwnym razie, aby uniknąć naliczania bieżących opłat, usuń grupę zasobów utworzoną na potrzeby tego samouczka:

az group delete --name $RESOURCE_GROUP_NAME --no-wait

Usunięcie grupy zasobów spowoduje również cofnięcie przydziału i usunięcie wszystkich zawartych w niej zasobów. Przed użyciem polecenia upewnij się, że zasoby w grupie nie są już potrzebne.

Usunięcie wszystkich zasobów może zająć trochę czasu. Argument --no-wait umożliwia natychmiastowe zwrócenie polecenia.

Masz problemy? Daj nam znać.

Następny krok