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ładmsdocs-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
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.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
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
.
- Z nazwą serwera określoną z parametrem
- 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
.
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? ).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
W terminalu upewnij się, że jesteś w folderze repozytorium serviceconnector-webapp-postgresql-django-passwordless , który zawiera kod aplikacji.
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
weastus
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.
- Utwórz plan usługi App Service w warstwie cenowej Podstawowa (B1). Możesz pominąć
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.
- 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
- 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))
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
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.
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ę.
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:
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ć.