Inicio rápido: implementación de una aplicación web de Python (Django o Flask) en Azure App Service

En este inicio rápido, implementará una aplicación web de Python (Django o Flask) en Azure App Service. Azure App Service es un servicio de hospedaje web totalmente administrado, que admite aplicaciones de Python hospedadas en un entorno de servidor Linux.

Para completar este inicio rápido necesita instalar:

Nota:

Este artículo contiene instrucciones actuales sobre la implementación de una aplicación web de Python mediante Azure App Service. Python en Windows ya no se admite.

1 - Aplicación de ejemplo

Este inicio rápido se puede completar con Flask o con Django. Se proporciona una aplicación de ejemplo en cada marco para ayudarle a seguir este inicio rápido. Descargue o clone la aplicación de ejemplo en la estación de trabajo local.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

Ejecución de la aplicación de forma local:

  1. Vaya a la carpeta de la aplicación:

    cd msdocs-python-flask-webapp-quickstart
    
  2. Cree un entorno virtual para la aplicación:

    py -m venv .venv
    .venv\scripts\activate
    
  3. Instale las dependencias:

    pip install -r requirements.txt
    
  4. Ejecute la aplicación:

    flask run
    
  5. Vaya a la aplicación de ejemplo en http://localhost:5000, en un explorador web.

    Screenshot of the Flask app running locally in a browser

¿Tiene problemas? Háganoslo saber.

2 - Creación de una aplicación web en Azure

Para hospedar la aplicación en Azure, debe crear la aplicación web de Azure App Service en Azure. Puede crear una aplicación web mediante la CLI de Azure, VS Code, el paquete de extensiones de Azure Toolso Azure Portal.

Los comandos de la CLI de Azure pueden ejecutarse en un equipo que tenga instalada la CLI de Azure.

La CLI de Azure dispone de un comando az webapp up que creará los recursos necesarios e implementará la aplicación en un solo paso.

Si es necesario, inicie sesión en Azure mediante Inicio de sesión de az.

az login

Cree la aplicación web y otros recursos y, a continuación, implemente el código en Azure mediante az webapp up.

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • El parámetro --runtime especifica qué versión de Python está ejecutando la aplicación. Este ejemplo utiliza Python 3.9. Para enumerar todos los runtimes disponibles, use el comando az webapp list-runtimes --os linux --output table.
  • El parámetro --sku define el tamaño (CPU, memoria) y el costo del plan de App Service. En este ejemplo se usa el plan de servicio B1 (Básico), que incurrirá en un pequeño coste en la suscripción de Azure. Para obtener una lista completa de los planes de App Service, vea la página Precios de App Service.
  • La marca --logs configura el registro predeterminado necesario para habilitar la visualización de la secuencia de registro inmediatamente después de iniciar la aplicación web.
  • Opcionalmente, puede especificar un nombre con el argumento --name <app-name>. Si no proporciona un nombre, se generará automáticamente.
  • Opcionalmente, incluya el argumento --location <location-name>, donde <location_name> es una región de Azure disponible. Puede recuperar una lista de las regiones permitidas para su cuenta de Azure mediante la ejecución del comando az account list-locations.

El comando puede tardar varios minutos en completarse. Mientras el comando se ejecuta, proporciona mensajes sobre la creación del grupo de recursos, el plan de App Service y el recurso de la aplicación, la configuración del registro y la implementación del archivo ZIP. A continuación, se muestra el mensaje "Puede iniciar la aplicación en http://<nombre_de_la_aplicación>.azurewebsites.net", que es la dirección URL de la aplicación en 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

El comando az webapp up realiza las acciones siguientes:

¿Tiene problemas? Háganoslo saber.

3 - Implementación del código de la aplicación en Azure

Azure App Service admite varios métodos para implementar el código de aplicación en Azure, lo que incluye compatibilidad con Acciones de GitHub y todas las herramientas de CI/CD principales. Este artículo se centra en cómo implementar el código desde la estación de trabajo local en Azure.

Dado que el comando az webapp up anterior creó los recursos necesarios e implementó la aplicación en un solo paso, puede pasar a 4 - Navegación hasta la aplicación.


¿Tiene problemas? Consulte primero la Guía de solución de problemas, de lo contrario, háganoslo saber.

4 - Navegación hasta la aplicación

Vaya a la aplicación implementada mediante el explorador web en la dirección URL http://<app-name>.azurewebsites.net. Si ve un página de aplicación predeterminada, espere un momento y actualice el explorador.

El código de ejemplo de Python se ejecuta en un contenedor de Linux en App Service con una imagen integrada.

Screenshot of the app running in Azure

Felicidades. Ha implementado su primera aplicación Python en App Service en Linux.

¿Tiene problemas? Consulte primero la Guía de solución de problemas, de lo contrario, háganoslo saber.

5 - Transmisión de registros

Azure App Service captura toda la salida de mensajes hacia la consola, para ayudarle a diagnosticar problemas de la aplicación. Las aplicaciones de ejemplo incluyen instrucciones de print() para demostrar esta funcionalidad.

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

El contenido de los registros de diagnóstico de App Service se puede revisar mediante la CLI de Azure, VS Code o Azure Portal.

Primero debe configurar Azure App Service para generar registros en el sistema de archivos de App Service mediante el comando az webapp log config.

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Para transmitir registros, use el comando az webapp log tail.

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Actualice la página principal de la aplicación o pruebe otras solicitudes para generar algunos mensajes de registro. La salida debe tener una apariencia similar a la siguiente.

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"

¿Tiene problemas? Consulte primero la Guía de solución de problemas, de lo contrario, háganoslo saber.

Limpieza de recursos

Cuanda haya terminado con la aplicación de muestra, puede quitar todos los recursos de la aplicación de Azure. No incurrirá en cargos adicionales y mantendrá la suscripción de Azure sin riesgo alguno. Al quitar el grupo de recursos también se quitan todos los recursos que haya dentro; es la manera más rápida de quitar todos los recursos de Azure de la aplicación.

Elimine el grupo de recursos con el comando az group delete.

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

El argumento --no-wait permite la devolución del comando antes de que se complete la operación.

¿Tiene problemas? Háganoslo saber.

Pasos siguientes