Inicio rápido: Implementación de una aplicación web de Python (Django, Flask o FastAPI) en Azure App Service
Artículo
Nota:
A partir del 1 de junio de 2024, todas las aplicaciones de App Service recién creadas tendrán la opción de generar un nombre de host predeterminado único mediante la convención de nomenclatura <app-name>-<random-hash>.<region>.azurewebsites.net. Los nombres de aplicación existentes permanecerán sin cambios.
En este inicio rápido, implementará una aplicación web de Python (Django, Flask o FastAPI) para 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:
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.
Aplicación de ejemplo
Este inicio rápido se puede completar mediante Flask, Django o FastAPI. 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.
Para hospedar la aplicación en Azure, debe crear una 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 Azure Tools o Azure Portal.
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 az login.
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 appservice 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:
Almacene los parámetros localmente en el archivo .azure/config para que no tenga que especificarlos de nuevo al implementar posteriormente con az webapp up u otros comandos az webapp desde la carpeta del proyecto. Los valores almacenados en caché se usan automáticamente de forma predeterminada.
Busque el icono de Azure en la barra de herramientas de la izquierda. Selecciónelo para abrir la extensión de Azure Tools para VS Code.
Si no ve el icono de Azure Tools, asegúrese de que tiene instalada la extensión de Azure Tools para VS Code.
En la extensión Azure Tools para VS Code:
Localice la sección RECURSOS y seleccione su suscripción.
Seleccione + (Crear recurso...).
Elija la opción Crear aplicación web de App Service...
Escriba el nombre msdocs-python-webapp-quickstart-XYZ para esta aplicación web, donde XYZ pueden ser tres caracteres únicos cualquiera.
Una vez implementado, este nombre se usa como nombre de la aplicación con el formato https://<app-name>.azurewebsites.net.
Seleccione la pila en ejecución para la aplicación. En este ejemplo, seleccione Python 3.9.
Seleccione el plan de App Service (plan de tarifa) para esta aplicación web. El plan de App Service controla cuántos recursos (CPU/memoria) están disponibles para la aplicación y cuánto tiene que pagar.
En este ejemplo, seleccione el plan de tarifa Básico (B1). Este plan supone un pequeño cargo en la cuenta de Azure, pero se recomienda al ofrecer un mejor rendimiento que el nivel Gratis (F1).
Seleccione el botón Implementar en la notificación "Nueva aplicación web creada".
Seleccione la carpeta de inicio rápido en la que está trabajando para implementarla.
Responda Sí para actualizar la configuración de compilación y mejorar el rendimiento de la implementación.
Una vez completada la implementación, aparecerá una notificación en la esquina inferior derecha de VS Code. Puede usar esta notificación para ir a la aplicación web.
Inicie sesión en Azure Portal y siga estos pasos para crear los recursos de Azure App Service.
Instrucciones
Instantánea
En el Portal de Azure:
Escriba app services en la barra de búsqueda de la parte superior de Azure Portal.
Seleccione el elemento con la etiqueta App Services bajo el encabezado Servicios en el menú que aparece bajo la barra de búsqueda.
En la página App Services , seleccione + Crear y, después, + Aplicación web en el menú desplegable.
En la página Crear aplicación web, rellene el formulario así.
Grupo de recursos → seleccione Crear nuevo y use un nombre de msdocs-python-webapp-quickstart.
Nombre → msdocs-python-webapp-quickstart-XYZ, con XYZ pudiendo ser tres caracteres aleatorios. Este nombre debe ser único en Azure.
Pila en tiempo de ejecución → Python 3.9.
Región → Cualquier región de Azure cercana.
Plan de App Service → En Plan de precios, seleccione Explorar planes de precios para seleccionar un plan de App Service diferente.
El plan de App Service controla la cantidad de recursos (CPU/memoria) que están disponibles para la aplicación y el costo de esos recursos.
En este ejemplo, en Desarrollo/pruebas, seleccione el plan B1 básico . El plan B1 básico incurrirá en un pequeño cargo en su cuenta de Azure, pero se recomienda para un mejor rendimiento que el plan F1 gratuito.
Cuando termine, seleccione Seleccionar para aplicar los cambios.
En la página principal Crear aplicación web, seleccione Revisar y crear, en la parte inferior de la pantalla.
Esto le lleva a la página Revisar. Seleccione Crear para crear la instancia de App Service.
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 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 al siguiente paso.
Dado que el paso anterior creó los recursos necesarios e implementó la aplicación en un solo paso, puede pasar al siguiente paso.
Puede implementar el código de la aplicación desde un repositorio de Git local en Azure si configura un Git remoto en el repositorio local que apunte al repositorio al que desea insertar el código. La dirección URL del repositorio remoto y las credenciales de Git necesarias para la configuración se pueden recuperar mediante Azure Portal o la CLI de Azure.
Vaya a la instancia de App Service de la aplicación.
Escriba el nombre de la instancia de App Service en el cuadro de búsqueda de la parte superior de la pantalla.
En el encabezado Recursos, seleccione App Service.
En la página de App Service:
Seleccione Centro de implementación en el menú del lado izquierdo de la pantalla.
Seleccione Git local en la lista desplegable que lleva la etiqueta Origen.
Seleccione Guardar.
Después que guarda la página, esta se actualiza y muestra la dirección del repositorio de Git remoto.
Copie el valor del URI de Git Clone, ya que este valor se va a usar para configurar un Git remoto en un paso posterior.
En la página Centro de implementación:
Vaya a la pestaña Credenciales GIT o FTPS locales.
Busque el nombre de usuario y la contraseña de git local en credenciales de ámbito de la aplicación.
Mantenga esta pantalla abierta para poder copiar estas credenciales momentáneamente, al implementar el código en el repositorio remoto. Asegúrese de copiar el nombre de usuario de Git local, que comienza con un $, por ejemplo $msdocs-python-webapp-quickstart-123.
Al insertar código en el repositorio de Git remoto por primera vez, estas credenciales son necesarias para autenticarse en él.
A continuación, en el directorio raíz de la aplicación, configure un Git remoto que apunta a Azure mediante la dirección URL del Git del remoto de Azure, obtenida en un paso anterior.
git remote add azure <git-deployment-url>
Ahora puede insertar código desde el repositorio de Git local en Azure mediante el Git remoto que acaba de configurar. La rama de implementación predeterminada para App Service es master, pero muchos repositorios de Git se están apartando de master y usando main. Puede especificar la asignación del nombre de la rama local al nombre de la rama remota en la inserción (como se muestra a continuación) o puede configurar los valores de la aplicación DEPLOYMENT_BRANCH.
git push azure main:master
La primera vez que inserte código en Azure Git le va a pedir las credenciales de implementación de Azure obtenidas en un paso anterior. Luego Git almacenará en caché estas credenciales para que no tenga que volver a escribirlas en implementaciones posteriores.
En primer lugar, configure el origen de implementación para que la aplicación web sea un Git local, mediante el comando az webapp deployment source. Este comando mostrará la dirección URL del repositorio de Git remoto en el que va a insertar código. Realice una copia de este valor, ya que lo necesitará en un paso posterior.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deployment source config-local-git \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--output tsv
# Change these values to the ones used to create the App Service.
$RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
$APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deployment source config-local-git `
--name $APP_SERVICE_NAME `
--resource-group $RESOURCE_GROUP_NAME `
--output tsv
Recupere las credenciales de implementación de la aplicación. Git necesitará que se autentiquen en Azure al insertar código en Azure en un paso posterior.
A continuación, en el directorio raíz de la aplicación, configure un Git remoto que apunta a Azure mediante la dirección URL del Git del remoto de Azure, obtenida en un paso anterior.
git remote add azure <git-deployment-url>
Ahora puede insertar código desde el repositorio de Git local en Azure mediante el Git remoto que acaba de configurar. La rama de implementación predeterminada para App Service es master, pero muchos repositorios de Git se están apartando de master y usando main. Puede especificar la asignación del nombre de la rama local al nombre de la rama remota en la inserción (como se muestra a continuación) o puede configurar los valores de la aplicación DEPLOYMENT_BRANCH.
git push azure main:master
La primera vez que inserte código en Azure Git le va a pedir las credenciales de implementación de Azure obtenidas en un paso anterior. Luego Git almacenará en caché estas credenciales para que no tenga que volver a escribirlas en implementaciones posteriores.
Las aplicaciones se pueden implementar en Azure mediante la creación de un archivo ZIP del código de la aplicación y su carga en Azure. Los archivos ZIP se pueden cargar en Azure mediante la CLI de Azure o con un cliente HTTP como cURL.
Habilitación de la automatización de compilaciones
Al implementar un archivo ZIP del código Python, debe establecer una marca para habilitar la automatización de compilación de Azure. La automatización de compilación instalará los requisitos necesarios y empaquetará la aplicación para que se ejecute en Azure.
La automatización de compilaciones en Azure se habilita estableciendo la configuración de la aplicación SCM_DO_BUILD_DURING_DEPLOYMENT en Azure Portal o en la CLI de Azure.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
# Change these values to the ones used to create the App Service.
$resourceGroupName='msdocs-python-webapp-quickstart'
$appServiceName='msdocs-python-webapp-quickstart-123'
az webapp config appsettings set `
--resource-group $resourceGroupName `
--name $appServiceName `
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
Creación de un archivo ZIP de la aplicación
Después, cree un archivo ZIP de la aplicación. Solo necesita incluir componentes de la propia aplicación. No es necesario incluir ningún archivo o directorio que comience con un punto (.), como .venv, .gitignore, .github, o .vscode.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deploy \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--src-path <zip-file-path>
# Change these values to the ones used to create the App Service.
$resourceGroupName='msdocs-python-webapp-quickstart'
$appServiceName='msdocs-python-webapp-quickstart-123'
az webapp deploy `
--name $appServiceName `
--resource-group $resourceGroupName `
--src-path <zip-file-path>
Para usar cURL para cargar el archivo ZIP en Azure, necesita el nombre de usuario y la contraseña de implementación de la instancia de App Service. Estas credenciales se pueden obtener en Azure Portal.
En la página de la aplicación web, seleccione Centro de implementación en el menú del lado izquierdo de la página.
Seleccione la pestaña Credenciales FTPS.
El Nombre de usuario y la Contraseña se muestran en el encabezado Ámbito de aplicación. En las implementaciones de archivos ZIP, use solo la parte del nombre de usuario después del carácter \ que empieza por $, por ejemplo $msdocs-python-webapp-quickstart-123. Estas credenciales serán necesarias en el comando cURL.
Ejecute el siguiente comando curl para cargar el archivo ZIP en Azure e implementar la aplicación. El nombre de usuario es el nombre de usuario de implementación obtenido en el paso 3. Cuando se ejecute este comando, se le solicitará la contraseña de implementación.
En PowerShell, asegúrese de incluir el nombre de usuario entre comillas simples para que PowerShell no intente interpretarlo como una variable de PowerShell.
En función de la presencia de determinados archivos en una implementación, App Service detecta automáticamente si una aplicación es una aplicación de Django o Flask y realiza los pasos predeterminados para ejecutar la aplicación. En el caso de las aplicaciones basadas en otros marcos web como FastAPI, debe configurar un script de inicio para que App Service ejecute la aplicación; de lo contrario, App Service ejecutará una aplicación de solo lectura predeterminada ubicada en la carpeta opt/defaultsite.
App Service detecta automáticamente la presencia de una aplicación de Flask. No se necesita ninguna configuración adicional para este inicio rápido.
App Service detecta automáticamente la presencia de una aplicación de Django. No se necesita ninguna configuración adicional para este inicio rápido.
En el caso de FastAPI, debe configurar un comando de inicio personalizado para que App Service ejecute la aplicación. El siguiente comando inicia Gunicorn con dos procesos de trabajo de Uvicorn: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
En primer lugar, configure el comando de inicio mediante el comando az webapp config set.
az webapp config set \
--startup-file "gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app" \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
A continuación, reinicie la aplicación web mediante el comando az webapp restart.
az webapp restart \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
App Service detecta automáticamente la presencia de una aplicación de Flask. No se necesita ninguna configuración adicional para este inicio rápido.
App Service detecta automáticamente la presencia de una aplicación de Django. No se necesita ninguna configuración adicional para este inicio rápido.
Use la CLI de Azure o Azure Portal para configurar el comando de inicio.
App Service detecta automáticamente la presencia de una aplicación de Flask. No se necesita ninguna configuración adicional para este inicio rápido.
App Service detecta automáticamente la presencia de una aplicación de Django. No se necesita ninguna configuración adicional para este inicio rápido.
En el caso de FastAPI, debe configurar un comando de inicio personalizado para que App Service ejecute la aplicación. El siguiente comando inicia Gunicorn con dos procesos de trabajo de Uvicorn: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Instrucciones
Instantánea
En primer lugar, configure el comando de inicio en Azure App Service. Vaya a la página de la instancia de App Service en Azure Portal.
Seleccione Configuración en el encabezado Configuración en el menú del lado izquierdo de la página.
Asegúrese de que la pestaña Configuración general está seleccionada.
En el campo Comando de inicio, escriba gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Seleccione Guardar para guardar los cambios.
Espere a la notificación de que la configuración se actualiza antes de continuar.
A continuación, reinicie la aplicación web.
Seleccione Información general en el menú del lado izquierdo de la página.
En el menú superior, seleccione Reiniciar.
Navegación hasta la aplicación
Vaya a la aplicación implementada en el explorador web mediante 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.
¡Enhorabuena! Ha implementado su primera aplicación Python en App Service en Linux.
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.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'))
def index(request):
print('Request for index page received')
return render(request, 'hello_azure/index.html')
@csrf_exempt
def hello(request):
if request.method == 'POST':
name = request.POST.get('name')
if name is None or name == '':
print("Request for hello page received with no name or blank name -- redirecting")
return redirect('index')
else:
print("Request for hello page received with name=%s" % name)
context = {'name': name }
return render(request, 'hello_azure/hello.html', context)
else:
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
print('Request for index page received')
return templates.TemplateResponse('index.html', {"request": request})
@app.get('/favicon.ico')
async def favicon():
file_name = 'favicon.ico'
file_path = './static/' + file_name
return FileResponse(path=file_path, headers={'mimetype': 'image/vnd.microsoft.icon'})
@app.post('/hello', response_class=HTMLResponse)
async def hello(request: Request, name: str = Form(...)):
if name:
print('Request for hello page received with name=%s' % name)
return templates.TemplateResponse('hello.html', {"request": request, 'name':name})
else:
print('Request for hello page received with no name or blank name -- redirecting')
return RedirectResponse(request.url_for("index"), status_code=status.HTTP_302_FOUND)
Puede revisar el contenido de los registros de diagnóstico de App Service mediante la CLI de Azure, VS Code o Azure Portal.
az webapp log tail \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
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.
Primero, debe habilitar la transmisión de registros en Azure App Service.
En la sección App Service de la extensión Azure Tools para VS Code, haga clic con el botón derecho en la instancia de App Service y seleccione Iniciar registros de streaming en el menú.
Los registros de consola aparecen en la ventana Salida de VS Code. Actualice la página principal de la aplicación o pruebe otras solicitudes para generar algunos mensajes de registro.
Verá los mensajes de registro generados por la aplicación así como los generados por el servicio en la salida.
Instrucciones
Instantánea
Primero, debe habilitar la transmisión de registros en Azure App Service. Vaya a la página de la instancia de App Service en Azure Portal.
Seleccione registros de App Service bajo el encabezado Supervisión del menú del lado izquierdo de la página.
Cambie la propiedad Application Logging de Desactivada a Sistema de archivos.
Escriba un período de retención de 30 días para los registros.
Seleccione Guardar para guardar los cambios.
Seleccione Registrar transmisión en la sección Supervisión del panel de navegación de la izquierda. Actualice la página principal de la aplicación o pruebe otras solicitudes para generar algunos mensajes de registro.
Verá los mensajes de registro generados por la aplicación y los generados por el servicio en la salida.
Cuanda haya terminado con la aplicación de muestra, puede quitar todos los recursos de la aplicación de Azure. Quitar el grupo de recursos garantiza que no incurre en cargos adicionales y ayuda a mantener ordenada la suscripción de Azure. 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.
Instrucciones
Instantánea
En la extensión Azure Tools para VS Code:
Busque la sección RECURSOS.
Seleccione el icono Agrupar por y Agrupar por grupo de recursos.
En la lista de recursos, busque el grupo de recursos que desea eliminar, haga clic con el botón derecho en él y seleccione Eliminar grupo de recursos...; se le pedirá que confirme la eliminación con el nombre del grupo de recursos por escrito en el cuadro de diálogo.
Siga estos pasos si ha iniciado sesión en Azure Portal para eliminar un grupo de recursos.
Instrucciones
Instantánea
En Azure Portal, vaya al grupo de recursos.
Escriba el nombre del grupo de recursos en la barra de búsqueda de la parte superior de la página.
En el encabezado Grupos de recursos, seleccione el nombre del grupo de recursos para ir a él.
Seleccione el botón Eliminar grupo de recursos en la parte superior de la página.
En el cuadro de diálogo de confirmación, escriba el nombre del grupo de recursos para confirmar su eliminación. Seleccione Eliminar para eliminar el grupo de recursos.