Ejemplo: Uso de las bibliotecas de Azure para crear e implementar una aplicación web
En este ejemplo se muestra cómo usar las bibliotecas de administración del SDK de Azure en un script de Python para crear e implementar una aplicación web en Azure App Service. El código de la aplicación se implementa desde un repositorio de GitHub.
Con las bibliotecas de administración (los espacios de nombres que empiezan por azure-mgmt
, como por ejemplo, azure-mgmt-web
), puede escribir programas de configuración e implementación para llevar a cabo las mismas tareas que puede realizar mediante Azure Portal, la CLI de Azure u otras herramientas de administración de recursos. Para ver ejemplo, consulte Inicio rápido: implementación de una aplicación web de Python (Django o Flask) en Azure App Service. (Más adelante en este artículo se proporcionan los comandos equivalentes de la CLI de Azure).
Todos los comandos de este artículo funcionan igual en el bash de Linux o macOS y en los shells de comandos de Windows, a menos que se indique lo contrario.
1: Configuración del entorno de desarrollo local
Si aún no lo ha hecho, configure un entorno en el que pueda ejecutar este código. Estas son algunas opciones:
Configure un entorno virtual de Python mediante
venv
o la herramienta que prefiera. Puede crear el entorno virtual localmente o en Azure Cloud Shell y ejecutar el código allí. Asegúrese de activar el entorno virtual para empezar a usarlo.Use un entorno de conda.
Use un contenedor de desarrollo en Visual Studio Code o GitHub Codespaces.
2: Instalación de los paquetes de biblioteca de Azure necesarios
Cree un archivo llamado requirements.txt con el siguiente contenido:
azure-mgmt-resource
azure-mgmt-web
azure-identity
En un terminal o símbolo del sistema con el entorno virtual activado, instale los requisitos:
pip install -r requirements.txt
3: Bifurcación del repositorio de ejemplo
Visite https://github.com/Azure-Samples/python-docs-hello-world y bifurque el repositorio en su propia cuenta de GitHub. Una bifurcación le permite asegurarse de que tiene permisos para implementar el repositorio en Azure.
A continuación, cree una variable de entorno llamada REPO_URL
con la dirección URL de la bifurcación. El ejemplo de código de la siguiente sección depende de esta variable de entorno:
4: Escritura de código para crear e implementar una aplicación web
Cree un archivo de Python llamado provision_deploy_web_app.py con el siguiente código. En los comentarios se explican los detalles del código. Asegúrese de definir las variables de entorno REPO_URL
y AZURE_SUBSCRIPTION_ID
antes de ejecutar el script.
import random, os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.web import WebSiteManagementClient
# Acquire a credential object using CLI-based authentication.
credential = AzureCliCredential()
# Retrieve subscription ID from environment variable
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = 'PythonAzureExample-WebApp-rg'
LOCATION = "centralus"
# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
{ "location": LOCATION })
print(f"Provisioned resource group {rg_result.name}")
# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group
#Step 2: Provision the App Service plan, which defines the underlying VM for the web app.
# Names for the App Service plan and App Service. We use a random number with the
# latter to create a reasonably unique name. If you've already provisioned a
# web app and need to re-run the script, set the WEB_APP_NAME environment
# variable to that name instead.
SERVICE_PLAN_NAME = 'PythonAzureExample-WebApp-plan'
WEB_APP_NAME = os.environ.get("WEB_APP_NAME", f"PythonAzureExample-WebApp-{random.randint(1,100000):05}")
# Obtain the client object
app_service_client = WebSiteManagementClient(credential, subscription_id)
# Provision the plan; Linux is the default
poller = app_service_client.app_service_plans.begin_create_or_update(RESOURCE_GROUP_NAME,
SERVICE_PLAN_NAME,
{
"location": LOCATION,
"reserved": True,
"sku" : {"name" : "B1"}
}
)
plan_result = poller.result()
print(f"Provisioned App Service plan {plan_result.name}")
# Step 3: With the plan in place, provision the web app itself, which is the process that can host
# whatever code we want to deploy to it.
poller = app_service_client.web_apps.begin_create_or_update(RESOURCE_GROUP_NAME,
WEB_APP_NAME,
{
"location": LOCATION,
"server_farm_id": plan_result.id,
"site_config": {
"linux_fx_version": "python|3.8"
}
}
)
web_app_result = poller.result()
print(f"Provisioned web app {web_app_result.name} at {web_app_result.default_host_name}")
# Step 4: deploy code from a GitHub repository. For Python code, App Service on Linux runs
# the code inside a container that makes certain assumptions about the structure of the code.
# For more information, see How to configure Python apps,
# https://docs.microsoft.com/azure/app-service/containers/how-to-configure-python.
#
# The create_or_update_source_control method doesn't provision a web app. It only sets the
# source control configuration for the app. In this case we're simply pointing to
# a GitHub repository.
#
# You can call this method again to change the repo.
REPO_URL = os.environ["REPO_URL"]
poller = app_service_client.web_apps.begin_create_or_update_source_control(RESOURCE_GROUP_NAME,
WEB_APP_NAME,
{
"location": "GitHub",
"repo_url": REPO_URL,
"branch": "master",
"is_manual_integration": True
}
)
sc_result = poller.result()
print(f"Set source control on web app to {sc_result.branch} branch of {sc_result.repo_url}")
# Step 5: Deploy the code using the repository and branch configured in the previous step.
#
# If you push subsequent code changes to the repo and branch, you must call this method again
# or use another Azure tool like the Azure CLI or Azure portal to redeploy.
# Note: By default, the method returns None.
app_service_client.web_apps.sync_repository(RESOURCE_GROUP_NAME, WEB_APP_NAME)
print(f"Deploy code")
Este código usa la autenticación basada en la CLI (con AzureCliCredential
), ya que muestra las acciones que, de otro modo, podría realizar directamente con la CLI de Azure. En ambos casos, se usa la misma identidad para la autenticación. En función de su entorno, es posible que tenga que ejecutar az login
primero para autenticar.
Para usar este código en un script de producción (por ejemplo, para automatizar la administración de máquinas virtuales), use DefaultAzureCredential
(recomendado) con un método basado en una entidad de servicio como se describe en Autenticación de aplicaciones de Python con los servicios de Azure.
Vínculos de referencia a las clases usadas en el código
- AzureCliCredential (azure.identity)
- ResourceManagementClient (azure.mgmt.resource)
- WebSiteManagementClient (azure.mgmt.web import)
5: Ejecución del script
python provision_deploy_web_app.py
6: Comprobación de la implementación de la aplicación web
Ejecute el comando siguiente para visitar el sitio web implementado:
az webapp browse --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Reemplace el nombre de la aplicación web (opción --name
) y el nombre del grupo de recursos (opción --resource-group
) por los valores que usó en el script. Debería ver "Hola mundo" en el navegador.
Si no ve la salida prevista, espere unos minutos e inténtelo de nuevo.
Si sigue sin ver la salida esperada, haga lo siguiente:
- Vaya a Azure Portal.
- Seleccione Grupos de recursos y busque el grupo de recursos que ha creado.
- Seleccione el nombre del grupo de recursos para ver los recursos que contiene. En concreto, compruebe que haya un plan de App Service y el App Service.
- Seleccione el App Service y, a continuación, seleccione Centro de implementación.
- Seleccione la pestaña registros para ver los registros de implementación.
7: Reimplementación del código de la aplicación web (opcional)
El script configura los recursos necesarios para hospedar la aplicación web y establece el origen de implementación en la bifurcación mediante la integración manual. Con la integración manual, debe desencadenar la aplicación web para extraer del repositorio y la rama configurados.
El script llama al método WebSiteManagementClient.web_apps.sync_repository para desencadenar una extracción desde la aplicación web. Si inserta cambios de código posteriores en el repositorio, puede volver a implementar el código invocando esta API o mediante otras herramientas de Azure, como la CLI de Azure o Azure Portal.
Para implementar el código con la CLI de Azure, ejecute el comando az webapp deployment source sync:
az webapp deployment source sync --name PythonAzureExample-WebApp-12345 --resource-group PythonAzureExample-WebApp-rg
Reemplace el nombre de la aplicación web (opción --name
) y el nombre del grupo de recursos (opción --resource-group
) por los valores que usó en el script.
Para implementar el código desde Azure Portal:
- Vaya a Azure Portal.
- Seleccione Grupos de recursos y busque el grupo de recursos que ha creado.
- Seleccione el nombre del grupo de recursos para ver los recursos que contiene. En concreto, compruebe que haya un plan de App Service y el App Service.
- Seleccione el App Service y, a continuación, seleccione Centro de implementación.
- En el menú superior, seleccione Sincronizar para implementar el código.
8: Limpieza de recursos
az group delete --name PythonAzureExample-WebApp-rg --no-wait
Ejecute el comando az group delete si no es necesario conservar el grupo de recursos creado en este ejemplo. Los grupos de recursos no acarrean cargos continuos en su suscripción, pero es recomendable limpiar cualquier grupo que no vaya a usar activamente. El argumento --no-wait
permite que el comando devuelva el control inmediatamente en lugar de esperar a que finalice la operación.
También puede usar el método ResourceManagementClient.resource_groups.begin_delete
para eliminar un grupo de recursos del código.
Como referencia: comandos equivalentes de la CLI de Azure
Los siguientes comandos de la CLI de Azure realizan los mismos pasos de aprovisionamiento que el script de Python:
rem Replace <your_github_user_name> with the account name of the fork.
set repoUrl=https://github.com/<your_github_user_name>/python-docs-hello-world
set appName=PythonAzureExample-WebApp-%random%
az group create -l centralus -n PythonAzureExample-WebApp-rg
az appservice plan create -n PythonAzureExample-WebApp-plan -g PythonAzureExample-WebApp-rg ^
--is-linux --sku F1
echo Creating app: %appName%
az webapp create -g PythonAzureExample-WebApp-rg -n %appName% ^
--plan PythonAzureExample-WebApp-plan --runtime "python|3.8"
rem You can use --deployment-source-url with the first create command. It is shown here
rem to match the sequence of the Python code.
az webapp create -n %appName% -g PythonAzureExample-WebApp-rg ^
--plan PythonAzureExample-WebApp-plan --runtime "python|3.8" ^
--deployment-source-url %repoUrl%
rem The previous command sets up External Git deployment from the specified repository. This
rem command triggers a pull from the repository.
az webapp deployment source sync --name %appName% --resource-group PythonAzureExample-WebApp-rg
Consulte también
- Ejemplo: Creación de un grupo de recursos
- Ejemplo: Enumeración de los grupos de recursos de una suscripción
- Ejemplo: Creación de Azure Storage
- Ejemplo: Uso de Azure Storage
- Ejemplo: Creación y consulta de una base de datos MySQL
- Ejemplo: Creación de una máquina virtual
- Uso de Azure Managed Disks con máquinas virtuales
- Realización de una breve encuesta sobre el SDK de Azure para Python