Guida introduttiva: Distribuire un'app Web Python (Django o Flask) nel servizio app Azure

In questa guida introduttiva si distribuirà un'app Web Python (Django o Flask) nel servizio app Azure. app Azure Service è un servizio di hosting Web completamente gestito che supporta le app Python ospitate in un ambiente server Linux.

Per completare l'esercitazione introduttiva, sono necessari gli elementi seguenti:

Nota

Questo articolo contiene le istruzioni correnti sulla distribuzione di un'app Web Python usando app Azure Servizio. Python in Windows non è più supportato.

1 - Applicazione di esempio

Questa guida introduttiva può essere completata usando Flask o Django. Viene fornita un'applicazione di esempio in ogni framework che consente di seguire questa guida introduttiva. Scaricare o clonare l'applicazione di esempio nella 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 of the Flask app running locally in a browser

Problemi? Segnalarli.

2 - Creare un'app Web in Azure

Per ospitare l'applicazione in Azure, è necessario creare app Azure'app Web del servizio 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 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 usando 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 --runtime parametro specifica la versione di Python in esecuzione dell'app. Questo esempio usa Python 3.9. Per elencare tutti i runtime disponibili, usare il comando az webapp list-runtimes --os linux --output table.
  • Il --sku parametro 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 di servizio app, visualizzare la pagina dei prezzi servizio app.
  • Il --logs flag configura la registrazione predefinita necessaria per abilitare la visualizzazione del flusso di log immediatamente dopo l'avvio dell'app Web.
  • Facoltativamente, è possibile specificare un nome con l'argomento --name <app-name>. Se non ne fornisci uno, verrà generato automaticamente un nome.
  • 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 account list-locations.

Il completamento del comando può richiedere alcuni minuti. Mentre il comando è in esecuzione, fornisce messaggi sulla creazione del gruppo di risorse, il piano di servizio app e la risorsa dell'app, la configurazione della registrazione e l'esecuzione della 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:

Problemi? Segnalarli.

3 - Distribuire il codice dell'applicazione in Azure

app Azure servizio supporta più metodi per distribuire il codice dell'applicazione in Azure, incluso il supporto per GitHub Actions e tutti gli strumenti CI/CD principali. Questo articolo è incentrato su come distribuire il codice dalla workstation locale ad Azure.

Poiché il az webapp up comando ha creato le risorse necessarie e distribuito l'applicazione in un singolo passaggio, è possibile passare a 4 - Passare all'app.


Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

4 - Passare all'app

Passare all'applicazione distribuita nel Web browser all'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 of the app running in Azure

Complimenti. La distribuzione dell'app Python nel Servizio app di Azure è stata completata.

Problemi? Per prima cosa, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

5 - Trasmettere i log

app Azure Servizio acquisisce tutti i messaggi di output nella console per facilitare la diagnosi dei problemi con l'applicazione. Le app di esempio includono print() istruzioni per illustrare questa funzionalità.

app = Flask(__name__)


@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')

Il contenuto dei log di diagnostica servizio app può essere esaminato usando l'interfaccia della riga di comando di Azure, VS Code o portale di Azure.

Prima di tutto, è necessario configurare app Azure Servizio per l'output dei log nel file system 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 trasmettere i 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 di generare 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, vedere la guida alla risoluzione dei problemi. Se i problemi persistono, segnalarli.

Pulire le risorse

Al termine dell'app di esempio, è possibile rimuovere tutte le risorse per l'app da Azure. Non verranno addebitati costi aggiuntivi e la sottoscrizione di Azure non sarà ordinata. 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 usando 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