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.
Uwaga / Notatka
W tym samouczku użyjesz narzędzia Service Connector, aby połączyć aplikację webową 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ć zorientowaną na dane aplikację internetową Django w języku Python na platformie Azure App Service i połączyć ją z elastycznym serwerem bazy danych 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
- Utwórz bazę danych serwera elastycznego Azure Database for PostgreSQL
- Wdrażanie kodu w usłudze Azure App Service 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 Azure App 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 DefaultAzureCredentialbiblioteki 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 programistyczne znajdują się w pliku azuresite/settings.py.
- Aplikacja używa ustawień produkcyjnych, gdy zmienna środowiskowa jest ustawiona
WEBSITE_HOSTNAME
. Usługa Azure App Service 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
, aby potwierdzić. 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 całej 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 Twój adres IP, aby zastąpić
<your IP>
w poleceniu. 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 Azure App Service
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.
Utwórz aplikację 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 czynności, które mogą potrwać kilka minut, używając buforowanych informacji o grupie zasobów i lokalizacji z poprzedniego polecenia
az group create
(grupa$RESOURCE_GROUP_NAME
w regionieeastus
w tym przykładzie).- Utwórz plan usługi App Service w warstwie cenowej Podstawowa (B1). Możesz pominąć
--sku
, aby użyć wartości domyślnych. - Utwórz aplikację 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 do używania 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, że znajdzie informacje o bazie danych w zmiennej środowiskowej o nazwie AZURE_POSTGRESQL_CONNECTIONSTRING
dla serwera elastycznego PostgreSQL oraz w zmiennej środowiskowej o nazwie 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 / Notatka
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 przechowywania i połączenie z nim
- 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 obiektowych blob do nowo utworzonego konta magazynowego.
Skonfiguruj sieć konta przechowywania, żeby 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 restauracyjnej na dostęp publiczny do obrazów 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 . Zezwalanie na anonimowy dostęp do odczytu (publicznego) blobów 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 przekazywania kluczy magazynowych, certyfikatów ani poświadczeń usłudze App Service, aby uzyskać dostęp 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. Informacje o restauracji i recenzje są przechowywane w usłudze Azure Database for PostgreSQL, a zdjęcia są przechowywane w usłudze Azure Storage. Oto przykładowy zrzut ekranu:
Uprzątnij zasoby
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ć.