Notatka
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.
Z tego samouczka dowiesz się, jak wdrożyć aplikację internetową Python Django opartą na danych do usługi Azure App Service oraz jak użyć Service Connector do połączenia z innymi usługami Azure. Przykładowa aplikacja internetowa przechowuje informacje o restauracjach i recenzjach w bazie danych Azure Database for PostgreSQL oraz przechowuje zdjęcia w kontenerze Azure Storage.
Aby wykonać następujące zadania, należy użyć Azure CLI:
- Utwórz aplikację internetową Python Django i wdróż ją w Azure App Service.
- Utwórz Azure Database for PostgreSQL serwer elastyczny i bazę danych.
- Utwórz konto i kontener Azure Storage.
- Podłącz aplikację webową do bazy danych i kontenera pamięci masowej przy użyciu łącznika usługi z uwierzytelnianiem przy użyciu tożsamości zarządzanej.
- Interakcja z aplikacją internetową.
Uwaga / Notatka
Ten samouczek jest podobny do samouczka Deploy a Python Django web app with PostgreSQL in Azure usługi aplikacyjnej, ale korzysta z tożsamości zarządzanej bez hasła przypisanej przez system z kontrolą dostępu opartą na rolach Azure, aby uzyskać dostęp do innych zasobów Azure. W sekcji Tworzenie połączenia z usługą bez hasła w tym artykule pokazano, jak łącznik usługi upraszcza proces nawiązywania połączenia.
Aplikacja internetowa używa klasy DefaultAzureCredential klasy Python Azure Identity client library aby automatycznie wykrywać, kiedy istnieje tożsamość zarządzana i używa jej do uzyskiwania dostępu do innych zasobów.
Wymagania wstępne
Subskrypcja Azure z uprawnieniami do zapisu i przypisywania ról dla zasobów samouczka w regionie Azure, który obsługuje Łącznik Usługi i ma wystarczające wsparcie App Service i limitem przydziału.
Azure Cloud Shell aby uruchomić kroki samouczka lub jeśli wolisz uruchomić lokalnie:
- Zainstaluj Azure CLI 2.30.0 lub nowszy. Aby sprawdzić wersję, uruchom polecenie
az --version. Aby uaktualnić, uruchom polecenieaz upgrade. - Zaloguj się do Azure przy użyciu
az logini postępując zgodnie z monitami.
- Zainstaluj Azure CLI 2.30.0 lub nowszy. Aby sprawdzić wersję, uruchom polecenie
Konfigurowanie środowiska
Upewnij się, że subskrypcja jest zarejestrowana w celu korzystania z
Microsoft.ServiceLinkeriMicrosoft.DBforPostgreSQLdostawców usług. Jeśli nie, uruchomaz provider register -n Microsoft.[name of service], aby zarejestrować dostawców.Zainstaluj następujące rozszerzenia Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Klonowanie przykładowej aplikacji
Sklonuj przykładowe repozytorium aplikacji.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitAlternatywnie możesz pobrać aplikację z https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless i rozpakuj ją do folderu o nazwie serviceconnector-webapp-postgresql-django-passwordless.
Zmień katalogi w folderze repozytorium przy użyciu polecenia
cd serviceconnector-webapp-postgresql-django-passwordlessi uruchom wszystkie pozostałe polecenia z tego folderu.
W przykładowej aplikacji ustawienia produkcyjne aplikacji internetowej znajdują się w pliku azuresite/production.py . Ustawienia rozwojowe znajdują się w pliku azuresite/settings.py. Ustawienia produkcyjne konfigurują platformę Django do uruchamiania w dowolnym środowisku produkcyjnym i nie są specyficzne dla usługi App Service.
Aplikacja używa ustawień produkcyjnych, gdy zmienna środowiskowa jest ustawiona WEBSITE_HOSTNAME . W przypadku parametrów połączenia Azure Postgres usługa App Service automatycznie ustawia tę zmienną na adres URL aplikacji internetowej, na przykład https://msdocs-django.azurewebsites.net.
Aby uzyskać więcej informacji, zobacz listę kontrolną wdrażania Django. Zobacz również ustawienia Production dla platformy Django w Azure.
Definiowanie początkowych zmiennych środowiskowych
Poniższy kod definiuje niezbędne zmienne środowiskowe na potrzeby tego samouczka.
-
LOCATIONmusi być regionem Azure, w którym subskrypcja ma wystarczający limit, aby utworzyć zasoby, i nie ogranicza usługi Azure Database for PostgreSQL dla tej subskrypcji. - Musi
ADMIN_PWzawierać od 8 do 128 znaków w co najmniej trzech z czterech kategorii wielkich liter, małych liter, cyfr i znaków nieliczbowych, z wyłączeniem$.
Skonfiguruj następujące zmienne środowiskowe, zastępując symbole zastępcze
<region>i<database password>prawidłowymi wartościami.LOCATION="<region>" 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="<database password>"Utwórz grupę zasobów zawierającą wszystkie zasoby projektu. Nazwa grupy zasobów jest buforowana i automatycznie stosowana do kolejnych poleceń.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Wdrażanie kodu aplikacji w usłudze App Service
Utwórz hosta aplikacji w usłudze App Service i wdróż przykładowy kod aplikacji na tym hoście. Polecenie az webapp up wykonuje następujące akcje:
- Tworzy plan usługi App Service w warstwie cenowej Basic (B1).
- Tworzy aplikację App Service.
- Włącza domyślne rejestrowanie dla aplikacji.
- Przekazuje repozytorium przy użyciu wdrożenia ZIP z włączoną automatyzacją kompilacji.
- Kompiluje aplikację.
W kodzie sku definiuje procesor, pamięć i koszt planu usługi App Service. Plan usługi Podstawowa (B1) wiąże się z niewielkim kosztem w ramach subskrypcji Azure. Można pominąć parametr, --sku aby użyć domyślnej jednostki SKU, zwykle P1v3 (Premium v3). Aby uzyskać pełną listę planów usługi App Service, zobacz Cennik usługi App Service.
W folderze repozytorium serviceconnector-webapp-postgresql-django-passwordless uruchom następujące
az webapp uppolecenie:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Uwaga / Notatka
Wdrożenie trwa kilka minut, a polecenie może zawiesić się lub przekroczyć limit czasu, zwłaszcza w przypadku SKU w warstwie Podstawowa. Po pomyślnym skompilowaniu aplikacji i pokazaniu danych wyjściowych
Starting the sitemożesz wyjść z polecenia, wybierając klawisze Ctrl+C.Skonfiguruj aplikację do korzystania z pliku start.sh w repozytorium, uruchamiając polecenie az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Tworzenie bazy danych Postgres w Azure
Utwórz bazę danych Azure Database for PostgreSQL do przechowywania informacji o aplikacji. Polecenie az postgres flexible-server create tworzy serwer elastyczny Azure Database for PostgreSQL w określonej grupie zasobów, która ma:
- Nazwa serwera określona w parametrze
--name. Nazwa musi być unikalna w całym Azure. - Jednostka SKU określona w parametrze
--sku-name. - Nazwa użytkownika i hasło konta administratora określone w parametrach
--admin-useri--admin-password.
Utwórz serwer Azure Database for PostgreSQL. Jeśli zostanie wyświetlony monit o włączenie dostępu do obecnego adresu IP klienta, wprowadź
ydla tak.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 \ --microsoft-entra-auth EnabledJeśli nie zostanie wyświetlony monit o włączenie dostępu do bieżącego adresu IP klienta, 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.
IP_ADDRESS=<your IP address> 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_ADDRESSWskazówka
Użyj dowolnego narzędzia lub witryny internetowej, które wyświetla twój adres IP, aby zastąpić
<your IP address>w poleceniu. Na przykład możesz użyć opcji Co to jest mój adres IP?.Utwórz bazę danych o nazwie
restaurantna serwerze 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;'
Tworzenie połączenia usługi bez hasła
Użyj az webapp connection create postgres-flexible, aby dodać łącznik usługi, który łączy aplikację internetową Azure z bazą danych Postgres, wykorzystując uwierzytelnianie tożsamości zarządzanej bez użycia hasła. Następujące polecenie konfiguruje Azure Database for PostgreSQL do używania tożsamości zarządzanej i Azure kontroli dostępu opartej na rolach. Dane wyjściowe polecenia zawierają listę akcji, które wykonuje łącznik usługi.
Polecenie tworzy zmienną środowiskową o nazwie AZURE_POSTGRESQL_CONNECTIONSTRING , która udostępnia informacje o połączeniu z bazą danych dla aplikacji. Kod aplikacji uzyskuje dostęp do zmiennych środowiskowych aplikacji za pomocą instrukcji, takich jak os.environ.get('AZURE_POSTGRESQL_HOST'). Aby uzyskać więcej informacji, zobacz Access environment variables (Uzyskiwanie dostępu do zmiennych środowiskowych).
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
Tworzenie konta magazynowego i nawiązywanie z nim połączenia
Użyj az webapp connection create storage-blob, aby utworzyć konto magazynu Azure i konektor usługi. Polecenie wykonuje następujące akcje:
- Włącza tożsamość zarządzaną przypisaną przez system w aplikacji internetowej.
- Dodaje aplikację internetową z rolą Kontrybutor danych blob w usłudze magazynowania do nowego konta magazynu.
- Konfiguruje sieć konta magazynowania tak, aby akceptowała dostęp z aplikacji webowej.
- Tworzy zmienną środowiskową o nazwie
AZURE_STORAGEBLOB_RESOURCEENDPOINTdla konta Azure Storage.
Uruchom następujące polecenie, aby utworzyć konto magazynu i połączenie:
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 magazynowe, aby umożliwić publiczny dostęp do obiektów blob dla użytkowników aplikacji w celu uzyskania dostępu do zdjęć.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessUżyj polecenia az storage container create, aby utworzyć kontener o nazwie
photosna koncie magazynowym i zezwolić na anonimowy dostęp publiczny do odczytu obiektów blob w nowym 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 Python w Azure
Otwórz i przetestuj aplikację internetową Azure Restaurant Review. Aplikacja używa pakietu azure.identity i jej DefaultAzureCredential klasy. Gdy aplikacja jest uruchomiona w Azure, DefaultAzureCredential automatycznie wykrywa, kiedy istnieje tożsamość zarządzana dla usługi App Service i używa jej do uzyskiwania dostępu do zasobów Azure Storage i Azure Database for PostgreSQL. Aplikacja nie musi dostarczać kluczy magazynu, certyfikatów ani poświadczeń w celu uzyskania dostępu do tych zasobów.
W przypadku instalacji lokalnej Azure CLI możesz użyć
az webapp browse, aby otworzyć aplikację w przeglądarce domyślnej:az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell nie może otworzyć przeglądarki lokalnej, więc nie obsługuje polecenia
az webapp browse. W Cloud Shell najłatwiejszym sposobem uruchomienia aplikacji internetowej jest wybranie łącza Domyślna domena w prawym górnym rogu strony w portalu Azure aplikacji.
Uruchomienie aplikacji może potrwać minutę lub dwie. Jeśli zostanie wyświetlona domyślna strona aplikacji, która nie jest przykładową aplikacją, zaczekaj minutę i odśwież przeglądarkę.
Przetestuj funkcjonalność przykładowej aplikacji, dodając restaurację i kilka recenzji ze zdjęciami. Aplikacja powinna przypominać następujący zrzut ekranu:
Uprzątnij zasoby
Aby uniknąć bieżących opłat, możesz usunąć zasoby utworzone na potrzeby tego samouczka, usuwając grupę zasobów, która je zawiera. Przed uruchomieniem polecenia upewnij się, że nie potrzebujesz już aplikacji ani zasobów.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Usunięcie wszystkich zasobów może zająć trochę czasu. Argument --no-wait umożliwia natychmiastowe zwrócenie polecenia.
Troubleshooting
Jeśli masz problemy z uruchomieniem tego samouczka, zapoznaj się z następującymi zasobami:
- Rozwiązywanie problemów z aplikacjami Python na Linuxie dla Azure App Service
- Zażądaj pomocy technicznej