Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come distribuire un'app Web Django basata sui dati Python in Servizio app di Azure e usare Service Connector per connetterla ad altri servizi Azure. L'app Web di esempio archivia i ristoranti e esamina le informazioni in un database Database di Azure per PostgreSQL e archivia le foto in un contenitore Archiviazione di Azure.
Usare interfaccia della riga di comando di Azure per completare le attività seguenti:
- Creare un'app Web Python Django e distribuirla in Servizio app di Azure.
- Creare un server flessibile e un database Database di Azure per PostgreSQL.
- Creare un account e un contenitore Archiviazione di Azure.
- Connetti l'app Web al database e al contenitore di archiviazione utilizzando il Service Connector con l'autenticazione dell'identità gestita.
- Interagire con l'app Web.
Nota
Questa esercitazione è simile all'esercitazione App Service Distribuire un'app web Django Python con PostgreSQL in Azure, ma utilizza un'identità gestita senza password assegnata dal sistema con controllo degli accessi basato sui ruoli di Azure per accedere ad altre risorse Azure. La sezione Creare una connessione al servizio senza password di questo articolo illustra come Service Connector semplifica il processo di connessione.
L'app Web usa la classe DefaultAzureCredential della libreria client Python Azure Identity per rilevare automaticamente quando esiste un'identità gestita e la usa per accedere alle altre risorse.
Prerequisiti
Una sottoscrizione di Azure con autorizzazioni di scrittura e assegnazione di ruolo per le risorse dell'esercitazione, in un'area di Azure che supporta il connettore di servizio e che dispone di quota e supporto del servizio app.
Azure Cloud Shell per eseguire i passaggi dell'esercitazione o se si preferisce eseguire localmente:
- Installare interfaccia della riga di comando di Azure 2.30.0 o versione successiva. Per controllare la versione, eseguire
az --version. Per eseguire l'aggiornamento, eseguireaz upgrade. - Accedere a Azure usando
az logine seguendo le istruzioni.
- Installare interfaccia della riga di comando di Azure 2.30.0 o versione successiva. Per controllare la versione, eseguire
Configurazione dell'ambiente
Assicurati che l'abbonamento sia registrato per usare i provider di risorse
Microsoft.ServiceLinkereMicrosoft.DBforPostgreSQL. In caso contrario, eseguireaz provider register -n Microsoft.[name of service]per registrare i provider.Installare le estensioni interfaccia della riga di comando di Azure seguenti:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Clonare l'app di esempio
Clona il repository dell'app di esempio.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitIn alternativa, è possibile scaricare l'app da https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless e decomprimerla in una cartella denominata serviceconnector-webapp-postgresql-django-passwordless.
Modificare le directory nella cartella del repository usando
cd serviceconnector-webapp-postgresql-django-passwordlessed eseguire tutti i comandi rimanenti da tale cartella.
Nell'app di esempio le impostazioni di produzione dell'app Web si trovano nel file azuresite/production.py . Le impostazioni di sviluppo si trovano in azuresite/settings.py. Le impostazioni di produzione configurano Django per l'esecuzione in qualsiasi ambiente di produzione e non sono specifiche del servizio app.
L'app usa le impostazioni di produzione quando viene impostata la WEBSITE_HOSTNAME variabile di ambiente. Per Azure stringhe di connessione Postgres, il servizio app imposta automaticamente questa variabile sull'URL dell'app Web, ad esempio https://msdocs-django.azurewebsites.net.
Per altre informazioni, vedere l'elenco di controllo per la distribuzione di Django. Vedere anche le impostazioni di Production per Django in Azure.
Definire le variabili di ambiente iniziali
Il codice seguente definisce le variabili di ambiente necessarie per questa esercitazione.
-
LOCATIONdeve essere un'area di Azure in cui la tua sottoscrizione ha una quota sufficiente per creare le risorse e che non impone restrizioni per Database di Azure per PostgreSQL nella tua sottoscrizione. -
ADMIN_PWDeve contenere da 8 a 128 caratteri in almeno tre delle quattro categorie lettere maiuscole, lettere minuscole, numeri e caratteri non alfanumerici, esclusi$.
Configurare le variabili di ambiente seguenti, sostituendo i
<region>segnaposto e<database password>con valori validi.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>"Creare un gruppo di risorse per contenere tutte le risorse del progetto. Il nome del gruppo di risorse viene memorizzato nella cache e applicato automaticamente ai comandi successivi.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Distribuire il codice dell'app su App Service
Creare l'host dell'app nel servizio app e distribuire il codice dell'app di esempio in tale host. Il az webapp up comando esegue le azioni seguenti:
- Crea un piano di servizio app nel piano tariffario Basic (B1).
- Crea l'app del servizio App Service.
- Abilita la registrazione predefinita per l'app.
- Carica il repository usando la distribuzione ZIP con l'automazione della compilazione abilitata.
- Compila l'app.
Nel codice sku definisce la CPU, la memoria e il costo del piano di servizio app. Il piano di servizio Basic (B1) comporta un costo ridotto nella sottoscrizione Azure. È possibile omettere il --sku parametro per usare lo SKU predefinito, in genere P1v3 (Premium v3). Per un elenco completo dei piani di servizio app, vedere Prezzi del servizio app.
Dalla cartella del repository serviceconnector-webapp-postgresql-django-passwordless eseguire il comando seguente
az webapp up:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Nota
La distribuzione richiede alcuni minuti e il comando può bloccarsi o andare in timeout, in particolare su uno SKU di tipo Basic. Dopo che l'app viene compilata correttamente e l'output mostra
Starting the site, è possibile uscire dal comando selezionando CTRL+C.Configurare l'app per l'uso del repository start.sh file eseguendo il comando az webapp config set .
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Creare il database Postgres in Azure
Creare il database Database di Azure per PostgreSQL per archiviare le informazioni dell'app. Il comando az postgres flexible-server create crea un server flessibile Database di Azure per PostgreSQL nel gruppo di risorse specificato con:
- Nome del
--nameserver specificato nel parametro . Il nome deve essere univoco in tutte le Azure. - SKU specificato nel
--sku-nameparametro . - Nome utente e password dell'account amministratore specificati nei parametri
--admin-usere--admin-password.
Creare il server Database di Azure per PostgreSQL. Se viene richiesto di abilitare l'accesso all'indirizzo IP client corrente, immettere
ysì.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 EnabledSe non viene richiesto di abilitare l'accesso all'indirizzo IP client corrente, configurare una regola del firewall nel server con il comando az postgres flexible-server firewall-rule create . Questa regola consente all'ambiente locale di accedere al server.
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_ADDRESSSuggerimento
Utilizzare qualsiasi strumento o sito Web che mostri l'indirizzo IP per sostituire
<your IP address>nel comando. Ad esempio, è possibile usare What's My IP Address?.Creare un database denominato
restaurantnel server usando il comando 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;'
Creare una connessione al servizio senza password
Usare az webapp connection create postgres-flexible per aggiungere un connettore di servizio che connette l'app Web Azure al database Postgres usando l'autenticazione dell'identità gestita senza password. Il comando seguente configura il database di Azure per PostgreSQL per usare l'identità gestita e il controllo degli accessi in base al ruolo di Azure. L'output del comando elenca le azioni eseguite da Service Connector.
Il comando crea una variabile di ambiente denominata AZURE_POSTGRESQL_CONNECTIONSTRING che fornisce le informazioni di connessione al database per l'app. Il codice dell'app accede alle variabili di ambiente dell'app con istruzioni come os.environ.get('AZURE_POSTGRESQL_HOST'). Per altre informazioni, vedere Accedere alle variabili di ambiente.
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
Creare e connettersi a un account di archiviazione
Usare az webapp connection create storage-blob per creare un account di archiviazione Azure e un connettore di servizio. Il comando esegue le azioni seguenti:
- Abilita l'identità gestita assegnata dal sistema nell'app Web.
- Aggiunge l'app Web con il ruolo Collaboratore dati BLOB di archiviazione al nuovo account di archiviazione.
- Configura la rete dell'account di archiviazione per accettare l'accesso dall'app Web.
- Crea una variabile di ambiente denominata
AZURE_STORAGEBLOB_RESOURCEENDPOINTper l'account Archiviazione di Azure.
Eseguire il comando seguente per creare l'account di archiviazione e la connessione:
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))Aggiornare l'account di archiviazione per consentire l'accesso pubblico ai blob agli utenti dell'app per accedere alle foto.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessUsare az storage container create per creare un contenitore denominato
photosnell'account di archiviazione e consentire l'accesso in lettura pubblico anonimo ai BLOB nel nuovo contenitore.# 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
Testare l'app Web Python in Azure
Aprire e testare l'app Web Azure Restaurant Review. L'app usa il pacchetto azure.identity e la relativa DefaultAzureCredential classe. Quando l'app è in esecuzione in Azure, il DefaultAzureCredential rileva automaticamente quando esiste un'identità gestita per il servizio app e la usa per accedere alle risorse Archiviazione di Azure e Database di Azure per PostgreSQL. L'app non deve fornire chiavi di archiviazione, certificati o credenziali per accedere a queste risorse.
Per un'installazione interfaccia della riga di comando di Azure locale, è possibile usare
az webapp browseper aprire l'app nel browser predefinito:az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell non è possibile aprire un browser locale, quindi non supporta il comando
az webapp browse. Da Cloud Shell, il modo più semplice per aprire l'app Web consiste nel selezionare il collegamento Dominio predefinito in alto a destra nella pagina del portale di Azure dell'app.
L'avvio dell'app può richiedere uno o due minuti. Se viene visualizzata una pagina dell'app predefinita che non è l'app di esempio, attendere un minuto e aggiornare il browser.
Testare la funzionalità dell'app di esempio aggiungendo un ristorante e alcune recensioni con le foto. L'app dovrebbe essere simile allo screenshot seguente:
Pulire le risorse
Per evitare addebiti in corso, è possibile eliminare le risorse create per questa esercitazione eliminando il gruppo di risorse che li contiene. Assicurarsi di non avere più bisogno dell'app o delle risorse prima di eseguire il comando.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
L'eliminazione di tutte le risorse può richiedere tempo. Con l'argomento --no-wait, il comando restituisce immediatamente il risultato.
Risoluzione dei problemi
Se si verificano problemi durante l'esecuzione di questa esercitazione, vedere le risorse seguenti: