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:

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:

  1. Passare alla cartella dell'applicazione:

    cd msdocs-python-flask-webapp-quickstart
    
  2. Creare un ambiente virtuale per l’app:

    py -m venv .venv
    .venv\scripts\activate
    
  3. Installare le dipendenze:

    pip install -r requirements.txt
    
  4. Eseguire l'app:

    flask run
    
  5. Passare all'applicazione di esempio in http://localhost:5000 un Web browser.

    Screenshot dell'app Flask in esecuzione in locale in un 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 comando az 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 comando az 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 comandi az 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.

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.

Screenshot dell'app in esecuzione in Azure

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.

Passaggi successivi