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.
Nota
In questa esercitazione si usa Connettore di servizi per connettere un'app Web a un servizio di database. Questa esercitazione è una modifica dell'esercitazione App Service, quindi è possibile che vengano visualizzate alcune somiglianze. Esaminare la sezione Creare un connettore senza password per il database Postgres per vedere dove entra in gioco Service Connector e semplifica il processo di connessione fornito nell'esercitazione sul servizio app.
Questa esercitazione illustra come distribuire un'app Web Python basata sui dati con Django in Azure App Service e connetterla a un database Azure Database for PostgreSQL Flexible Server.
In questa esercitazione si userà il Azure CLI per completare le attività seguenti:
- Configurare l'ambiente iniziale con Python e l'Azure CLI
- Creare un database di server flessibile di Database di Azure per PostgreSQL
- Distribuire il codice in Azure App Service e connettersi al server flessibile PostgreSQL
- Aggiornare il codice e ridistribuire
- Visualizzare i log di diagnostica
- Gestire l'app Web nel portale di Azure
Configurare l'ambiente iniziale
Avvia da Azure Cloud Shell nel portale di Azure e installa l'estensione del connettore di servizi senza password per l'Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade
Clonare o scaricare l'app di esempio
Clonare il repository di esempio:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
Passare alla cartella seguente:
cd serviceconnector-webapp-postgresql-django-passwordless
In questo tutorial, pubblichi un'app Web Django su Azure App Service. L'app Web usa un'identità gestita assegnata dal sistema (connessioni senza password) con il controllo degli accessi basato sui ruoli di Azure per accedere alle risorse Azure Storage e Azure Database for PostgreSQL - Server flessibile. Il codice usa la classe DefaultAzureCredential della libreria client Azure Identity per Python. La classe DefaultAzureCredential rileva automaticamente che esiste un'identità gestita per il servizio app e la usa per accedere ad altre risorse Azure.
- Le impostazioni di produzione si trovano nel file azuresite/production.py . Le impostazioni di sviluppo si trovano in azuresite/settings.py.
- L'app usa le impostazioni di produzione quando viene impostata la
WEBSITE_HOSTNAMEvariabile di ambiente. Azure App Service imposta automaticamente questa variabile sull'URL dell'app Web, ad esempiomsdocs-django.azurewebsites.net.
Le impostazioni di produzione sono specifiche per la configurazione di Django per l'esecuzione in qualsiasi ambiente di produzione e non sono peculiari del Servizio app. Per altre informazioni, vedere l'elenco di controllo per la distribuzione di Django. Vedere anche Impostazioni di produzione per Django in Azure per informazioni dettagliate su alcune delle modifiche.
Problemi? Fateci sapere.
Creare un database PostgreSQL in Microsoft Azure
Configurare le variabili di ambiente necessarie per l'esercitazione.
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}"Importante
ADMIN_PWDeve contenere da 8 a 128 caratteri da tre delle categorie seguenti: lettere maiuscole, lettere minuscole, numeri e caratteri non alfanumerici. Quando si creano nomi utente o password non usare il carattere$. Successivamente si creano variabili di ambiente con questi valori in cui il carattere$ha un significato specifico all'interno del contenitore Linux usato per eseguire Python app.Creare un gruppo di risorse (è possibile modificare il nome, se necessario). Il nome del gruppo di risorse viene memorizzato nella cache e applicato automaticamente ai comandi successivi.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONCreare il server di database. Se viene richiesto di abilitare l'accesso all'indirizzo IP client corrente, digitare
ysì. Questo processo richiede alcuni minuti: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 EnabledSe il comando
aznon viene riconosciuto, assicurarsi di aver installato il Azure CLI come descritto in Impostare l'ambiente iniziale.Il comando az postgres flexible-server create esegue le azioni seguenti, che richiedono alcuni minuti:
- Creare un gruppo di risorse predefinito se non è già presente un nome memorizzato nella cache.
- Creare un server flessibile PostgreSQL:
- Con il nome del server specificato con il
--nameparametro . Il nome deve essere univoco in tutte le Azure. - Con lo sku specificato dal parametro
--sku-name.
- Con il nome del server specificato con il
- Creare un account amministratore con un nome utente e una password specificati con i
--admin-userparametri e--admin-password. - Creare un database con il nome specificato con il
--database-nameparametro .
Configurare una regola del firewall sul server con il comando az postgres flexible-server firewall-rule create. Questa regola consente all'ambiente locale di accedere al server. Se viene richiesto di abilitare l'accesso dall'indirizzo IP client nel passaggio precedente, è possibile ignorare questo passaggio.
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_ADDRESSUtilizzare qualsiasi strumento o sito Web che mostri l'indirizzo IP per sostituire
<your IP>nel comando. Ad esempio, puoi utilizzare il sito Web What's My IP Address?.Creare un database denominato
restaurantusando 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;'
Distribuire il codice in Azure App Service
In questa sezione si crea un ambiente di hosting nel servizio app di Azure, si connette questa app al database Postgres e quindi si pubblica il codice in tale host.
Creare l'app del Servizio app
Nel terminale assicurarsi di essere nella cartella del repository serviceconnector-webapp-postgresql-django-passwordless che contiene il codice dell'app.
Eseguire il comando seguente
az webapp upper creare l'host del servizio app per l'app:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1Lo SKU definisce le dimensioni (CPU, memoria) e il costo del piano di servizio app. Il piano di servizio B1 (Basic) comporta un costo ridotto nella sottoscrizione Azure. Per un elenco completo dei piani di servizio app, vedere la pagina dei prezzi del servizio app.
Questo comando esegue le azioni seguenti, che possono richiedere alcuni minuti, usando il gruppo di risorse e la posizione memorizzati nella cache dal comando precedente
az group create(il gruppo$RESOURCE_GROUP_NAMEnell'areaeastusin questo esempio).- Creare un piano di servizio app nel piano tariffario Basic (B1). È possibile omettere
--skuper utilizzare i valori predefiniti. - Creare l'app del servizio App Service.
- Abilitare la registrazione predefinita per l'app.
- Carica il repository usando la distribuzione ZIP con l'automazione della compilazione abilitata.
- Creare un piano di servizio app nel piano tariffario Basic (B1). È possibile omettere
Configurare il servizio app per utilizzare il start.sh nel repository con il comando az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Creare un connettore senza password per il database Postgres
Con il codice ora distribuito nel servizio app, il passaggio successivo consiste nel connettere l'app al database Postgres in Azure. Il codice dell'app prevede di trovare informazioni sul database in una variabile di ambiente denominata AZURE_POSTGRESQL_CONNECTIONSTRING per il server flessibile PostgreSQL e una variabile di ambiente denominata AZURE_STORAGEBLOB_RESOURCEENDPOINT per Azure Storage account.
I comandi di Service Connector configurano le risorse di Azure Storage e Azure Database for PostgreSQL per l'uso dell'identità gestita e del controllo degli accessi basato sui ruoli di Azure. I comandi creano le impostazioni dell'app nel servizio app che connettono l'app Web a queste risorse. L'output dei comandi elenca le azioni del connettore di servizi eseguite per abilitare la funzionalità senza password.
Aggiungere un connettore di servizio PostgreSQL con il comando az webapp connection create postgres-flexible . L'identità gestita assegnata dal sistema viene usata per autenticare l'app Web nella risorsa di destinazione, PostgreSQL in questo caso.
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
Nota
Se viene visualizzato il messaggio di errore "La sottoscrizione non è registrata per l'uso di Microsoft.ServiceLinker", eseguire az provider register -n Microsoft.ServiceLinker per registrare il provider di risorse di Connettore di servizi ed eseguire di nuovo il comando di connessione.
Nel codice Python si accede a queste impostazioni come variabili di ambiente con istruzioni come os.environ.get('AZURE_POSTGRESQL_HOST'). Per altre informazioni, vedere Accedere alle variabili di ambiente.
Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi, altrimenti, fatecelo sapere.
Creare un account di archiviazione e connettersi
- Usare il comando az webapp connection create storage-blob per creare un account di archiviazione e creare un connettore di servizio che esegue le configurazioni seguenti:
Abilita l'identità gestita assegnata dal sistema nell'app Web
Aggiunge l'app Web con il ruolo Collaboratore dati BLOB di archiviazione all'account di archiviazione appena creato.
Configura la rete dell'account di archiviazione per accettare l'accesso dall'app Web.
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 ristoranti per accedere alle immagini.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessCreare un contenitore denominato
photosnell'account di archiviazione con il comando az storage container create . Consentire l'accesso in lettura anonimo (pubblico) ai blob nel nuovo contenitore creato.# 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
L'app di esempio Python usa il pacchetto azure.identity e la relativa classe DefaultAzureCredential. Quando l'app è in esecuzione in Azure, DefaultAzureCredential rileva automaticamente se esiste un'identità gestita per il servizio app e, in tal caso, la usa per accedere ad altre risorse Azure (archiviazione e PostgreSQL in questo caso). Non è necessario fornire chiavi di archiviazione, certificati o credenziali al servizio app per accedere a queste risorse.
Accedere all'applicazione distribuita all'URL
http://$APP_SERVICE_NAME.azurewebsites.net.L'avvio dell'app può richiedere uno o due minuti. Se viene visualizzata una pagina dell'app predefinita che non è la pagina predefinita dell'app di esempio, attendere un minuto e aggiornare il browser.
Testare la funzionalità dell'app di esempio aggiungendo un ristorante e alcune recensioni con foto del ristorante. Il ristorante e le informazioni di revisione vengono archiviate in Azure Database for PostgreSQL e le foto vengono archiviate in Azure Storage. Ecco uno screenshot di esempio:
Pulire le risorse
Se vuoi mantenere l'app o continuare con altre esercitazioni, vai a Passaggi successivi. In caso contrario, per evitare di sostenere addebiti continui, eliminare il gruppo di risorse creato per questa esercitazione:
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Eliminando il gruppo di risorse, vengono inoltre deallocate ed eliminate tutte le risorse in esso contenute. Prima di eseguire il comando assicurarsi che nessuna delle risorse del gruppo sia più necessaria.
L'eliminazione di tutte le risorse può richiedere tempo. Con l'argomento --no-wait, il comando restituisce immediatamente il risultato.
Problemi? Fateci sapere.