Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, aprenderá a implementar una aplicación web de Django controlada Python por datos para Azure App Service y usar Service Connector para conectarla a otros servicios Azure. La aplicación web de muestra guarda la información de los restaurantes y las reseñas en una base de datos de Azure Database for PostgreSQL y almacena fotos en un contenedor de Azure Storage.
Usa CLI de Azure para completar las siguientes tareas:
- Cree una aplicación web Python Django e impleméntela en Azure App Service.
- Cree un Azure Database for PostgreSQL servidor flexible y base de datos.
- Cree una cuenta y un contenedor Azure Storage.
- Conecte la aplicación web al contenedor de base de datos y almacenamiento mediante Service Connector con autenticación de identidad administrada .
- Interactúe con la aplicación web.
Nota:
Este tutorial es similar al tutorial de App Service Implementar una aplicación web de Django con Python y PostgreSQL en Azure, pero usa una identidad administrada sin contraseña asignada automáticamente por el sistema con control de acceso basado en roles de Azure para acceder a otros recursos de Azure. En la sección Creación de una conexión de servicio sin contraseña de este artículo se muestra cómo Service Connector simplifica el proceso de conexión.
La aplicación web usa la clase DefaultAzureCredential de la biblioteca cliente de Python Azure Identity para detectar automáticamente cuándo existe una identidad administrada y la usa para acceder a los demás recursos.
Prerrequisitos
Una suscripción de Azure con permisos de escritura y asignación de roles para los recursos del tutorial, en una región de Azure que admite Service Connector y tiene suficiente soporte y cuota de App Service.
Azure Cloud Shell para ejecutar los pasos del tutorial, o si prefiere ejecutar localmente:
- Instale CLI de Azure 2.30.0 o posterior. Para comprobar la versión, ejecute
az --version. Para actualizar, ejecuteaz upgrade. - Inicie sesión en Azure mediante
az loginy siga las indicaciones.
- Instale CLI de Azure 2.30.0 o posterior. Para comprobar la versión, ejecute
Configuración del entorno
Asegúrese de que la suscripción está registrada para usar los proveedores de recursos
Microsoft.ServiceLinkeryMicrosoft.DBforPostgreSQL. Si no es así, ejecuteaz provider register -n Microsoft.[name of service]para registrar los proveedores.Instale las siguientes extensiones de CLI de Azure:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Clonación de la aplicación de ejemplo
Clona el repositorio de la app de ejemplo.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitComo alternativa, puede descargar la aplicación desde https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless y descomprimirla en una carpeta denominada serviceconnector-webapp-postgresql-django-passwordless.
Cambie los directorios a la carpeta del repositorio mediante
cd serviceconnector-webapp-postgresql-django-passwordlessy ejecute todos los comandos restantes de esa carpeta.
En la aplicación de ejemplo, la configuración de producción de la aplicación web se encuentra en el archivo azuresite/production.py . La configuración de desarrollo se encuentra en azuresite/settings.py. La configuración de producción configura Django para que se ejecute en cualquier entorno de producción y no sea específica de App Service.
La aplicación usa la configuración de producción cuando se establece la variable de entorno WEBSITE_HOSTNAME. Para las cadenas de conexión de Azure Postgres, App Service establece automáticamente esta variable en la dirección URL de la aplicación web, como https://msdocs-django.azurewebsites.net.
Para obtener más información, consulte la lista de comprobación de implementación de Django. Consulte también la configuración de Production para Django en Azure.
Definición de variables de entorno iniciales
El código siguiente define las variables de entorno necesarias para este tutorial.
-
LOCATIONdebe ser una región de Azure en la que la suscripción disponga de cuota suficiente para crear los recursos y no restrinja el uso de Azure Database for PostgreSQL en la suscripción. -
ADMIN_PWdebe contener de 8 a 128 caracteres de manera que incluya al menos tres de las cuatro categorías: mayúsculas, minúsculas, números y caracteres no alfanuméricos, excepto$.
Configure las siguientes variables de entorno, reemplazando los
<region>marcadores de posición y<database password>por valores válidos.LOCATION="<region>" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="<database password>"Cree un grupo de recursos para contener todos los recursos del proyecto. El nombre del grupo de recursos se almacena en caché y se aplica automáticamente a los comandos posteriores.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Implementación del código de la aplicación en App Service
Cree el host de la aplicación en App Service e implemente el código de aplicación de ejemplo en ese host. El az webapp up comando realiza las siguientes acciones:
- Crea un plan de App Service en el plan de tarifa Básico (B1).
- Crea la aplicación de App Service.
- Habilita el registro predeterminado para la aplicación.
- Carga el repositorio mediante la implementación ZIP con la automatización de compilación habilitada.
- Compila la aplicación.
En el código, sku define la CPU, la memoria y el costo del plan de App Service. El plan de servicio Básico (B1) incurre en un pequeño costo en la suscripción de Azure. Puede omitir el --sku parámetro para usar la SKU predeterminada, normalmente P1v3 (Premium v3). Para obtener una lista completa de los planes de App Service, consulte Precios de App Service.
En la carpeta serviceconnector-webapp-postgresql-django-passwordless repository, ejecute el siguiente
az webapp upcomando:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Nota:
La implementación tarda unos minutos y el comando puede bloquearse o agotar el tiempo de espera, especialmente en una SKU básica. Una vez que la aplicación se compila correctamente y la salida muestra
Starting the site, puede salir del comando seleccionando Ctrl+C.Configure la aplicación para que use el repositorio start.sh archivo mediante la ejecución del comando az webapp config set .
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Creación de la base de datos de Postgres en Azure
Cree la base de datos Azure Database for PostgreSQL para almacenar la información de la aplicación. El comando az postgres flexible-server create crea un servidor flexible Azure Database for PostgreSQL en el grupo de recursos especificado que tiene:
- Nombre del servidor especificado en el
--nameparámetro . El nombre debe ser único en todo Azure. - SKU especificado en el
--sku-nameparámetro. - Nombre de usuario y contraseña de la cuenta de administrador especificados en los
--admin-usery--admin-passwordparámetros.
Cree el servidor de Azure Database para PostgreSQL. Si se le pide que habilite el acceso a la dirección IP del cliente actual, escriba
ysí.az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --microsoft-entra-auth EnabledSi no se le pide que habilite el acceso a la dirección IP del cliente actual, configure una regla de firewall en el servidor con el comando az postgres flexible-server firewall-rule create . Esta regla permite el acceso del entorno local al servidor.
IP_ADDRESS=<your IP address> az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name AllowMyIP \ --start-ip-address $IP_ADDRESS \ --end-ip-address $IP_ADDRESSSugerencia
Use cualquier herramienta o sitio web que muestre su dirección IP para sustituir
<your IP address>en el comando. Por ejemplo, puede usar ¿Qué es mi dirección IP?.Cree una base de datos denominada
restauranten el servidor mediante el comando az postgres flexible-server execute .az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Creación de una conexión de servicio sin contraseña
Use az webapp connection create postgres-flexible para agregar un conector de servicio que conecte la aplicación web de Azure a la base de datos postgres mediante la autenticación de identidad administrada sin contraseña. El comando siguiente configura Azure Database for PostgreSQL para usar la identidad administrada y Azure control de acceso basado en rol. La salida del comando muestra las acciones que realiza Service Connector.
El comando crea una variable de entorno denominada AZURE_POSTGRESQL_CONNECTIONSTRING que proporciona la información de conexión de la base de datos para la aplicación. El código de la aplicación accede a las variables de entorno de la aplicación con instrucciones como os.environ.get('AZURE_POSTGRESQL_HOST'). Para obtener más información, consulte Variables de entorno de Access.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--server $DB_SERVER_NAME \
--database restaurant \
--client-type python \
--system-identity
Creación y conexión a una cuenta de almacenamiento
Use az webapp connection create storage-blob para crear una cuenta de almacenamiento Azure y un conector de servicio. El comando realiza las siguientes acciones:
- Habilita la identidad administrada asignada por el sistema en la aplicación web.
- Agrega la aplicación web con el rol Colaborador de datos de Storage Blob a la nueva cuenta de almacenamiento.
- Configura la red de la cuenta de almacenamiento para aceptar el acceso desde la aplicación web.
- Crea una variable de entorno denominada
AZURE_STORAGEBLOB_RESOURCEENDPOINTpara la cuenta de Azure Storage.
Ejecute el siguiente comando para crear la cuenta de almacenamiento y la conexión:
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))Actualice la cuenta de almacenamiento para permitir el acceso público de blobs para que los usuarios de la aplicación accedan a fotos.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessUse az storage container create para crear un contenedor llamado
photosen la cuenta de almacenamiento, permitiendo el acceso de lectura público anónimo a objetos en el nuevo contenedor.# Set the BLOB_ENDPOINT variable BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g') echo $BLOB_ENDPOINT # Create the storage container using the BLOB_ENDPOINT variable az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINT
Prueba de la aplicación web de Python en Azure
Abra y pruebe la aplicación web Azure Restaurant Review. La aplicación usa el paquete azure.identity y su DefaultAzureCredential clase. Cuando la aplicación se ejecuta en Azure, el DefaultAzureCredential detecta automáticamente cuándo existe una identidad administrada para App Service y la usa para acceder a los recursos de Azure Storage y Azure Database for PostgreSQL. La aplicación no necesita proporcionar claves de almacenamiento, certificados ni credenciales para acceder a estos recursos.
Para una instalación de CLI de Azure local, puede usar
az webapp browsepara abrir la aplicación en el explorador predeterminado:az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell no puede abrir un explorador local, por lo que no admite el comando
az webapp browse. Desde Cloud Shell, la manera más fácil de abrir la aplicación web es seleccionar el dominio Default vínculo situado en la esquina superior derecha de la página del portal de Azure de la aplicación.
La aplicación puede tardar uno o dos minutos en iniciarse. Si ve una página de aplicación predeterminada que no es la aplicación de ejemplo, espere un minuto y actualice el explorador.
Pruebe la funcionalidad de la aplicación de ejemplo agregando un restaurante y algunas opiniones con fotos. La aplicación debe ser similar a la siguiente captura de pantalla:
Limpieza de recursos
Para evitar cargos continuos, puede eliminar los recursos que creó para este tutorial mediante la eliminación del grupo de recursos que los contiene. Asegúrese de que ya no necesita la aplicación o los recursos antes de ejecutar el comando.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
La eliminación de todos los recursos puede llevar tiempo. El --no-wait argumento permite que el comando devuelva inmediatamente.
Solución de problemas
Si tiene problemas al ejecutar este tutorial, consulte los siguientes recursos:
- Solucionar problemas de aplicaciones Python en Linux para Azure App Service
- Solicitar soporte técnico