Avvio rapido: Distribuire un'app Web Python (Django, Flask o FastAPI) nel servizio app di Azure
Nota
A partire dal 1° giugno 2024, tutte le app del servizio app appena create avranno la possibilità di generare un nome host predefinito univoco usando la convenzione di denominazione <app-name>-<random-hash>.<region>.azurewebsites.net
. I nomi delle app esistenti rimarranno invariati.
Esempio: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Per altri dettagli, fare riferimento a Nome host predefinito univoco per la risorsa del servizio app.
In questo avvio rapido si distribuisce un'app Web Python (Django, Flask o FastAPI) nel Servizio app di Azure. Il Servizio app di Azure è un servizio di hosting Web completamente gestito che supporta app Python ospitate in un ambiente server Linux.
Per completare l'esercitazione introduttiva, sono necessari gli elementi seguenti:
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Python 3.9 o versione successiva installato in locale.
Nota
Questo articolo contiene istruzioni aggiornate per la distribuzione di un'app Web Python con il Servizio app di Azure. Python non è più supportato in Windows.
Applicazione di esempio
Questo avvio rapido può essere completato usando Flask, Django o FastAPI. Viene fornita un'applicazione di esempio in ogni framework che facilita l’uso di questo avvio rapido. Scaricare o clonare l'applicazione di esempio nella propria workstation locale.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
Per eseguire l'applicazione in locale:
Passare alla cartella dell'applicazione:
cd msdocs-python-flask-webapp-quickstart
Creare un ambiente virtuale per l’app:
py -m venv .venv .venv\scripts\activate
Installare le dipendenze:
pip install -r requirements.txt
Eseguire l'app:
flask run
Passare all'applicazione di esempio in
http://localhost:5000
un Web browser.
Problemi? Segnalarli.
Creare un'app Web in Azure
Per ospitare l'applicazione in Azure, è necessario creare un'app Web del servizio app di Azure in Azure. È possibile creare un'app Web usando l'interfaccia della riga di comando di Azure, VS Code, il pacchetto di estensione Strumenti di Azure o il portale di Azure.
I comandi dell'interfaccia della riga di comando di Azure possono essere eseguiti in un computer con l'interfaccia della riga di comando di Azure installata.
L'interfaccia della riga di comando di Azure include un comando az webapp up
che creerà le risorse necessarie e distribuirà l'applicazione in un unico passaggio.
Se necessario, accedere ad Azure tramite az login.
az login
Creare l'app Web e altre risorse, quindi distribuire il codice in Azure usando az webapp up.
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
- Il parametro
--runtime
specifica la versione dell'app Python in esecuzione. Questo esempio usa Python 3.9. Per elencare tutti gli snapshot disponibili, usare il comandoaz webapp list-runtimes --os linux --output table
. - Il parametro
--sku
definisce le dimensioni (CPU, memoria) e il costo del piano di servizio app. Questo esempio usa il piano di servizio B1 (Basic), che comporta un costo ridotto nella sottoscrizione di Azure. Per un elenco completo dei piani del Servizio app, visualizzare la pagina Prezzi del Servizio app. - Il flag
--logs
configura la registrazione predefinita necessaria per abilitare la visualizzazione del flusso di log subito dopo l'avvio dell'app Web. - Facoltativamente, è possibile specificare un nome con l'argomento
--name <app-name>
. Se non se ne fornisce uno, il nome viene generato automaticamente. - Facoltativamente, è possibile includere l'argomento
--location <location-name>
, dove<location_name>
è un'area di Azure disponibile. Per recuperare un elenco di aree consentite per l'account Azure, è possibile eseguire il comandoaz appservice list-locations
.
Il completamento del comando può richiedere alcuni minuti. Mentre il comando è in esecuzione, fornisce messaggi sulla creazione del gruppo di risorse, sul piano del Servizio app e sulla risorsa dell'app, sulla configurazione della registrazione e sulla distribuzione ZIP. Viene quindi visualizzato il messaggio che indica che è possibile avviare l'app all'indirizzo http://<nome-app>.azurewebsites.net, ovvero l'URL dell'app in Azure.
The webapp '<app-name>' doesn't exist Creating Resource group '<group-name>' ... Resource group creation complete Creating AppServicePlan '<app-service-plan-name>' ... Creating webapp '<app-name>' ... Configuring default logging for the app, if not already enabled Creating zip with contents of dir /home/cephas/myExpressApp ... Getting scm site credentials for zip deployment Starting zip deployment. This operation can take a while to complete ... Deployment endpoint responded with status code 202 You can launch the app at http://<app-name>.azurewebsites.net { "URL": "http://<app-name>.azurewebsites.net", "appserviceplan": "<app-service-plan-name>", "location": "centralus", "name": "<app-name>", "os": "<os-type>", "resourcegroup": "<group-name>", "runtime_version": "python|3.9", "runtime_version_detected": "0.0", "sku": "FREE", "src_path": "<your-folder-location>" }
Nota
Il comando az webapp up
esegue le azioni seguenti:
Crea un gruppo di risorse predefinito.
Creare un piano di servizio app predefinito.
Crea un'app con il nome specificato.
Zip distribuisce tutti i file dalla directory di lavoro corrente, con l'automazione della build abilitata.
Memorizzare nella cache i parametri in locale nel file .azure/config in modo che non sia necessario specificarli di nuovo durante la distribuzione successiva con
az webapp up
o altri comandiaz webapp
della cartella del progetto. I valori memorizzati nella cache vengono usati automaticamente per impostazione predefinita.
Problemi? Segnalarli.
Distribuire il codice dell'applicazione in Azure
Il servizio app di Azure supporta più metodi per distribuire il codice dell'applicazione in Azure, tra cui GitHub Actions e tutti i principali strumenti di integrazione continua e recapito continuo (CI/CD). Questo articolo è incentrato su come distribuire il codice da una workstation locale in Azure.
- Distribuzione tramite l’interfaccia della riga di comando di Azure
- Distribuzione tramite VS Code
- Distribuzione tramite un file ZIP
Poiché il comando az webapp up
ha creato le risorse necessarie e ha distribuito l'applicazione in un singolo passaggio, è possibile procedere al passaggio successivo.
Problemi? Per prima cosa, consultare la guida alla risoluzione dei problemi. Se il problema persiste, segnalarlo.
Configurare lo script di avvio
In base alla presenza di determinati file in una distribuzione, il Servizio app rileva automaticamente se un'app è un'app Django o Flask ed esegue i passaggi predefiniti per eseguire l'app. Per le app basate su altri framework Web come FastAPI, è necessario configurare uno script di avvio per l'esecuzione dell'app da parte del Servizio app; in caso contrario, il Servizio app esegue un'app di sola lettura predefinita che si trova nella cartella opt/defaultsite.
Per altre informazioni su come il Servizio app esegue app Python e su come configurare e personalizzarne il comportamento con l'app, vedere Configurare un'app Python Linux per il Servizio app di Azure.
Il Servizio app rileva automaticamente la presenza di un'app Flask. Per questo avvio rapido non è necessaria alcuna configurazione aggiuntiva.
Passare all'app
Passare all'applicazione distribuita nel Web browser usando l'URL http://<app-name>.azurewebsites.net
. Se viene visualizzata una pagina dell'app predefinita, attendere un minuto e aggiornare il browser.
Il codice di esempio Python esegue un contenitore Linux nel Servizio app usando un'immagine predefinita.
Complimenti. La distribuzione dell'app Python nel Servizio app di Azure è stata completata.
Problemi? Per prima cosa, consultare la guida alla risoluzione dei problemi. Se il problema persiste, segnalarlo.
Trasmettere i log
Il servizio app di Azure acquisisce tutto l’output dei messaggi nella console per facilitare la diagnosi dei problemi con l'applicazione. Le app di esempio includono istruzioni print()
per illustrare questa funzionalità.
@app.route('/')
def index():
print('Request for index page received')
return render_template('index.html')
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'static'),
'favicon.ico', mimetype='image/vnd.microsoft.icon')
@app.route('/hello', methods=['POST'])
def hello():
name = request.form.get('name')
if name:
print('Request for hello page received with name=%s' % name)
return render_template('hello.html', name = name)
else:
print('Request for hello page received with no name or blank name -- redirecting')
return redirect(url_for('index'))
È possibile esaminare il contenuto dei log di diagnostica del servizio app usando l'interfaccia della riga di comando di Azure, VS Code o il portale di Azure.
Prima di tutto, è necessario configurare il servizio app di Azure per l'output dei log nel file system del servizio app usando il comando az webapp log config.
az webapp log config \
--web-server-logging filesystem \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Per eseguire lo streaming dei log, usare il comando az webapp log tail.
az webapp log tail \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Aggiornare la home page nell'app o tentare altre richieste per la generazione di alcuni messaggi di log. L'output dovrebbe essere simile al seguente.
Starting Live Log Stream ---
2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
Problemi? Per prima cosa, consultare la guida alla risoluzione dei problemi. Se il problema persiste, segnalarlo.
Pulire le risorse
Al termine dell'app di esempio, è possibile rimuovere da Azure tutte le risorse per l'app. La rimozione del gruppo di risorse consente di evitare addebiti aggiuntivi e di mantenere in ordine la sottoscrizione di Azure. La rimozione del gruppo di risorse rimuove anche tutte le risorse nel gruppo di risorse ed è il modo più rapido per rimuovere tutte le risorse di Azure per l'app.
Eliminare il gruppo di risorse mediante il comando az group delete.
az group delete \
--name msdocs-python-webapp-quickstart \
--no-wait
Con l'argomento --no-wait
, il comando restituisce il risultato prima del completamento dell'operazione.
Problemi? Segnalarli.