0% encontró este documento útil (0 votos)
19 vistas613 páginas

Desarrollo de Python en Azure: Guía Completa

sfhh

Cargado por

Ana Grossmuller
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas613 páginas

Desarrollo de Python en Azure: Guía Completa

sfhh

Cargado por

Ana Grossmuller
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Díganos qué opina sobre la experiencia de descarga del PDF.

Azure para desarrolladores de Python


Implemente su código de Python en Azure para a web, aplicaciones sin servidor,
contenedores y modelos de Machine Learning. Aproveche las bibliotecas de Azure (SDK)
para Python para acceder mediante programación a toda la gama de servicios de Azure,
como el almacenamiento, las bases de datos, las funcionalidades de inteligencia artificial
pregeneradas, etc.

Bibliotecas de Azure (SDK)

b INTRODUCCIÓN

Introducción

Información sobre las bibliotecas de Azure

Aprendizaje de patrones de uso de la biblioteca

Autenticación con los servicios de Azure

Aplicaciones web

g TUTORIAL

Creación e implementación rápida de nuevas aplicaciones de Django/Flask/FastAPI

Implementación de una aplicación web de Django o Flask

Implementación de una aplicación web con PostgreSQL

Implementación de una aplicación web con identidad administrada

Implementación mediante acciones de GitHub

INTELIGENCIA ARTIFICIAL

f INICIO RÁPIDO

Desarrollo con los servicios de Azure AI

Ejemplo de chat de RAG empresarial de Python


Contenedores

g TUTORIAL

Información general sobre los contenedores de Python

Implementación en App Service

Implementación en Container Apps

Implementación de un clúster de Kubernetes

Datos y almacenamiento

f INICIO RÁPIDO

Bases de datos SQL

Tablas, blobs, archivos, NoSQL

Macrodatos y análisis

Machine Learning

c GUÍA PASO A PASO

Creación de un experimento de Machine Learning

Entrenamiento de un modelo de predicción

Creación de canalizaciones de ML

Uso de servicios de inteligencia artificial listos para usar (cara, voz, texto, imagen, etc.)

ETL en la nube, sin servidor

Funciones sin servidor

c GUÍA PASO A PASO

Implementación con Visual Studio Code

Implementación mediante la línea de comandos


Conexión al almacenamiento mediante Visual Studio Code

Conexión al almacenamiento mediante la línea de comandos

Herramientas para desarrolladores

b INTRODUCCIÓN

Visual Studio Code (IDE)

Interfaz de la línea de comandos (CLI) de Azure

Subsistema de Windows para Linux (WSL)

Visual Studio (para el desarrollo Python/C++)


Introducción a Python en Azure
Artículo • 26/07/2024

Si no está familiarizado con el desarrollo de aplicaciones para la nube, esta breve serie
de 8 artículos es el mejor lugar para empezar.

Parte 1: Introducción a Azure para desarrolladores


Parte 2: Servicios de Azure clave para desarrolladores
Parte 3: Hosting de aplicaciones en Azure
Parte 4: Conexión de la aplicación a los servicios de Azure
Parte 5: Cómo crear y administrar recursos en Azure
Parte 6: Conceptos clave para compilar aplicaciones de Azure
Parte 7: ¿Cómo se me factura?
Parte 8: Directiva de control de versiones para servicios, SDK y herramientas de la
CLI de Azure

Creación de una cuenta de Azure


Para desarrollar aplicaciones de Python con Azure, necesita una cuenta de Azure. La
cuenta de Azure son las credenciales que se usan para iniciar sesión en Azure y lo que
se usa para crear recursos de Azure.

Si usa Azure en el trabajo, hable con el administrador de la nube de su empresa para


obtener sus credenciales para iniciar sesión en Azure.

De lo contrario, puede crear una cuenta de Azure gratuitamente y recibir 12 meses de


servicios populares gratuitos y un crédito de 200 USD para explorar Azure durante
30 días.

Crear una cuenta de Azure de forma gratuita

Crear y administrar recursos de Azure


Para usar recursos de Azure como bases de datos, colas de mensajes, almacenamiento
de archivos, etc., primero debe crear una instancia del recurso. La creación de recursos
implica:

elección de la capacidad o las opciones de informática


adición de un recurso nuevo a un grupo de recursos
selección de la región del mundo donde se ejecuta el servicio
asignación de un nombre único al servicio

Hay varias herramientas que puede usar para crear y administrar recursos de Azure,
según su caso:

Azure Portal : si no está familiarizado con Azure y quiere que una interfaz de
usuario basada en web cree y administre un par de recursos.
CLIde Azure: si está más cómodo con las interfaces de línea de comandos.
Azure PowerShell: si prefiere una sintaxis tipo PowerShellen su CLI.
CLI para desarrolladores de Azure: si desea crear implementaciones repetibles que
impliquen muchos recursos de Azure con dependencias complejas. Requiere el
aprendizaje de plantillas de Bicep como lenguaje imperativo.
Paquete de extensiones de herramientas de Azure : el paquete de extensiones
contiene extensiones para trabajar con algunos de los servicios de Azure más
populares en un práctico paquete.

También puede usar las bibliotecas de administración de Azure para Python para crear
y administrar recursos. Las bibliotecas de administración permiten usar Python para
implementar la funcionalidad de administración e implementación personalizada. A
continuación se ofrecen son algunos artículos que pueden ayudarle a comenzar:

Creación de un grupo de recursos


Enumeración de grupos y recursos
Creación de una instancia de Azure Storage
Creación e implementación de una aplicación web
Crear y consultar una base de datos
Crear una máquina virtual

Escritura de la aplicación de Python


El desarrollo en Azure requiere Python 3.8 o posterior. Para comprobar la versión de
Python en la estación de trabajo, en una ventana de consola, escriba el comando
python3 --version para macOS/Linux o py --version para Windows.

Use sus herramientas favoritas para escribir la aplicación de Python. Si usa Visual Studio
Code, debe probar la extensión de Python para Visual Studio Code .

La mayoría de las instrucciones de este conjunto de artículos usan un entorno virtual


porque es un procedimiento recomendado. No dude en usar cualquier entorno virtual
que desee, pero las instrucciones del artículo hacen referencia a venv .

Uso de bibliotecas de clientes


A medida que empiece a trabajar, los artículos le indican en qué bibliotecas de Python
en Azure se va a realizar la instalación y a cuáles se deben crear referencias mediante la
utilidad pip .

En algún momento, es posible que quiera instalar y crear una referencia a las bibliotecas
cliente de Azure SDK para Python sin seguir las instrucciones de un artículo. La
Información general de Azure SDK es un excelente punto de partida.

Autenticación de la aplicación en Azure


Cuando se usa Azure SDK para Python, la aplicación debe autenticarse a sí misma. La
autenticación de la aplicación depende de si está ejecutando la aplicación localmente
durante el desarrollo y las pruebas, hospedando la aplicación en sus propios servidores
o hospedando la aplicación en Azure. Para más información sobre la autenticación en
Azure, consulte Autenticación de aplicaciones de Python en servicios de Azure mediante
el SDK de Azure para Python.

También deberá configurar directivas de acceso que controlan qué identidades


(entidades de servicio y/o identificadores de aplicación) pueden acceder a esos recursos.
Las directivas de acceso se administran mediante el control de acceso basado en roles
(RBAC) de Azure; algunos servicios también tienen controles de acceso más específicos.
Como desarrollador en la nube que trabaja con Azure, asegúrese de familiarizarse con
Azure RBAC, ya que se usa prácticamente con cualquier recurso que tenga cuestiones de
seguridad.

Agregar intereses transversales


Administración de los secretos de la aplicación mediante Azure Key Vault
Obtención de visibilidad de la aplicación mediante el registro con Azure Monitor

Hosting de la aplicación de Python


Si quiere que el código de la aplicación se ejecute en Azure, dispone de varias opciones,
como se describe en Hosting de aplicaciones en Azure.

Si va a compilar aplicaciones web o API (Django, Flask, FastAPI, etc.), tenga en cuenta lo
siguiente:

Azure App Service


Azure App Service (ya en contenedor)
Azure Container Apps
Clúster de Azure Kubernetes

Si va a compilar una aplicación web, consulte Configuración del entorno local para
implementar aplicaciones web de Python en Azure.

Además, si va a compilar una API web, debe considerar la posibilidad de usar Azure API
Management.

Si va a compilar procesos back-end:

Funciones de Azure
Azure App Service
Azure Container Apps

Pasos siguientes
Desarrollo de una aplicación web de Python
Desarrollo de una aplicación de contenedor
Aprenda a usar las bibliotecas de Azure para Python

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Desarrollo de aplicaciones de IA con
Python
Artículo • 18/06/2024

Este artículo contiene una lista organizada de los mejores recursos de aprendizaje para
desarrolladores de Python que empiezan a crear aplicaciones de inteligencia artificial.
Los recursos incluyen artículos de inicio rápido populares, ejemplos de referencia,
documentación, cursos de aprendizaje, etc.

Recursos para el servicio Azure OpenAI


Azure OpenAI Service proporciona acceso a la API de REST a los modelos de lenguaje
eficaces de OpenAI. Estos modelos se pueden adaptar fácilmente a su tarea específica,
entre las que se incluyen, entre otras, la generación de contenido, el resumen, el
reconocimiento de imágenes, la búsqueda semántica y la traducción de lenguaje natural
a código. Los usuarios pueden acceder al servicio a través de las API de REST, el SDK de
Azure OpenAI para .NET o la interfaz basada en web en Azure OpenAI Studio.

SDK y bibliotecas

ノ Expandir tabla

Vínculo Descripción

SDK de OpenAI para Python La versión de código fuente de GitHub de la biblioteca de Python
de OpenAI proporciona un acceso cómodo a la API de OpenAI
desde aplicaciones escritas en el lenguaje Python.

openai Python Package Versión de PyPi de la biblioteca de Python de OpenAI.

Cambio de OpenAI a Azure Artículo de instrucciones sobre los pequeños cambios que debe
OpenAI realizar en el código para intercambiar entre OpenAI y el servicio
Azure OpenAI.

Finalizaciones de chat en Un cuaderno que contiene un ejemplo de cómo obtener


streaming finalizaciones de chat para trabajar con los puntos de conexión de
Azure. Este ejemplo se centra en las finalizaciones de chat, pero
también toca algunas otras operaciones que también están
disponibles mediante la API.

Incrustraciones Cuaderno que muestra las operaciones sobre cómo usar


incrustaciones que se pueden realizar mediante los puntos de
conexión de Azure. Este ejemplo se centra en las incrustaciones,
Vínculo Descripción

pero también toca algunas otras operaciones que también están


disponibles mediante la API.

Implementación de un Un artículo con pasos de detalle mínimos y sencillos para chatear


modelo y generación de mediante programación.
texto

OpenAI con el control de Un vistazo a la autenticación con Microsoft Entra ID.


acceso basado en rol de id.
de entrada de Microsoft

OpenAI con identidades Un artículo con escenarios de seguridad más complejos requiere el
administradas control de acceso basado en rol de Azure (RBAC de Azure). En este
documento se explica cómo autenticarse en el recurso OpenAI
mediante Microsoft Entra ID.

Más ejemplos Una compilación de recursos útiles de Azure OpenAI Service y


ejemplos de código que le ayudarán a empezar a trabajar y
acelerar el recorrido de adopción de la tecnología.

Documentación

ノ Expandir tabla

Vínculo Descripción

Documentación de Azure La página central de la documentación de Azure OpenAI Service.


OpenAI Service

Inicio rápido: Introducción Un conjunto muy rápido de instrucciones para configurar los
a la generación de texto servicios que necesita y el código debe escribir para solicitar un
mediante Azure OpenAI modelo mediante Python.
Service

Inicio rápido: Introducción Similar al inicio rápido anterior, pero proporciona un ejemplo de
al uso de GPT-35-Turbo y roles de sistema, asistente y usuario para adaptar el contenido
GPT-4 con el servicio Azure cuando se formulan determinadas preguntas.
OpenAI

Inicio rápido: chatee con Similar al primer inicio rápido, pero esta vez agrega sus propios
modelos de Azure OpenAI datos (como un PDF u otro documento).
usando sus propios datos

Inicio rápido: Introducción De forma similar a la primera guía de inicio rápido de esta lista,
al uso de asistentes de pero esta vez se indica al modelo que use el intérprete de código
Azure OpenAI (versión de Python integrado para resolver problemas matemáticos paso a
preliminar)
Vínculo Descripción

paso. Este es un punto de partida para usar sus propios asistentes


de IA a los que se accede a través de instrucciones personalizadas.

Inicio rápido: Uso de Cómo pedir mediante programación al modelo que describa el
imágenes en los chats de IA contenido de una imagen.

Inicio rápido: Generación Genere imágenes mediante programación mediante Dall-E en


de imágenes con el servicio función de un símbolo del sistema.
Azure OpenAI

Recursos para otros servicios de Azure AI


Además del servicio Azure OpenAI, hay muchos otros servicios de Azure AI que ayudan
a los desarrolladores y organizaciones a crear rápidamente aplicaciones inteligentes,
listas para el mercado y de respuesta con API y modelos personalizables precompilados
y listos para usar. Algunos ejemplos de aplicaciones son el procesamiento del lenguaje
natural para conversaciones, búsqueda, supervisión, traducción, voz, visión y toma de
decisiones.

Ejemplos

ノ Expandir tabla

Vínculo Descripción

Integración de Azure Ejemplos del SDK de Voz de Azure Cognitive Services. Vínculos a
Cognitive Service para ejemplos de reconocimiento de voz, traducción, síntesis de voz, etc.
voz en las aplicaciones
con ejemplos del SDK de
Voz

SDK de Documento de Documento de inteligencia de Azure AI (anteriormente Form


inteligencia de Azure AI Recognizer) es un servicio en la nube que usa el aprendizaje
automático para analizar texto y datos estructurados de documentos.
El kit de desarrollo de software (SDK) de Documento de inteligencia
es un conjunto de bibliotecas y herramientas que le permiten integrar
fácilmente en sus aplicaciones los modelos y las funcionalidades de
Documento de inteligencia en sus aplicaciones.

Extracción de datos Ejemplos de la biblioteca cliente [Link].


estructurados de
formularios, recibos,
facturas y tarjetas
Vínculo Descripción

mediante Form
Recognizer en Python

Extracción, clasificación y Biblioteca cliente para Text Analytics. Esto forma parte del servicio
comprensión del texto Lenguaje de Azure AI, que proporciona características de
dentro de documentos procesamiento del lenguaje natural (NLP) para reconocer y analizar
mediante Text Analytics texto.
en Python

Traducción de Artículo de inicio rápido que usa traducción de documentos para


documentos en Python traducir un documento de origen a un idioma de destino al tiempo
que conserva la estructura y el formato de texto.

Respuesta a preguntas Un artículo de inicio rápido con pasos para obtener una respuesta (y
en Python una puntuación de confianza) a partir de un cuerpo de texto que
envíe junto con su pregunta.

Conversational Language La biblioteca cliente de reconocimiento del lenguaje conversacional


Understanding en Python (CLU), un servicio de inteligencia artificial conversacional basado en la
nube, que puede extraer intenciones y entidades de conversaciones y
actuar como un orquestador para seleccionar el mejor candidato para
analizar conversaciones y obtener la mejor respuesta de aplicaciones
como Qna, Luis y Conversation App.

Análisis de imágenes Código de ejemplo y documentos de configuración para el SDK de


análisis de imágenes de Microsoft Azure AI

SDK de seguridad de Detecta contenido generado por el usuario y generado por ia


contenido de Azure AI perjudicial en aplicaciones y servicios. Content Safety incluye varias
para Python API de texto e imagen que permiten detectar todo aquel material que
sea perjudicial.

Documentación

ノ Expandir tabla

Servicio de IA Descripción Referencia de la Inicio


API rápido

Content Safety Un servicio de IA que detecta contenido no Referencia de API Guía de


deseado. Content Safety inicio
rápido

Documento de Convertir los documentos en soluciones Referencia de API Guía de


inteligencia inteligentes controladas por datos. de Documento de inicio
inteligencia rápido
Servicio de IA Descripción Referencia de la Inicio
API rápido

Lenguaje Cree aplicaciones con funcionalidades de Referencia de Text Guía de


comprensión de lenguaje natural líderes del Analytics API inicio
sector. rápido

Buscar Lleve la búsqueda en la nube con tecnología Referencia de API Guía de


de inteligencia artificial a sus aplicaciones. de búsqueda inicio
rápido

Voz Conversión de voz en texto, texto a voz, Referencia de API Guía de


traducción y reconocimiento del hablante. de voz inicio
rápido

Traductor Use servicios de traducción con tecnología Referencia de API Guía de


de inteligencia artificial para traducir más de de traducción inicio
100 idiomas y dialectos en peligro o en rápido
peligro de extinción.

Visión Análisis de contenido en imágenes y vídeos. Referencia de Guía de


Image Analysis API inicio
rápido

Cursos
ノ Expandir tabla

Vínculo Descripción

Inteligencia artificial Conozca los aspectos básicos de la creación de aplicaciones de


generativa para inteligencia artificial generativa con nuestro curso completo de 18
principiantes lecciones por parte de los defensores de Microsoft Cloud.

Comenzar con Servicios Servicios de Azure AI es una colección de servicios que son bloques
de Azure AI de construcción de funcionalidad de IA que puede integrar en sus
aplicaciones. En esta ruta de aprendizaje, aprenderá a aprovisionar,
proteger, supervisar e implementar recursos de Servicios de Azure AI
y usarlos para crear soluciones inteligentes.

Aspectos básicos de Ruta de aprendizaje para ayudarle a comprender cómo los modelos
Microsoft Azure AI: IA de lenguaje de gran tamaño forman la base de la inteligencia artificial
generativa generativa: cómo Azure OpenAI Service proporciona acceso a la
última tecnología de IA generativa, cómo se pueden ajustar las
solicitudes y respuestas y cómo los principios de inteligencia artificial
responsables de Microsoft impulsan los avances éticos de la
inteligencia artificial.
Vínculo Descripción

Desarrollo de soluciones Azure OpenAI Service proporciona acceso a los potentes y grandes
de inteligencia artificial modelos de lenguaje de OpenAI, como los modelos ChatGPT, GPT,
generativa con Azure Codex y Embeddings. Esta ruta de aprendizaje enseña a los
OpenAI Service desarrolladores a generar código, imágenes y texto mediante el SDK
de Azure OpenAI y otros servicios de Azure.

Compilación de En esta ruta de aprendizaje se explora cómo las integraciones de


aplicaciones de IA con Azure AI y Azure Machine Learning Services proporcionadas por la
Azure Database for extensión de Azure AI para el Servidor flexible de Azure Database for
PostgreSQL PostgreSQL pueden permitirle crear aplicaciones con tecnología de
inteligencia artificial.

Plantillas de aplicación de IA
Las plantillas de aplicación de IA proporcionan implementaciones de referencia bien
mantenidas y fáciles de implementar que proporcionan un punto de partida de alta
calidad para las aplicaciones de INTELIGENCIA ARTIFICIAL.

Hay dos categorías de plantillas de aplicación de IA, bloques de creación y soluciones


de un extremo a otro. Los bloques de creación son ejemplos a menor escala que se
centran en escenarios y tareas específicos. Las soluciones de un extremo a otro son
ejemplos de referencia completos, como la documentación, el código fuente y la
implementación, que le permiten tomar y ampliar para sus propios fines.

Para revisar una lista de plantillas clave disponibles para cada lenguaje de programación,
consulte Plantillas de aplicación de IA. Para examinar todas las plantillas disponibles,
consulte las plantillas de aplicación de IA en la galería de la CLI para desarrolladores
de Azure.

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Introducción al chat con su propio
ejemplo de datos para Python
Artículo • 15/06/2024

En este artículo se muestra cómo implementar y ejecutar el ejemplo chat con sus
propios datos para Python . En este ejemplo se implementa una aplicación de chat
mediante Python, Azure OpenAI Service y recuperación de generación aumentada (RAG)
en Azure AI Search para obtener respuestas sobre las ventajas de los empleados en una
empresa ficticia. La aplicación se inicializa con archivos PDF, incluido el manual de
empleados, un documento de beneficios y una lista de roles y expectativas de la
empresa.

Vídeo de demostración

Siguiendo las instrucciones de este artículo, podrá:

Implemente una aplicación de chat en Azure.


Obtenga respuestas sobre los beneficios para empleados.
Cambie la configuración para modificar el comportamiento de las respuestas.

Una vez completado este procedimiento, puede empezar a modificar el nuevo proyecto
con el código personalizado.

Este artículo forma parte de una colección de artículos que muestran cómo crear una
aplicación de chat mediante Azure OpenAI Service y Azure AI Search.

Otros artículos de la colección son:

.NET
Java
JavaScript
Front-end de JavaScript + back-end de Python

7 Nota

En este artículo se usan una o varias plantillas de aplicaciones de IA como base


para los ejemplos e instrucciones del artículo. Las plantillas de aplicaciones de IA le
proporcionan implementaciones de referencia bien mantenidas y fáciles de
implementar que le ayudan a garantizar un punto inicial de alta calidad para sus
aplicaciones de IA.
Introducción a la arquitectura
En el siguiente diagrama se muestra una arquitectura sencilla de la aplicación de chat:

Entre los componentes clave de la arquitectura se incluyen:

Una aplicación web para hospedar la experiencia de chat interactivo.


Un recurso de Azure AI Search para obtener respuestas de sus propios datos.
Un Azure OpenAI Service para proporcionar:
Palabras clave para mejorar la búsqueda sobre sus propios datos.
Respuestas del modelo OpenAI.
Incrustaciones del modelo ada

Costos
La mayoría de los recursos de esta arquitectura utilizan un nivel de precios básico o de
consumo. La tarifa del consumo se basa en el uso, lo que significa que solo paga por lo
que utiliza. Para completar este artículo, habrá que pagar una tasa, pero será mínima.
Cuando haya terminado con el artículo, puede eliminar los recursos para dejar de
incurrir en cargos.

Obtenga más información sobre el costo en el repositorio de ejemplo.

Requisitos previos
Hay disponible un entorno contenedor de desarrollo con todas las dependencias
necesarias para completar este artículo. Puede ejecutar el contenedor de desarrollo en
GitHub Codespaces (en un navegador) o localmente utilizando Visual Studio Code.
Para usar este artículo, necesita los siguientes requisitos previos:

Codespaces (recomendado)

Una suscripción a Azure: cree una cuenta gratuita .


Permisos de la cuenta Azure: Su cuenta Azure debe tener permisos
[Link]/roleAssignments/write, como Administrador de
acceso de usuario o Propietario.
Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.
Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar
acceso a Azure OpenAI, rellene el formulario en [Link] .
Si tiene algún problema, abra una incidencia en este repositorio para ponerse
en contacto con nosotros.
GitHub

Entorno de desarrollo abierto


Comience ahora con un entorno de desarrollo que tenga todas las dependencias
instaladas para completar este artículo.

Codespaces de GitHub (recomendado)

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por


GitHub con Visual Studio Code para la web como interfaz de usuario. Para
obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de
modo que tenga las herramientas y dependencias de desarrollador correctas
preinstaladas para completar este artículo.

) Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de


60 horas gratis cada mes con 2 instancias principales. Para obtener más
información, consulte Almacenamiento y horas de núcleo incluidas
mensualmente en GitHub Codespaces .

1. Inicie el proceso para crear una nueva instancia de GitHub Codespace en la


rama main del repositorio de GitHub Azure-Samples/azure-search-openai-
demo .
2. Haga clic con el botón derecho del ratón en el botón siguiente y seleccione
Abrir vínculo en ventanas nuevas para disponer al mismo tiempo del entorno
de desarrollo y de la documentación.

3. En la página Crear codespace, revise las opciones de configuración de


codespace y, después, seleccione Crear nuevo codespace

4. Espere a que se inicie Codespace. Este proceso de startup puede tardar unos
minutos.

5. En el terminal de la parte inferior de la pantalla, inicie sesión en Azure con


Azure Developer CLI.

Bash

azd auth login

6. Copie el código del terminal y péguelo en un navegador. Siga las


instrucciones para autenticarse con su cuenta Azure.

7. Las tareas restantes de este artículo tienen lugar en el contexto de este


contenedor de desarrollo.
Implementación y ejecución
El repositorio de ejemplo contiene todo el código y los archivos de configuración
necesarios para implementar una aplicación de chat en Azure. Los siguientes pasos le
guiarán a través del proceso de implementación de la muestra en Azure.

Implementación de la aplicación de chat en Azure

) Importante

Los recursos Azure creados en esta sección incurren en costes inmediatos,


principalmente del recurso Azure AI Search. Estos recursos pueden acumular costes
incluso si interrumpe el comando antes de que se ejecute por completo.

1. Ejecute el siguiente comando de la Azure Developer CLI para aprovisionar los


recursos de Azure e implementar el código fuente:

Bash

azd up

2. Si se le pide que escriba un nombre de entorno, manténgalo corto y en


minúsculas. Por ejemplo, myenv . Se usa como parte del nombre del grupo de
recursos.

3. Cuando se le solicite, seleccione una suscripción en la que crear los recursos.

4. Cuando se le pida que seleccione una ubicación la primera vez, seleccione una
ubicación cercana. Esta ubicación se utiliza para la mayoría de los recursos,
incluido el hospedaje.

5. Si se le pide una ubicación para el modelo openAI o para el recurso de Document


Intelligence, seleccione la ubicación más cercana. Si está disponible la misma
ubicación que la primera, selecciónela.

6. Espere 5 o 10 minutos después de implementar la aplicación antes de continuar.

7. Una vez que la aplicación se ha implementado correctamente, aparece una URL en


el terminal.
8. Seleccione esa URL etiquetada (✓) Done: Deploying service webapp para abrir la
aplicación de chat en un navegador.

Utilice la aplicación de chat para obtener respuestas de


archivos PDF
La aplicación de chat está precargada con información sobre los beneficios de los
empleados a partir de archivos PDF . Puede utilizar la aplicación de chat para hacer
preguntas sobre los beneficios. Los siguientes pasos le guiarán a través del proceso de
uso de la aplicación de chat. Las respuestas pueden variar a medida que se actualizan
los modelos subyacentes.

1. En el explorador, seleccione o escriba ¿Qué ocurre en una revisión de rendimiento?


en el cuadro de texto del chat.

2. De la respuesta, seleccione una cita.

3. En el panel derecho, use las pestañas para comprender cómo se generó la


respuesta.

ノ Expandir tabla

Pestaña Descripción

Proceso de Este es un script de las interacciones en el chat. Puede ver la pregunta


ideas del sistema ( content ) y su pregunta de usuario ( content ).

Contenido Esto incluye la información para responder a su pregunta y el material de


adicional origen. El número de citas del material fuente se indica en los
Configuración de desarrollador. El valor predeterminado es 3.
Pestaña Descripción

Referencia Esto muestra la página original que contiene la cita.


bibliográfica

4. Cuando haya terminado, vuelva a seleccionar la pestaña seleccionada para cerrar el


panel.

Utilice la configuración de la aplicación de chat para


cambiar el comportamiento de las respuestas
La inteligencia del chat viene determinada por el modelo OpenAI y los ajustes que se
utilizan para interactuar con el modelo.
ノ Expandir tabla

Configuración Descripción

Anular plantilla de Invalida el mensaje usado para generar la respuesta en función de la


solicitud pregunta y los resultados de búsqueda.

Temperatura Establece la temperatura de la solicitud en el LLM que genera la


respuesta. Las temperaturas más altas dan lugar a respuestas más
creativas, pero pueden ser menos fundamentadas.
Configuración Descripción

Puntuación mínima Establece una puntuación mínima para los resultados de búsqueda que
de búsqueda regresan de la búsqueda de Azure AI. El intervalo de puntuación depende
de si se usa híbrido (valor predeterminado), solo vectores o solo texto.

Puntuación mínima Establece una puntuación mínima para los resultados de búsqueda que
del reranker vuelven del reranker semántico. La puntuación siempre oscila entre 0 y 4.
Cuanto mayor sea la puntuación, más relevante semánticamente el
resultado es para la pregunta.

Recuperar esta Establece el número de resultados de búsqueda que se van a recuperar


cantidad de de la búsqueda de Azure AI. Más resultados pueden aumentar la
resultados probabilidad de encontrar la respuesta correcta, pero puede provocar
que el modelo se pierda en el medio. Puede ver estos orígenes devueltos
en las pestañas Proceso de pensamiento y Contenido auxiliar de la cita.

Excluir categoría Especifica una categoría que se va a excluir de los resultados de la


búsqueda. No se usan categorías en el conjunto de datos
predeterminado.

Utilizar un Habilita el clasificador semántico de Azure AI Search, un modelo que


clasificador vuelve a clasificar los resultados de búsqueda en función de la similitud
semántico para la semántica con la consulta del usuario.
recuperación

Uso de subtítulos Envía subtítulos semánticos al LLM en lugar del resultado de búsqueda
semánticos completo. Un título semántico se extrae de un resultado de búsqueda
durante el proceso de clasificación semántica.

Sugerir preguntas de Pide al LLM que sugiera preguntas de seguimiento basadas en la consulta
seguimiento del usuario.

Modo de Establece el modo de recuperación de la consulta de Azure AI Search.


recuperación Vectores + Texto (híbrido) usa una combinación de búsqueda de
vectores y búsqueda de texto completo, Vectores usa solo búsqueda
vectorial y Text solo usa búsqueda de texto completo. El híbrido suele ser
óptimo.

Respuestas de Transmite continuamente la respuesta a la interfaz de usuario de chat a


finalización de chat medida que se genera.
en secuencias

Los siguientes pasos le guiarán a través del proceso de cambio de la configuración.

1. En el explorador, seleccione la pestaña Configuración del desarrollador.

2. Active la casilla Sugerir preguntas de seguimiento y vuelva a formular la misma


pregunta.
What happens in a performance review?

El chat devolvió preguntas de seguimiento sugeridas, como las siguientes:

1. What is the frequency of performance reviews?


2. How can employees prepare for a performance review?
3. Can employees dispute the feedback received during the performance
review?

3. En la pestaña Configuración, anule la selección de Utilizar el clasificador


semántico para la recuperación.

4. ¿Vuelve a hacer la misma pregunta?

What happens in a performance review?

5. ¿Cuál es la diferencia entre las respuestas?

Con el clasificador semántico: durante una revisión de rendimiento en Contoso


Electronics, los empleados tendrán la oportunidad de discutir sus éxitos y desafíos
en el lugar de trabajo (1). La revisión proporcionará comentarios positivos y
constructivos para ayudar a los empleados a desarrollar y crecer en sus roles (1). El
empleado recibirá un resumen escrito de la revisión de rendimiento, que incluirá
una clasificación de su rendimiento, comentarios y objetivos para el próximo año
(1). La revisión del rendimiento es un diálogo bidireccional entre los
administradores y los empleados (1).

Sin el clasificador semántico: durante una revisión de rendimiento en Contoso


Electronics, los empleados tienen la oportunidad de discutir sus éxitos y desafíos
en el lugar de trabajo. Se proporcionan comentarios positivos y constructivos para
ayudar a los empleados a desarrollar y crecer en sus roles. Se proporciona un
resumen escrito de la revisión de rendimiento, incluida una clasificación del
rendimiento, los comentarios y los objetivos del próximo año. La revisión es un
diálogo bidireccional entre los gerentes y los empleados (1).

Limpieza de recursos
Limpieza de los recursos de Azure
Los recursos Azure creados en este artículo se facturan a su suscripción Azure. Si no
espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más
gastos.

Ejecute el siguiente comando de la Azure Developer CLI para eliminar los recursos de
Azure y eliminar el código de origen:

Bash

azd down --purge --force

Los modificadores proporcionan:

purge : los recursos eliminados se purgan inmediatamente. Esto le permite

reutilizar el TPM de Azure OpenAI.


force : la eliminación se produce de forma silenciosa, sin necesidad de

consentimiento del usuario.

Limpiar GitHub Codespaces

GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar


la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

) Importante

Para obtener más información sobre los derechos de la cuenta de GitHub,


consulte Almacenamiento y horas de núcleo incluidas mensualmente en
GitHub Codespaces .

1. Inicie sesión en el panel de GitHub Codespaces


([Link] ).

2. Busque los espacios de código que se ejecutan actualmente procedentes del


repositorio de GitHub Azure-Samples/azure-search-openai-demo .
3. Abra el menú contextual del codespace y, a continuación, seleccione Eliminar.

Obtener ayuda
Este repositorio de muestras ofrece información para la resolución de problemas .

Si su problema no se resuelve, regístrelo en el apartado de problemas del repositorio.

Pasos siguientes
Obtener el código fuente del ejemplo usado en este artículo
Crear una aplicación de chat con la arquitectura de soluciones de mejores prácticas
de Azure OpenAI
Control de acceso en aplicaciones de IA generativa con Búsqueda de Azure AI
Cree una solución OpenAI preparada para la empresa con Azure API Management
Superar el vector de búsqueda con capacidades híbridas de recuperación y
clasificación

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Introducción a la seguridad de
documentos de chat para Python
Artículo • 15/06/2024

Al compilar una aplicación de chat mediante el patrón RAG con sus propios datos,
asegúrese de que cada usuario recibe una respuesta en función de sus permisos. Siga el
proceso de este artículo para agregar el control de acceso de documentos a la
aplicación de chat.

Un usuario autorizado debe tener acceso a las respuestas contenidas en los


documentos de la aplicación de chat.

Un usuario no autorizado no debe tener acceso a las respuestas de documentos


protegidos que no tienen autorización para ver.

7 Nota

En este artículo se usan una o varias plantillas de aplicaciones de IA como base


para los ejemplos e instrucciones del artículo. Las plantillas de aplicaciones de IA le
proporcionan implementaciones de referencia bien mantenidas y fáciles de
implementar que le ayudan a garantizar un punto inicial de alta calidad para sus
aplicaciones de IA.

Introducción a la arquitectura
Sin la característica de seguridad de documentos, la aplicación de chat empresarial tiene
una arquitectura sencilla mediante Azure AI Search y Azure OpenAI. Una respuesta se
determina a partir de consultas a Azure AI Search donde se almacenan los documentos,
en combinación con una respuesta de un modelo GPT de Azure OpenAI. No se usa
ninguna autenticación de usuario en este flujo sencillo.

Para agregar seguridad a los documentos, debe actualizar la aplicación de chat


empresarial:

Agregue la autenticación de cliente a la aplicación de chat con Microsoft Entra.


Agregue lógica del lado servidor para rellenar un índice de búsqueda con acceso
de usuario y grupo.
Azure AI Search no proporciona permisos nativos de nivel de documento y no puede
variar los resultados de búsqueda desde dentro de un índice por permisos de usuario.
En su lugar, la aplicación puede usar filtros de búsqueda para asegurarse de que un
documento es accesible para un usuario específico o para un grupo específico. Dentro
del índice de búsqueda, cada documento debe tener un campo filtrable que almacene
información de identidad de usuario o grupo.

Dado que la autorización no está contenida de forma nativa en Azure AI Search, debe
agregar un campo para contener información de usuario o grupo y, a continuación ,
filtrar los documentos que no coincidan. Para implementar esta técnica, debe:
Cree un campo de control de acceso a documentos en el índice dedicado a
almacenar los detalles de los usuarios o grupos con acceso a documentos.
Rellene el campo de control de acceso del documento con los detalles de usuario
o grupo pertinentes.
Actualice este campo de control de acceso siempre que haya cambios en los
permisos de acceso de usuario o grupo.
Si las actualizaciones de índice se programan con un indexador, los cambios se
seleccionan en la siguiente ejecución del indexador. Si no usa un indexador, debe
volver a indexar manualmente.

En este artículo, el proceso de protección de documentos en Azure AI Search es posible


con scripts de ejemplo , que se ejecutarían como administrador de búsqueda. Los scripts
asocian un único documento a una sola identidad de usuario. Puede tomar estos
scripts y aplicar sus propios requisitos de seguridad y producción para escalar a sus
necesidades.

Determinación de la configuración de
seguridad
La solución proporciona variables de entorno booleanas para activar las características
necesarias para la seguridad del documento en este ejemplo.

ノ Expandir tabla

Parámetro Fin

AZURE_USE_AUTHENTICATION Cuando se establece true en , habilita el inicio de sesión


de usuario en la aplicación de chat y la autenticación de
App Service. Habilita Use oid security filter en la
configuración del desarrollador de la aplicación de chat.

AZURE_ENFORCE_ACCESS_CONTROL Cuando se establece en true , requiere autenticación


para cualquier acceso a documentos. La configuración
del desarrollador para la seguridad de grupo y oid se
activará y deshabilitará para que no se puedan
deshabilitar desde la interfaz de usuario.

AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS Cuando se establece true en , esta opción permite a los


usuarios autenticados buscar en documentos que no
tienen asignados controles de acceso, incluso cuando se
requiere el control de acceso. Este parámetro solo se
debe usar cuando AZURE_ENFORCE_ACCESS_CONTROL está
habilitado.
Parámetro Fin

AZURE_ENABLE_UNAUTHENTICATED_ACCESS Cuando se establece true en , esta opción permite a los


usuarios no autenticados usar la aplicación, incluso
cuando se aplica el control de acceso. Este parámetro
solo se debe usar cuando AZURE_ENFORCE_ACCESS_CONTROL
está habilitado.

Use las secciones siguientes para comprender los perfiles de seguridad admitidos en
este ejemplo. En este artículo se configura el perfil de empresa.

Empresa: cuenta requerida + filtro de documento


Cada usuario del sitio debe iniciar sesión y el sitio contiene contenido que es público
para todos los usuarios. El filtro de seguridad de nivel de documento se aplica a todas
las solicitudes.

Variables de entorno:

AZURE_USE_AUTHENTICATION=true
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
AZURE_ENFORCE_ACCESS_CONTROL=true

Uso mixto: cuenta opcional + filtro de documento


Cada usuario del sitio puede iniciar sesión y el sitio contiene contenido que es público
para todos los usuarios. El filtro de seguridad de nivel de documento se aplica a todas
las solicitudes.

Variables de entorno:

AZURE_USE_AUTHENTICATION=true
AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS=true
AZURE_ENFORCE_ACCESS_CONTROL=true
AZURE_ENABLE_UNAUTHENTICATED_ACCESS=true

Requisitos previos
Un entorno de contenedor de desarrollo está disponible con todas las
dependencias necesarias para completar este artículo. Puede ejecutar el contenedor
de desarrollo en GitHub Codespaces (en un navegador) o localmente utilizando Visual
Studio Code.
Para usar este artículo, necesita los siguientes requisitos previos:

Suscripción de Azure. Crear una cuenta gratuita


Permisos de cuenta de Azure: la cuenta de Azure debe tener
Permiso para administrar aplicaciones en el identificador de Microsoft Entra.
Permisos [Link]/roleAssignments/write, como administrador
de acceso de usuario o propietario.
Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.
Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso
a Azure OpenAI, rellene el formulario en [Link] .

Necesita más requisitos previos en función de su entorno de desarrollo preferido.

Codespaces (recomendado)

Cuenta de GitHub

Entorno de desarrollo abierto


Comience ahora con un entorno de desarrollo que tenga todas las dependencias
instaladas para completar este artículo.

Codespaces de GitHub (recomendado)

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por


GitHub con Visual Studio Code para la web como interfaz de usuario. Para
obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de
modo que tenga las herramientas y dependencias de desarrollador correctas
preinstaladas para completar este artículo.

) Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de


60 horas gratis cada mes con 2 instancias principales. Para obtener más
información, consulte Almacenamiento y horas de núcleo incluidas
mensualmente en GitHub Codespaces .

1. Inicie el proceso para crear una nueva instancia de GitHub Codespace en la


rama main del repositorio de GitHub Azure-Samples/azure-search-openai-
demo .
2. Haga clic con el botón derecho del ratón en el botón siguiente y seleccione
Abrir vínculo en ventanas nuevas para disponer al mismo tiempo del entorno
de desarrollo y de la documentación.

3. En la página Crear codespace, revise las opciones de configuración de


codespace y, después, seleccione Crear nuevo codespace

4. Espere a que se inicie Codespace. Este proceso de startup puede tardar unos
minutos.

5. En el terminal de la parte inferior de la pantalla, inicie sesión en Azure con


Azure Developer CLI.

Bash

azd auth login

6. Complete el proceso de autenticación.

7. Las tareas restantes de este artículo tienen lugar en el contexto de este


contenedor de desarrollo.
Obtención de información necesaria con la CLI
de Azure
Obtenga el identificador de suscripción y el identificador de inquilino con el siguiente
comando de la CLI de Azure. Copie el valor que se va a usar como . AZURE_TENANT_ID

Azure CLI

az account list --query "[].{subscription_id:id, name:name,


tenantId:tenantId}" -o table

Si recibe un error sobre la directiva de acceso condicional del inquilino, necesita un


segundo inquilino sin una directiva de acceso condicional.

El primer inquilino, asociado a su cuenta de usuario, se usa para la variable de


AZURE_TENANT_ID entorno.

El segundo inquilino, sin acceso condicional, se usa para que la variable de


AZURE_AUTH_TENANT_ID entorno acceda a Microsoft Graph. Para los inquilinos con

una directiva de acceso condicional, busque el identificador de un segundo


inquilino sin una directiva de acceso condicional o cree un nuevo inquilino.

Establecimiento de variables de entorno


1. Ejecute los comandos siguientes para configurar la aplicación para el perfil
enterprise .

Consola

azd env set AZURE_USE_AUTHENTICATION true


azd env set AZURE_ENABLE_GLOBAL_DOCUMENTS_ACCESS true
azd env set AZURE_ENFORCE_ACCESS_CONTROL true

2. Ejecute el siguiente comando para establecer el inquilino, que autoriza al usuario a


iniciar sesión en el entorno de la aplicación hospedada. Reemplace por
<YOUR_TENANT_ID> el identificador de inquilino.

Consola

azd env set AZURE_TENANT_ID <YOUR_TENANT_ID>

7 Nota
Si tiene una directiva de acceso condicional en el inquilino de usuario, debe
especificar un inquilino de autenticación.

Implementación de la aplicación de chat en


Azure
La implementación incluye la creación de los recursos de Azure, la carga de los
documentos, la creación de las aplicaciones de identidad de Microsoft Entra (cliente y
servidor) y la activación de la identidad para el recurso de hospedaje.

1. Ejecute el siguiente comando de la Azure Developer CLI para aprovisionar los


recursos de Azure e implementar el código fuente:

Bash

azd up

2. Use la tabla siguiente para responder a las solicitudes de implementación de AZD:

ノ Expandir tabla

Prompt Respuesta

Nombre del entorno Use un nombre corto con información de


identificación como el alias y la
aplicación: tjones-secure-chat .

Subscription Seleccione una suscripción en la que


crear los recursos.

Ubicación de los recursos de Azure Seleccione una ubicación cerca de usted.

Ubicación de Seleccione una ubicación cerca de usted.


documentIntelligentResourceGroupLocation

Ubicación de openAIResourceGroupLocation Seleccione una ubicación cerca de usted.

Espere 5 o 10 minutos después de implementar la aplicación para permitir que la


aplicación se inicie.

3. Una vez que la aplicación se ha implementado correctamente, aparece una URL en


el terminal.
4. Seleccione esa URL etiquetada (✓) Done: Deploying service webapp para abrir la
aplicación de chat en un navegador.

5. Acepte el elemento emergente de autenticación de la aplicación.

6. Cuando se muestre la aplicación de chat, observe en la esquina superior derecha


que el usuario ha iniciado sesión.

7. Abra Configuración del desarrollador y observe que estas opciones están


seleccionadas y atenuadas (deshabilitadas para cambiar).

Uso del filtro de seguridad oid


Uso del filtro de seguridad de grupos

8. Seleccione la tarjeta con What does a product manager do? .

9. Recibe una respuesta como: The provided sources do not contain specific
information about the role of a Product Manager at Contoso Electronics.

Abrir el acceso a un documento para un


usuario
Active los permisos del documento exacto para que pueda obtener la respuesta. Estos
requieren varios fragmentos de información:
Azure Storage
Nombre de cuenta
Nombre del contenedor
Dirección URL de blob/documento para role_library.pdf
Identificador del usuario en Microsoft Entra ID

Una vez que se conoce esta información, actualice el campo de índice oids de Azure AI
Search para el role_library.pdf documento.

Obtención de la dirección URL de un documento en el


almacenamiento
1. En la .azure carpeta de la raíz del proyecto, busque el directorio del entorno y
abra el .env archivo con ese directorio.

2. Busque la AZURE_STORAGE_ACCOUNT entrada y copie su valor.

3. Use los siguientes comandos de la CLI de Azure para obtener la dirección URL del
blob role_library.pdf en el contenedor de contenido .

Azure CLI

az storage blob url \


--account-name <REPLACE_WITH_AZURE_STORAGE_ACCOUNT \
--container-name 'content' \
--name 'role_library.pdf'

ノ Expandir tabla

Parámetro Fin

--account-name Nombre de la cuenta de Azure Storage

--container-name El nombre del contenedor de este ejemplo es content

--name El nombre del blob de este paso es role_library.pdf

4. Copie la dirección URL del blob para usarla más adelante.

Obtención del identificador de usuario


1. En la aplicación chap, seleccione Configuración de desarrollador.
2. En la sección Notificaciones de token de identificador, copie el objectidentifier .
Esto se conoce en la sección siguiente como USER_OBJECT_ID .

Proporcionar acceso de usuario a un documento en Azure


Search
1. Use el siguiente script para cambiar el oids campo en Azure AI Search para
role_library.pdf para que tenga acceso a él.

Bash

./scripts/[Link] \
-v \
--acl-type oids \
--acl-action add \
--acl <REPLACE_WITH_YOUR_USER_OBJECT_ID> \
--url <REPLACE_WITH_YOUR_DOCUMENT_URL>

ノ Expandir tabla

Parámetro Fin

-v Salida detallada.

--acl-type Identificadores de objeto de grupo o usuario (OID): oids

--acl- Agregue a un campo Índice de búsqueda. Otras opciones incluyen remove ,


action remove_all , list .

--Acl Grupo o usuario USER_OBJECT_ID

--URL Ubicación del archivo en Azure Storage, como


[Link] . No
rodear la dirección URL con comillas en el comando de la CLI.

2. La salida de la consola de este comando es similar a la siguiente:

console.

Loading azd .env file from current environment...


Creating Python virtual environment "app/backend/.venv"...
Installing dependencies from "[Link]" into virtual
environment (in quiet mode)...
Running [Link]. Arguments to script: -v --acl-type oids --acl-
action add --acl 00000000-0000-0000-0000-000000000000 --url
[Link]
Found 58 search documents with storageUrl
[Link]
Adding acl 00000000-0000-0000-0000-000000000000 to 58 search documents

3. Opcionalmente, use el siguiente comando para comprobar que el permiso aparece


en la lista del archivo en Azure AI Search.

Bash

./scripts/[Link] \
-v \
--acl-type oids \
--acl-action list \
--acl <REPLACE_WITH_YOUR_USER_OBJECT_ID> \
--url <REPLACE_WITH_YOUR_DOCUMENT_URL>

ノ Expandir tabla

Parámetro Fin

-v Salida detallada.

--acl-type Grupo o usuario (oids): oids

--acl- Enumerar un campo oids de índice de búsqueda . Otras opciones incluyen


action remove , remove_all , list .

--Acl Grupo o usuario USER_OBJECT_ID

--URL Ubicación del archivo en Azure Storage, como


[Link] . No
rodear la dirección URL con comillas en el comando de la CLI.

4. La salida de la consola de este comando es similar a la siguiente:

console.

Loading azd .env file from current environment...


Creating Python virtual environment "app/backend/.venv"...
Installing dependencies from "[Link]" into virtual
environment (in quiet mode)...
Running [Link]. Arguments to script: -v --acl-type oids --acl-
action view --acl 00000000-0000-0000-0000-000000000000 --url
[Link]
Found 58 search documents with storageUrl
[Link]
[00000000-0000-0000-0000-000000000000]
La matriz al final de la salida incluye el USER_OBJECT_ID y se usa para determinar si
el documento se usa en la respuesta con Azure OpenAI.

Comprobación de que Azure AI Search contiene el


USER_OBJECT_ID
1. Abra Azure Portal y busque AI Search .

2. Seleccione el recurso de búsqueda en la lista.

3. Seleccione Administración de búsquedas:> índices.

4. Seleccione gptkbindex.

5. Seleccione Ver:> vista JSON.

6. Reemplace el json por el siguiente JSON.

JSON

{
"search": "*",
"select": "sourcefile, oids",
"filter": "oids/any()"
}

Esto busca en todos los documentos donde el oids campo tiene cualquier valor y
devuelve los sourcefile campos , y oids .

7. role_library.pdf Si no tiene el oid, vuelva a la sección Proporcionar acceso de


usuario a un documento en Azure Search y complete los pasos.

Comprobación del acceso de usuario al documento


Si completó los pasos pero no vio la respuesta correcta, compruebe que la
USER_OBJECT_ID se ha establecido correctamente en Azure AI Search para esa
role_library.pdf .

1. Vuelva a la aplicación de chat. Es posible que tenga que volver a iniciar sesión.

2. Escriba la misma consulta para que el role_library contenido se use en la


respuesta de Azure OpenAI: What does a product manager do? .
3. Vea el resultado, que ahora incluye la respuesta adecuada del documento de la
biblioteca de roles.

Limpieza de recursos

Limpieza de los recursos de Azure


Los recursos Azure creados en este artículo se facturan a su suscripción Azure. Si no
espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más
gastos.

Ejecute el siguiente comando de la Azure Developer CLI para eliminar los recursos de
Azure y eliminar el código de origen:

Bash

azd down --purge

Limpiar GitHub Codespaces

GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar


la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

) Importante
Para obtener más información sobre los derechos de la cuenta de GitHub,
consulte Almacenamiento y horas de núcleo incluidas mensualmente en
GitHub Codespaces .

1. Inicie sesión en el panel de GitHub Codespaces


([Link] ).

2. Busque los espacios de código que se ejecutan actualmente procedentes del


repositorio de GitHub Azure-Samples/azure-search-openai-demo .

3. Abra el menú contextual del codespace y, a continuación, seleccione Eliminar.


Obtener ayuda
Este repositorio de muestras ofrece información para la resolución de problemas .

Solución de problemas
En esta sección se ofrece solución de problemas específicos de este artículo.

Proporcionar inquilino de autenticación


Cuando la autenticación se encuentra en un inquilino independiente de la aplicación de
hospedaje, debe establecer ese inquilino de autenticación con el siguiente proceso.

1. Ejecute el siguiente comando para configurar el ejemplo para usar un segundo


inquilino para el inquilino de autenticación.

Consola

azd env set AZURE_AUTH_TENANT_ID <REPLACE-WITH-YOUR-TENANT-ID>

ノ Expandir tabla

Parámetro Fin

AZURE_AUTH_TENANT_ID Si AZURE_AUTH_TENANT_ID se establece, es el inquilino que hospeda


la aplicación.

2. Vuelva a implementar la solución con el siguiente comando.

Consola

azd up

Pasos siguientes
Crear una aplicación de chat con la arquitectura de soluciones de mejores prácticas
de Azure OpenAI
Control de acceso en aplicaciones de IA generativa con Búsqueda de Azure AI
Cree una solución OpenAI preparada para la empresa con Azure API Management
Superar el vector de búsqueda con capacidades híbridas de recuperación y
clasificación
Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Introducción a los puntos de conexión
privados de chat para Python
Artículo • 26/07/2024

En este artículo se muestra cómo implementar y ejecutar el Ejemplo de aplicación de


chat empresarial para Python al que pueden acceder los puntos de conexión privados.

En este ejemplo se implementa una aplicación de chat mediante Python, Azure OpenAI
Service y Generación aumentada de recuperación (RAG) en Búsqueda de Azure AI para
obtener respuestas sobre los beneficios de los empleados en una empresa ficticia. La
aplicación se ha inicializado con archivos PDF que incluyen el manual del empleado, un
documento de beneficios y una lista de roles y expectativas de la empresa.

Siguiendo las instrucciones de este artículo, podrá:

Implemente una aplicación de chat en Azure para el acceso público en un


explorador web.
Vuelva a implementar la aplicación de chat con puntos de conexión privados.

Cuando haya finalizado este procedimiento, puede empezar a modificar el nuevo


proyecto con el código personalizado y volver a implementarlo, sabiendo que la
aplicación de chat solo resulta accesible a través de la red privada.

Introducción a la arquitectura
La implementación predeterminada crea una aplicación de chat con puntos de conexión
públicos.


Para las aplicaciones de chat enriquecidas con datos privados, es fundamental proteger
el acceso a la aplicación de chat. En este artículo se presenta una solución que utiliza
una red virtual (VNET).

Dentro de la red virtual, hay una subred independiente para la aplicación App Service
frente a los otros servicios de Azure del backend. Esto facilita la aplicación de diferentes
reglas de grupo de seguridad de red a cada subred.

Dentro de la red virtual, los servicios usan puntos de conexión privados para
comunicarse entre sí. Cada punto de conexión privado está asociado a una zona DNS
privada para resolver el nombre del punto de conexión privado en una dirección IP
dentro de la red virtual.

Pasos de implementación
Se recomienda implementar la solución dos veces, una vez con acceso público para
validar que la aplicación de chat funciona correctamente y otra vez con acceso privado
para proteger la aplicación de chat mediante una red virtual.

Requisitos previos
Hay disponible un entorno contenedor de desarrollo con todas las dependencias
necesarias para completar este artículo. Puede ejecutar el contenedor de desarrollo en
GitHub Codespaces (en un navegador) o localmente utilizando Visual Studio Code.

Para usar este artículo, necesita los siguientes requisitos previos:

Codespaces (recomendado)

Una suscripción a Azure: cree una cuenta gratuita .

Permisos de la cuenta Azure: Su cuenta Azure debe tener permisos


[Link]/roleAssignments/write, como Administrador de
acceso de usuario o Propietario.

Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.


Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar
acceso a Azure OpenAI, rellene el formulario en [Link] .
Si tiene algún problema, abra una incidencia en este repositorio para ponerse
en contacto con nosotros.

GitHub

Entorno de desarrollo abierto


Comience ahora con un entorno de desarrollo que tenga todas las dependencias
instaladas para completar este artículo.

Codespaces de GitHub (recomendado)

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por


GitHub con Visual Studio Code para la web como interfaz de usuario. Para
obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de
modo que tenga las herramientas y dependencias de desarrollador correctas
preinstaladas para completar este artículo.

) Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de


60 horas gratis cada mes con 2 instancias principales. Para obtener más
información, consulte Almacenamiento y horas de núcleo incluidas
mensualmente en GitHub Codespaces .

1. Inicie el proceso para crear una nueva instancia de GitHub Codespace en la


rama main del repositorio de GitHub Azure-Samples/azure-search-openai-
demo .

2. Haga clic con el botón derecho del ratón en el botón siguiente y seleccione
Abrir vínculo en ventanas nuevas para disponer al mismo tiempo del entorno
de desarrollo y de la documentación.

3. En la página Crear codespace, revise las opciones de configuración de


Codespace y, después, seleccione Crear nuevo codespace.

4. Espere a que se inicie Codespace. Este proceso de startup puede tardar unos
minutos.

5. En el terminal de la parte inferior de la pantalla, inicie sesión en Azure con


Azure Developer CLI.

Bash

azd auth login

6. Copie el código del terminal y péguelo en un navegador. Siga las


instrucciones para autenticarse con su cuenta Azure.

7. Las tareas restantes de este artículo tienen lugar en el contexto de este


contenedor de desarrollo.

Configuración personalizada
Esta solución configura e implementa la infraestructura en función de las opciones
personalizadas configuradas con Azure Developer CLI. En la tabla siguiente se explica la
configuración personalizada de esta solución.

ノ Expandir tabla
Configuración Descripción

AZURE_PUBLIC_NETWORK_ACCESS Controla el valor del acceso a la red pública en los recursos de


Azure admitidos. Los valores válidos son Enabled y Disabled .

AZURE_USE_PRIVATE_ENDPOINT Controla la implementación de puntos de conexión privados, que


conectan recursos de Azure a la red virtual. TRUE significa que los
puntos de conexión privados se implementan para la
conectividad.

Implementación de la aplicación de chat


La primera implementación crea los recursos y proporciona un punto de conexión
accesible públicamente.

1. Ejecute el comando siguiente para configurar esta solución para el acceso público.

Consola

azd env set AZURE_PUBLIC_NETWORK_ACCESS Enabled

Cuando se le solicite un nombre de entorno, recuerde que el nombre del entorno


se usa para crear el grupo de recursos. Escriba un nombre descriptivo. Si está en
un equipo o en una organización, incluya el nombre: morgan-chat-private-
endpoints . Tome nota del nombre del entorno. Lo necesitará para encontrar los

recursos en Azure Portal más adelante.

2. Ejecute el siguiente comando para incluir el aprovisionamiento de los recursos de


red virtual. Recuerde que la implementación no restringe el acceso hasta la
segunda implementación.

Consola

azd env set AZURE_USE_PRIVATE_ENDPOINT true

3. Implemente la solución con el siguiente comando:

Consola

azd up

El aprovisionamiento de recursos es la parte más lenta del proceso de


implementación. Antes de continuar, espere a que se complete la implementación.
4. Al final del proceso de implementación, se muestra el punto de conexión de la
aplicación. Copie ese punto de conexión en un explorador para abrir la aplicación
de chat. Seleccione una de las preguntas de las tarjetas y espere la respuesta.

Anote la dirección URL del punto de conexión: La volverá a necesitar más adelante
en el artículo.

Implementación de una aplicación de chat en


Azure con acceso privado
Cambie la configuración de implementación para proteger la aplicación de chat para el
acceso privado.

1. Ejecute el siguiente comando para desactivar el acceso público.

Consola

azd env set AZURE_PUBLIC_NETWORK_ACCESS Disabled

2. Ejecute el siguiente comando para cambiar la configuración de los recursos. Este


comando no vuelve a implementar el código de la aplicación porque ese código
no ha cambiado.

Consola

azd provision

3. Una vez completado el aprovisionamiento, vuelva a abrir la aplicación de chat en


un explorador. La aplicación de chat ya no está accesible porque el punto de
conexión público está deshabilitado.

Acceso a la aplicación de chat


Para acceder a la aplicación de chat, use una herramienta como Azure VPN Gateway o
Azure Virtual Desktop. Recuerde que cualquier herramienta que se use para acceder a la
aplicación debe ser segura y compatible con las directivas de seguridad de su
organización.

Limpiar GitHub Codespaces


GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar


la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

) Importante

Para obtener más información sobre los derechos de la cuenta de GitHub,


consulte Almacenamiento y horas de núcleo incluidas mensualmente en
GitHub Codespaces .

1. Inicie sesión en el panel de GitHub Codespaces


([Link] ).

2. Busque los espacios de código que se ejecutan actualmente procedentes del


repositorio de GitHub Azure-Samples/azure-search-openai-demo .

3. Abra el menú contextual del Codespace y, a continuación, seleccione Eliminar.


Obtener ayuda
Este repositorio de muestras ofrece información para la resolución de problemas .

Si su problema no se resuelve, regístrelo en el apartado de problemas del repositorio.

Paso siguiente
Aplicación de chat para empresas Repositorio GitHub
Crear una aplicación de chat con la arquitectura de soluciones de mejores prácticas
de Azure OpenAI
Control de acceso en aplicaciones de IA generativa con Búsqueda de Azure AI

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Introducción a la evaluación de
respuestas en una aplicación de chat en
Python
Artículo • 06/08/2024

Este artículo muestra cómo evaluar las respuestas de una aplicación de chat
comparándolas con un conjunto de respuestas correctas o ideales (conocidas como
verdad básica). Siempre que modifique su aplicación de chat de forma que afecte a las
respuestas, realice una evaluación para comparar los cambios. Esta aplicación de
demostración ofrece herramientas que puede usar hoy mismo para facilitar la
realización de evaluaciones.

Siguiendo las instrucciones de este artículo, podrá:

Use las solicitudes de ejemplo que se proporcionan adaptadas al ámbito temático.


Estas solicitudes ya están en el repositorio.
Genere preguntas de usuario de ejemplo y respuestas de verdad básica a partir de
sus propios documentos.
Ejecute las evaluaciones usando un ejemplo de solicitud con las preguntas de
usuario generadas.
Revise el análisis de las respuestas.

7 Nota

En este artículo se usan una o varias plantillas de aplicaciones de IA como base


para los ejemplos e instrucciones del artículo. Las plantillas de aplicaciones de IA le
proporcionan implementaciones de referencia bien mantenidas y fáciles de
implementar que le ayudan a garantizar un punto inicial de alta calidad para sus
aplicaciones de IA.

Introducción a la arquitectura
Entre los componentes clave de la arquitectura se incluyen:

Aplicación de chat hospedada en Azure: La aplicación de chat se ejecuta en Azure


App Service.
Microsoft AI Chat Protocol proporciona contratos DE API estandarizados en todas
las soluciones y lenguajes de IA. La aplicación de chat se ajusta al protocolo
Microsoft AI Chat Protocol , que permite que la aplicación de evaluaciones se
ejecute en cualquier aplicación de chat que se ajuste al protocolo.
Azure AI Search: La aplicación de chat usa Azure AI Search para almacenar los
datos de sus propios documentos.
Generador de preguntas de ejemplo: Puede generar muchas preguntas para cada
documento junto con la respuesta de verdad básica. Cuantas más preguntas, más
larga será la evaluación.
El evaluador ejecuta preguntas y solicitudes de ejemplo en la aplicación de chat y
devuelve los resultados.
La herramienta de revisión le permite revisar los resultados de las evaluaciones.
La herramienta de comparación le permite comparar las respuestas entre
evaluaciones.

Al implementar esta evaluación en Azure, se crea el punto de conexión Azure OpenAI


para el modelo GPT-4 con su propia capacidad. Al evaluar aplicaciones de chat, es
importante que el evaluador disponga de su propio recurso de OpenAI usando GPT-4
con su propia capacidad.

Requisitos previos
Suscripción de Azure. Crear una cuenta gratuita

Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.

Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso
a Azure OpenAI, rellene el formulario en [Link] .

Complete el procedimiento de la aplicación de chat anterior para implementar la


aplicación de chat en Azure. Este recurso es necesario para que funcione la
aplicación de evaluaciones. No complete la sección Limpieza de recursos del
procedimiento anterior.

Necesitará la siguiente información de recursos de Azure de esa implementación, a


la que se denomina aplicación de chat en este artículo:
URI de la API de chat: El punto de conexión del back-end del servicio que se
muestra al final del proceso azd up .
Azure AI Search. Se requieren los siguientes valores:
Nombre del recurso: El nombre del recurso Azure AI Search, indicado como
Search service durante el proceso azd up .

Nombre del índice: El nombre del índice de Azure AI Search donde se


almacenan sus documentos. Esto se puede encontrar en Azure Portal para el
servicio de Búsqueda.
La URL de la API de chat permite que las evaluaciones realicen solicitudes a través
de su aplicación de back-end. La información de Azure AI Search permite que los
scripts de evaluación usen la misma implementación que su back-end, cargado
con los documentos.

Una vez recopilada esta información, no debería necesitar volver a usar el entorno
de desarrollo de la aplicación de chat. Más adelante en este artículo se hace
referencia a ella en varias ocasiones para indicar cómo la aplicación de
evaluaciones usa la aplicación de chat. No elimine los recursos de la aplicación de
chat hasta que haya completado todo el procedimiento de este artículo.

Hay disponible un entorno contenedor de desarrollo con todas las dependencias


necesarias para completar este artículo. Puede ejecutar el contenedor de
desarrollo en GitHub Codespaces (en un navegador) o localmente utilizando Visual
Studio Code.

Codespaces (recomendado)

Cuenta de GitHub

Entorno de desarrollo abierto


Comience ahora con un entorno de desarrollo que tenga todas las dependencias
instaladas para completar este artículo. Debe organizar el espacio de trabajo de su
monitor de forma que pueda ver esta documentación y el entorno de desarrollo al
mismo tiempo.

Este artículo se probó con la región switzerlandnorth para la implementación de


evaluación.

Codespaces de GitHub (recomendado)

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por


GitHub con Visual Studio Code para la web como interfaz de usuario. Para
obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de
modo que tenga las herramientas y dependencias de desarrollador correctas
preinstaladas para completar este artículo.

) Importante
Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de
60 horas gratis cada mes con 2 instancias principales. Para obtener más
información, consulte Almacenamiento y horas de núcleo incluidas
mensualmente en GitHub Codespaces .

1. Inicie el proceso para crear una nueva instancia de GitHub Codespace en la


rama main del repositorio de GitHub Azure-Samples/ai-rag-chat-evaluator .

2. Para visualizar el entorno de desarrollo y la documentación disponible al


mismo tiempo, haga clic con el botón derecho del ratón en el botón siguiente
y seleccione Abrir vínculo en una ventana nueva.

3. En la página Crear codespace, revise las opciones de configuración de


codespace y, después, seleccione Crear nuevo codespace.

4. Espere a que se inicie Codespace. Este proceso de startup puede tardar unos
minutos.

5. En el terminal de la parte inferior de la pantalla, inicie sesión en Azure con la


CLI de Azure Developer.

Bash

azd auth login --use-device-code


6. Copie el código del terminal y péguelo en un navegador. Siga las
instrucciones para autenticarse con su cuenta Azure.

7. Aprovisione el recurso de Azure necesario, Azure OpenAI, para la aplicación


de evaluaciones.

Bash

azd up

Este AZD command no implementa la aplicación de evaluaciones, pero sí crea el


recurso Azure OpenAI con un implementación GPT-4 necesaria para ejecutar
las evaluaciones en el entorno de desarrollo local.

8. Las tareas restantes de este artículo tienen lugar en el contexto de este


contenedor de desarrollo.

9. El nombre del repositorio de GitHub aparece en la barra de búsqueda. Este


indicador visual le ayuda a distinguir la aplicación de evaluaciones de la
aplicación de chat. En este artículo se hace referencia a este repositorio de
ai-rag-chat-evaluator como la aplicación de evaluaciones.

Preparación de los valores de entorno y la


información de configuración
Actualice los valores de entorno y la información de configuración con la información
que recopiló durante los Requisitos previos para la aplicación de evaluaciones.

1. Use el siguiente comando para obtener la información de los recursos de la


aplicación de evaluaciones en un archivo .env :

Bash

azd env get-values > .env

2. Agregue los siguientes valores de la aplicación de chat para su instancia de Azure


AI Search a .env , que obtuvo en la sección Requisitos previos:

Bash
AZURE_SEARCH_SERVICE="<service-name>"
AZURE_SEARCH_INDEX="<index-name>"

El valor AZURE_SEARCH_KEY es la clave de consulta para la instancia de Azure AI


Search.

Uso del protocolo de chat de Microsoft AI para obtener


información sobre la configuración
La aplicación de chat y la aplicación de evaluaciones implementan Microsoft AI Chat
Protocol specification , un contrato de API de punto de conexión de IA de código

abierto, en la nube y con independencia del idioma que se usa para el consumo y la
evaluación. Cuando sus puntos de conexión de cliente y de nivel intermedio se ajusten a
esta especificación de API, podrá consumir y ejecutar evaluaciones de forma coherente
en sus back-ends de IA.

1. Cree un nuevo archivo llamado my_config.json y copie en él el siguiente


contenido:

JSON

{
"testdata_path": "my_input/[Link]",
"results_dir": "my_results/experiment<TIMESTAMP>",
"target_url": "[Link]
"target_parameters": {
"overrides": {
"semantic_ranker": false,
"prompt_template": "<READFILE>my_input/prompt_refined.txt"
}
}
}

El script de evaluación crea la carpeta my_results .

El objeto overrides contiene cualquier ajuste de configuración necesario para la


aplicación. Cada aplicación define su propio conjunto de propiedades de
configuración.

2. Use la siguiente tabla para comprender el significado de las propiedades de


configuración usadas para la aplicación de evaluación.

ノ Expandir tabla
Settings Descripción
(propiedad)

semantic_ranker Use el clasificador semántico un modelo que vuelve a clasificar los


resultados de búsqueda en función de la similitud semántica con la
consulta del usuario.

prompt_template Invalida la solicitud usada para generar la respuesta en función de la


pregunta y los resultados de búsqueda.

3. Cambie target_url al valor de URI de su aplicación de chat, que recopiló en la


sección Requisitos previos. La aplicación de chat debe ajustarse al protocolo de
chat. El URI tiene el siguiente formato [Link] . Asegúrese de
que el protocolo y la ruta chat forman parte del URI.

Generación de datos de ejemplo


Para evaluar las nuevas respuestas, hay que compararlas con una respuesta de "verdad
básica", que es la respuesta ideal para una pregunta concreta. Genere preguntas y
respuestas a partir de documentos almacenados en Azure AI Search para la aplicación
de chat.

1. Copie la carpeta example_input en una nueva carpeta llamada my_input .

2. En un terminal, ejecute el siguiente comando para generar los datos de ejemplo:

Bash

python3 -m scripts generate --output=my_input/[Link] --


numquestions=14 --persource=2

Los pares pregunta/respuesta se generan y almacenan en my_input/[Link] (en


formato JSONL ) como entrada para el evaluador usado en el siguiente paso. Para una
evaluación de producción, generaría más pares de preguntas y respuestas, más de 200
para este conjunto de datos.

7 Nota

El escaso número de preguntas y respuestas por fuente tiene por objeto permitirle
completar rápidamente este procedimiento. No pretende ser una evaluación de
producción, que debería tener más preguntas y respuestas por fuente.
Ejecución de la primera evaluación con una
solicitud refinada
1. Edite las propiedades del archivo de configuración my_config.json :

ノ Expandir tabla

Propiedad Valor nuevo

results_dir my_results/experiment_refined

prompt_template <READFILE>my_input/prompt_refined.txt

La solicitud refinada es específica del dominio del tema.

txt

If there isn't enough information below, say you don't know. Do not
generate answers that don't use the sources below. If asking a
clarifying question to the user would help, ask the question.

Use clear and concise language and write in a confident yet friendly
tone. In your answers ensure the employee understands how your response
connects to the information in the sources and include all citations
necessary to help the employee validate the answer provided.

For tabular information return it as an html table. Do not return


markdown format. If the question is not in English, answer in the
language used in the question.

Each source has a name followed by colon and the actual information,
always include the source name for each fact you use in the response.
Use square brackets to reference the source, e.g. [[Link]]. Don't
combine sources, list each source separately, e.g. [[Link]]
[[Link]].

2. En un terminal, ejecute el siguiente comando para ejecutar la evaluación:

Bash

python3 -m scripts evaluate --config=my_config.json --numquestions=14

Este script creó una nueva carpeta de experimentos en my_results/ con la


evaluación. La carpeta contiene los resultados de la evaluación, incluidos:

ノ Expandir tabla
Nombre de Descripción
archivo

eval_results.jsonl Cada pregunta y respuesta, junto con las métricas de GPT para cada
par de preguntas y respuestas.

[Link] Los resultados generales, como la media de las métricas de GPT.

Ejecución de la secunda evaluación con una


solicitud débil
1. Edite las propiedades del archivo de configuración my_config.json :

ノ Expandir tabla

Propiedad Valor nuevo

results_dir my_results/experiment_weak

prompt_template <READFILE>my_input/prompt_weak.txt

Esa solicitud débil no tiene contexto del dominio del tema:

txt

You are a helpful assistant.

2. En un terminal, ejecute el siguiente comando para ejecutar la evaluación:

Bash

python3 -m scripts evaluate --config=my_config.json --numquestions=14

Ejecución de la tercera evaluación con una


temperatura específica
Use una solicitud que permita más creatividad.

1. Edite las propiedades del archivo de configuración my_config.json :

ノ Expandir tabla
Existing Propiedad Valor nuevo

Existing results_dir my_results/experiment_ignoresources_temp09

Existing prompt_template <READFILE>my_input/prompt_ignoresources.txt

Nuevo temperatura 0.9

El valor predeterminado de temperature es 0.7. Cuanto mayor sea la temperatura,


más creativas serán las respuestas.

La solicitud ignore es breve:

text

Your job is to answer questions to the best of your ability. You will
be given sources but you should IGNORE them. Be creative!

2. El objeto de configuración debe parecerse a lo siguiente, excepto que debe


sustituir results_dir por su ruta:

JSON

{
"testdata_path": "my_input/[Link]",
"results_dir": "my_results/prompt_ignoresources_temp09",
"target_url": "[Link]
"target_parameters": {
"overrides": {
"temperature": 0.9,
"semantic_ranker": false,
"prompt_template": "
<READFILE>my_input/prompt_ignoresources.txt"
}
}
}

3. En un terminal, ejecute el siguiente comando para ejecutar la evaluación:

Bash

python3 -m scripts evaluate --config=my_config.json --numquestions=14

Revisión de los resultados de la evaluación


Ha realizado tres evaluaciones basadas en diferentes solicitudes y configuraciones de la
aplicación. Los resultados se almacenan en la carpeta my_results . Revise cómo difieren
los resultados en función de los ajustes.

1. Use la herramienta de revisión para ver los resultados de las evaluaciones:

Bash

python3 -m review_tools summary my_results

2. Los resultados son algo así:

Cada valor se devuelve como un número y un porcentaje.

3. Use la siguiente tabla para comprender el significado de los valores.

ノ Expandir tabla

Valor Descripción

Base Se refiere a lo bien que se basan las respuestas del modelo en


información fáctica y verificable. Una respuesta se considera
fundamentada si es objetivamente exacta y refleja la realidad.

Relevancia Mide hasta qué punto las respuestas del modelo se ajustan al contexto o
a la solicitud. Una respuesta pertinente aborda directamente la consulta
o afirmación del usuario.

Coherencia Se refiere a la coherencia lógica de las respuestas del modelo. Una


respuesta coherente mantiene un flujo lógico y no se contradice.

Referencia Indica si la respuesta se ha devuelto en el formato requerido en la


bibliográfica solicitud.

Length Mide la longitud de la respuesta.

4. Los resultados deberían indicar que las tres evaluaciones tuvieron una relevancia
alta, mientras que experiment_ignoresources_temp09 tuvo la relevancia más baja.

5. Seleccione la carpeta para ver la configuración de la evaluación.

6. Con Ctrl + C se sale de la aplicación y se vuelve al terminal.


Comparación de respuestas
Compare las respuestas de las evaluaciones.

1. Seleccione dos de las evaluaciones para compararlas y, a continuación, use la


misma herramienta de revisión para comparar las respuestas:

Bash

python3 -m review_tools diff my_results/experiment_refined


my_results/experiment_ignoresources_temp09

2. Revise los resultados. Sus resultados pueden variar.

3. Con Ctrl + C se sale de la aplicación y se vuelve al terminal.

Sugerencias para futuras evaluaciones


Edite las solicitudes en my_input para adaptar las respuestas en función del ámbito
temático, la longitud y otros factores.
Edite el archivo my_config.json para cambiar los parámetros como temperature y
semantic_ranker , y vuelva a ejecutar los experimentos.

Compare diferentes respuestas para comprender cómo afectan la solicitud y la


pregunta a la calidad de la respuesta.
Genere un conjunto separado de preguntas y respuestas de verdad básica para
cada documento del índice de Azure AI Search. A continuación, vuelva a realizar
las evaluaciones para ver en qué difieren las respuestas.
Modifique las solicitudes para indicar respuestas más cortas o más largas
añadiendo el requisito al final de la solicitud. Por ejemplo, Please answer in about
3 sentences. .

Limpieza de recursos y dependencias


Limpieza de los recursos de Azure
Los recursos Azure creados en este artículo se facturan a su suscripción Azure. Si no
espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más
gastos.

Para borrar los recursos de Azure y eliminar el código fuente, ejecute el siguiente
comando de Azure Developer CLI:

Bash

azd down --purge

Limpiar GitHub Codespaces

GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar


la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

) Importante

Para obtener más información sobre los derechos de la cuenta de GitHub,


consulte Almacenamiento y horas de núcleo incluidas mensualmente en
GitHub Codespaces .

1. Inicie sesión en el panel de GitHub Codespaces


([Link] ).

2. Busque los espacios de código que se ejecutan actualmente procedentes del


repositorio de GitHub Azure-Samples/ai-rag-chat-evaluator .
3. Abra el menú contextual del codespace y, a continuación, seleccione Eliminar.

Vuelva al artículo de la aplicación de chat para limpiar esos recursos.

JavaScript
Python

Pasos siguientes
Repositorio de evaluaciones
Aplicación de chat para empresas Repositorio GitHub
Crear una aplicación de chat con la arquitectura de soluciones de mejores prácticas
de Azure OpenAI
Control de acceso en aplicaciones de IA generativa con Azure AI Search
Cree una solución OpenAI preparada para la empresa con Azure API Management
Superar el vector de búsqueda con capacidades híbridas de recuperación y
clasificación

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Escalado del chat de Azure OpenAI para
Python mediante RAG con Azure
Container Apps
Artículo • 16/05/2024

Aprenda a agregar equilibrio de carga a la aplicación para ampliar la aplicación de chat


más allá de los límites de cuota de modelo y token de Azure OpenAI. Este enfoque usa
Azure Container Apps para crear tres puntos de conexión de Azure OpenAI, así como un
contenedor principal para dirigir el tráfico entrante a uno de los tres puntos de
conexión.

Este artículo requiere que implemente dos ejemplos independientes:

Aplicación de chat

Si aún no ha implementado la aplicación de chat, espere hasta que se


implemente el ejemplo del equilibrador de carga.

Si ya ha implementado la aplicación de chat una vez, cambiará la variable de


entorno para admitir un punto de conexión personalizado para el equilibrador
de carga y volver a implementarla.

Aplicación de chat disponible en estos idiomas:


.NET
JavaScript
Python

Aplicación del equilibrador de carga

7 Nota

En este artículo se usan una o varias plantillas de aplicación de IA como base para
los ejemplos e instrucciones del artículo. Las plantillas de aplicación de IA
proporcionan implementaciones de referencia bien mantenidas y fáciles de
implementar que ayudan a garantizar un punto de partida de alta calidad para las
aplicaciones de IA.

Arquitectura para el equilibrio de carga de


Azure OpenAI con Azure Container Apps
Dado que el recurso de Azure OpenAI tiene límites específicos de cuota de tokens y
modelos, una aplicación de chat que usa un único recurso de Azure OpenAI es
propenso a tener errores de conversación debido a esos límites.

Para usar la aplicación de chat sin alcanzar esos límites, use una solución de carga
equilibrada con Azure Container Apps. Esta solución expone sin problemas un único
punto de conexión de Azure Container Apps al servidor de aplicaciones de chat.

La aplicación de Azure Container se encuentra delante de un conjunto de recursos de


Azure OpenAI. La aplicación de Container resuelve dos escenarios: normal y limitado.
Durante un escenario normal donde está disponible la cuota de tokens y modelos, el
recurso de Azure OpenAI devuelve un valor de 200 a través de Container App y App
Server.
Cuando un recurso está en un escenario limitado, por ejemplo, debido a los límites de
cuota, la aplicación de Azure Container puede reintentar un recurso de Azure OpenAI
diferente inmediatamente para completar la solicitud de aplicación de chat original.

Requisitos previos
Suscripción de Azure. Crear una cuenta gratuita

Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.


Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso
a Azure OpenAI, rellene el formulario en [Link] .

Los contenedores de desarrollo están disponibles para ambos ejemplos, con


todas las dependencias necesarias para completar este artículo. Puede ejecutar los
contenedores de desarrollo en GitHub Codespaces (en un explorador) o
localmente mediante Visual Studio Code.

Codespaces (recomendado)

GitHub

Apertura de la aplicación de ejemplo del


equilibrador local de aplicaciones de
contenedor
Codespaces (recomendado)

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por


GitHub con Visual Studio Code para la web como interfaz de usuario. Para
obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de
modo que tenga las herramientas y dependencias de desarrollador correctas
preinstaladas para completar este artículo.

) Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de


60 horas gratis cada mes con 2 instancias principales. Para obtener más
información, consulte Almacenamiento y horas de núcleo incluidas
mensualmente en GitHub Codespaces .

Implementación del equilibrador de carga de


Azure Container Apps
1. Inicie sesión en Azure Developer CLI para proporcionar autenticación a los pasos
de aprovisionamiento e implementación.

Bash

azd auth login --use-device-code

2. Establezca una variable de entorno para usar la autenticación de la CLI de Azure en


el paso posterior al aprovisionamiento.

Bash

azd config set [Link] "true"

3. Implemente la aplicación del equilibrador de carga.

Bash

azd up

Deberá seleccionar una suscripción y una región para la implementación. No


tienen por qué ser de la misma suscripción y región que la aplicación de chat.

4. Antes de continuar, espere a que se complete la implementación.

Obtener el extremo de implementación


1. Use el comando siguiente para mostrar el punto de conexión implementado para
la aplicación Azure Container.

Bash

azd env get-values

2. Copie el valor CONTAINER_APP_URL . La usará en la sección siguiente.

Reimplementación de la aplicación de chat con


el punto de chat del equilibrador de carga
Estos se completan en el ejemplo de la aplicación de chat.
Implementación inicial

1. Abra el contenedor de desarrollo de la aplicación de chat mediante una de las


siguientes opciones.

ノ Expandir tabla

Lenguaje Codespaces Visual Studio Code

.NET Dev Containers Open

JavaScript Dev Containers Open

Python Dev Containers Open

2. Inicie sesión en Azure Developer CLI (AZD).

Bash

azd auth login

Finalice las instrucciones de inicio de sesión.

3. Cree un entorno de AZD con un nombre como chat-app .

Bash

azd env new <name>

4. Agregue la siguiente variable de entorno, que indica al back-end de la


aplicación chat que usa una dirección URL personalizada para las solicitudes
de OpenAI.

Bash

azd env set OPENAI_HOST azure_custom

5. Agregue la siguiente variable de entorno, sustituyendo <CONTAINER_APP_URL>


por la dirección URL de la sección anterior. Esta acción indica al back-end de
la aplicación chat cuál es el valor de la dirección URL personalizada para la
solicitud de OpenAI.
Bash

azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>

6. Implemente la aplicación de chat.

Bash

azd up

Ahora puede usar la aplicación de chat con la confianza de que se ha creado para
escalar horizontalmente entre muchos usuarios sin quedarse sin cuota.

Transmisión de registros para ver los resultados


del equilibrador de carga
1. En Azure Portal , busque el grupo de recursos.

2. En la lista de recursos del grupo, seleccione el recurso Container App.

3. Seleccione Supervisión -> Flujo de registro para ver el registro.

4. Use la aplicación de chat para generar tráfico en el registro.

5. Busque los registros, que hacen referencia a los recursos de Azure OpenAI. Cada
uno de los tres recursos tiene su identidad numérica en el comentario de registro a
partir de Proxying to [Link] , donde 3 indica el tercer recurso de Azure
OpenAI.
6. Al usar la aplicación de chat, cuando el equilibrador de carga recibe el estado de
que la solicitud ha superado la cuota, el equilibrador de carga gira
automáticamente a otro recurso.

Configuración de los tokens por cuota de


minutos (TPM)
De forma predeterminada, cada una de las instancias de OpenAI del equilibrador de
carga se implementará con 30 000 TPM (tokens por minuto). Puedes usar la aplicación
de chat con la confianza de que se ha creado para escalar horizontalmente entre
muchos usuarios sin quedarse sin cuota. Cambie este valor cuando:

Obtiene errores de capacidad de implementación: menor que ese valor.


Planee una mayor capacidad, aumente el valor.

1. Use el siguiente comando para cambiar el valor.

Bash

azd env set OPENAI_CAPACITY 50

2. Vuelva a implementar el equilibrador de carga.


Bash

azd up

Limpieza de recursos
Cuando haya terminado con la aplicación de chat y el equilibrador de carga, limpie los
recursos. Los recursos Azure creados en este artículo se facturan a su suscripción Azure.
Si no espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más
gastos.

Limpieza de los recursos de la aplicación de chat


Vuelva al artículo de la aplicación de chat para limpiar esos recursos.

.NET
JavaScript
Python

Limpieza de los recursos del equilibrador de carga


Ejecute el siguiente comando de la Azure Developer CLI para eliminar los recursos de
Azure y eliminar el código de origen:

Bash

azd down --purge --force

Los modificadores proporcionan:

purge : los recursos eliminados se purgan inmediatamente. Esto le permite

reutilizar el TPM de Azure OpenAI.


force : la eliminación se produce de forma silenciosa, sin necesidad de

consentimiento del usuario.

Limpiar GitHub Codespaces

GitHub Codespaces
La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar
la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

) Importante

Para obtener más información sobre los derechos de la cuenta de GitHub,


consulte Almacenamiento y horas de núcleo incluidas mensualmente en
GitHub Codespaces .

1. Inicie sesión en el panel de GitHub Codespaces


([Link] ).

2. Busque los espacios de código que se ejecutan actualmente procedentes del


repositorio de GitHub azure-samples/openai-aca-lb .

3. Abra el menú contextual del codespace y, a continuación, seleccione Eliminar.

Obtener ayuda
Si tiene problemas para implementar el equilibrador de carga de Azure API
Management, registre el problema en el repositorio Problemas .

Código de ejemplo
Entre los ejemplos usados en este artículo se incluyen:

Aplicación de chat de Python con RAG


Load Balancer con Azure Container Apps

Paso siguiente
Uso de Azure Load Testing para probar la carga de la aplicación de chat con

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Escalado de Azure OpenAI para Python
con Azure API Management
Artículo • 16/05/2024

Aprenda a agregar equilibrio de carga de nivel empresarial a la aplicación para ampliar


la aplicación de chat más allá de los límites de cuota de modelo y token de Azure
OpenAI. Este enfoque usa Azure API Management para dirigir el tráfico
inteligentemente entre tres recursos de Azure OpenAI.

Este artículo requiere que implemente dos ejemplos independientes:

Aplicación de chat
Si aún no ha implementado la aplicación de chat, espere hasta que se
implemente el ejemplo del equilibrador de carga.
Si ya ha implementado la aplicación de chat una vez, cambiará la variable de
entorno para admitir un punto de conexión personalizado para el equilibrador
de carga y volver a implementarla.

Equilibrador de carga con Azure API Management

7 Nota

En este artículo se usan una o varias plantillas de aplicación de IA como base para
los ejemplos e instrucciones del artículo. Las plantillas de aplicación de IA
proporcionan implementaciones de referencia bien mantenidas y fáciles de
implementar que ayudan a garantizar un punto de partida de alta calidad para las
aplicaciones de IA.

Arquitectura para el equilibrio de carga de


Azure OpenAI con Azure API Management
Dado que el recurso de Azure OpenAI tiene límites específicos de cuota de tokens y
modelos, una aplicación de chat que usa un único recurso de Azure OpenAI es
propenso a tener errores de conversación debido a esos límites.
Para usar la aplicación de chat sin alcanzar esos límites, use una solución de carga
equilibrada con Azure API Management. Esta solución expone sin problemas un único
punto de conexión de Azure API Management al servidor de aplicaciones de chat.

El recurso de Azure API Management, como capa de API, se encuentra delante de un


conjunto de recursos de Azure OpenAI. La capa de API se aplica a dos escenarios:
normales y limitados. Durante un escenario normal en el que el token y la cuota del
modelo están disponibles, el recurso de Azure OpenAI devuelve un valor de 200 a través
de la capa de API y el servidor de aplicaciones back-end.
Cuando se limita un recurso debido a los límites de cuota, la capa de API puede
reintentar un recurso de Azure OpenAI diferente inmediatamente para cumplir la
solicitud de aplicación de chat original.

Requisitos previos
Suscripción de Azure. Crear una cuenta gratuita

Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.


Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso
a Azure OpenAI, rellene el formulario en [Link] .

Los contenedores de desarrollo están disponibles para ambos ejemplos, con


todas las dependencias necesarias para completar este artículo. Puede ejecutar los
contenedores de desarrollo en GitHub Codespaces (en un explorador) o
localmente mediante Visual Studio Code.

Codespaces (recomendado)

Solo se requiere una cuenta de GitHub para usar Codespaces.

Apertura de la aplicación de ejemplo del


equilibrador local de Azure API Management
Codespaces (recomendado)

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por


GitHub con Visual Studio Code para la web como interfaz de usuario. Para
obtener el entorno de desarrollo más sencillo, utilice Codespaces de GitHub de
modo que tenga las herramientas y dependencias de desarrollador correctas
preinstaladas para completar este artículo.

) Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de


60 horas gratis cada mes con 2 instancias principales. Para obtener más
información, consulte Almacenamiento y horas de núcleo incluidas
mensualmente en GitHub Codespaces .

Implementación del equilibrador de carga de


Azure API Management
1. Para implementar el equilibrador de carga en Azure, inicie sesión en Azure
Developer CLI (AZD).
Bash

azd auth login

2. Finalice las instrucciones de inicio de sesión.

3. Implemente la aplicación del equilibrador de carga.

Bash

azd up

Deberá seleccionar una suscripción y una región para la implementación. No


tienen por qué ser de la misma suscripción y región que la aplicación de chat.

4. Antes de continuar, espere a que se complete la implementación. Esto puede


tardar hasta 30 minutos.

Obtención del punto de conexión del


equilibrador de carga
Ejecute el siguiente comando de Bash para ver las variables de entorno desde la
implementación. Necesitará esta información más adelante.

Bash

azd env get-values | grep APIM_GATEWAY_URL

Reimplementación de la aplicación de chat con


el punto de chat del equilibrador de carga
Estos se completan en el ejemplo de la aplicación de chat.

Implementación inicial

1. Abra el contenedor de desarrollo de la aplicación de chat mediante una de las


siguientes opciones.

ノ Expandir tabla
Lenguaje Codespaces Visual Studio Code

.NET Dev Containers Open

JavaScript Dev Containers Open

Python Dev Containers Open

2. Inicie sesión en Azure Developer CLI (AZD).

Bash

azd auth login

Finalice las instrucciones de inicio de sesión.

3. Cree un entorno de AZD con un nombre como chat-app .

Bash

azd env new <name>

4. Agregue la siguiente variable de entorno, que indica al back-end de la


aplicación chat que usa una dirección URL personalizada para las solicitudes
de OpenAI.

Bash

azd env set OPENAI_HOST azure_custom

5. Agregue la siguiente variable de entorno, que indica al back-end de la


aplicación chat cuál es el valor de la dirección URL personalizada para la
solicitud de OpenAI.

Bash

azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>

6. Implemente la aplicación de chat.

Bash
azd up

Configuración de los tokens por cuota de


minutos (TPM)
De forma predeterminada, cada una de las instancias de OpenAI del equilibrador de
carga se implementará con 30 000 TPM (tokens por minuto). Puedes usar la aplicación
de chat con la confianza de que se ha creado para escalar horizontalmente entre
muchos usuarios sin quedarse sin cuota. Cambie este valor cuando:

Obtiene errores de capacidad de implementación: menor que ese valor.


Planee una mayor capacidad, aumente el valor.

1. Use el siguiente comando para cambiar el valor.

Bash

azd env set OPENAI_CAPACITY 50

2. Vuelva a implementar el equilibrador de carga.

Bash

azd up

Limpieza de recursos
Cuando haya terminado con la aplicación de chat y el equilibrador de carga, limpie los
recursos. Los recursos Azure creados en este artículo se facturan a su suscripción Azure.
Si no espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más
gastos.

Limpieza de los recursos de la aplicación de chat


Vuelva al artículo de la aplicación de chat para limpiar esos recursos.

.NET
JavaScript
Python

Limpieza de los recursos del equilibrador de carga


Ejecute el siguiente comando de la Azure Developer CLI para eliminar los recursos de
Azure y eliminar el código de origen:

Bash

azd down --purge --force

Los modificadores proporcionan:

purge : los recursos eliminados se purgan inmediatamente. Esto le permite

reutilizar el TPM de Azure OpenAI.


force : la eliminación se produce de forma silenciosa, sin necesidad de

consentimiento del usuario.

Limpiar GitHub Codespaces

GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar


la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

) Importante

Para obtener más información sobre los derechos de la cuenta de GitHub,


consulte Almacenamiento y horas de núcleo incluidas mensualmente en
GitHub Codespaces .

1. Inicie sesión en el panel de GitHub Codespaces


([Link] ).

2. Busque los espacios de código que se ejecutan actualmente procedentes del


repositorio de GitHub azure-samples/openai-apim-lb .
3. Abra el menú contextual del elemento Codespaces y, a continuación,
seleccione Eliminar.

Obtener ayuda
Si tiene problemas para implementar el equilibrador de carga de Azure API
Management, registre el problema en el repositorio Problemas .

Código de ejemplo
Entre los ejemplos usados en este artículo se incluyen:

Aplicación de chat de Python con RAG


Load Balancer con Azure API Management

Paso siguiente
Visualización de datos de diagnóstico de Azure API Management en Azure
Monitor
Uso de Azure Load Testing para probar la carga de la aplicación de chat con

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Prueba de carga de la aplicación de chat
de Python mediante RAG con locust
Artículo • 21/05/2024

En este artículo se proporciona el proceso para realizar pruebas de carga en una


aplicación de chat de Python mediante el patrón RAG con Locust, una popular
herramienta de prueba de carga de código abierto. El objetivo principal de las pruebas
de carga es asegurarse de que la carga esperada en la aplicación de chat no supere la
cuota actual de transacciones de Azure OpenAI por minuto (TPM). Al simular el
comportamiento del usuario bajo una carga pesada, puede identificar posibles cuellos
de botella y problemas de escalabilidad en la aplicación. Este proceso es fundamental
para asegurarse de que la aplicación de chat sigue respondiendo y confiable, incluso
cuando se enfrenta a un gran volumen de solicitudes de usuario.

Vea el vídeo de demostración para obtener más información sobre las pruebas de carga
de la aplicación de chat.

Vídeo

7 Nota

En este artículo se usan una o varias plantillas de aplicación de IA como base para
los ejemplos e instrucciones del artículo. Las plantillas de aplicación de IA
proporcionan implementaciones de referencia bien mantenidas y fáciles de
implementar que ayudan a garantizar un punto de partida de alta calidad para las
aplicaciones de IA.

Requisitos previos
Suscripción de Azure. Crear una cuenta gratuita

Acceso concedido a Azure OpenAI en la suscripción de Azure que quiera.


Actualmente, solo la aplicación concede acceso a este servicio. Para solicitar acceso
a Azure OpenAI, rellene el formulario en [Link] .

Los contenedores de desarrollo están disponibles para ambos ejemplos, con


todas las dependencias necesarias para completar este artículo. Puede ejecutar los
contenedores de desarrollo en GitHub Codespaces (en un explorador) o
localmente mediante Visual Studio Code.
Codespaces (recomendado)

Solo necesita una cuenta de GitHub

Aplicación de chat de Python con RAG : si configuró la aplicación de chat para usar
una de las soluciones de equilibrio de carga, este artículo le ayudará a probar el
equilibrio de carga. Las soluciones de equilibrio de carga incluyen Azure Container
Apps.

Abrir aplicación de ejemplo de prueba de carga


La prueba de carga se encuentra en la solución de la aplicación de chat de Python como
una prueba de locust. Debe volver a ese artículo, implementar la solución y, a
continuación, usar ese entorno de desarrollo de contenedores de desarrollo para
completar los pasos siguientes.

Ejecutar la prueba
1. Instale las dependencias de la prueba de carga.

Bash

python3 -m pip install -r [Link]

2. Inicie Locust, que usa el archivo de prueba locust: [Link] se encuentra en la


raíz del repositorio.

Bash

locust

3. Abra el sitio web locust en ejecución, como [Link] .

4. Escriba lo siguiente en el sitio web de Locust.

ノ Expandir tabla

Propiedad Valor

Número de usuarios 20
Propiedad Valor

Ascenso 1

Host [Link]

5. Seleccione Iniciar swarm para iniciar la prueba.

6. Seleccione Gráficos para ver el progreso de la prueba.

Limpieza de recursos
Cuando haya terminado con las pruebas de carga, limpie los recursos. Los recursos
Azure creados en este artículo se facturan a su suscripción Azure. Si no espera necesitar
estos recursos en el futuro, elimínelos para evitar incurrir en más gastos. Después de
eliminar recursos específicos de este artículo, recuerde volver al otro tutorial de la
aplicación de chat y seguir los pasos de limpieza.
Vuelva al artículo de la aplicación de chat para limpiar esos recursos.

Obtener ayuda
Si tiene problemas para usar este evaluador de carga, registre el problema en los
problemas del repositorio.

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Configuración del entorno local para
implementar aplicaciones web de
Python en Azure
Artículo • 27/07/2023

En este artículo se explica cómo configurar el entorno local para desarrollar aplicaciones
web de Python e implementarlas en Azure. La aplicación web puede ser python pura o
usar uno de los marcos web comunes basados en Python, como Django , Flask o
FastAPI .

Las aplicaciones web de Python desarrolladas localmente se pueden implementar en


servicios como Azure App Service, Azure Container Apps o Azure Static Web Apps. Hay
muchas opciones para la implementación. Por ejemplo, para App Service
implementación, puede optar por implementar desde código, un contenedor de Docker
o una aplicación web estática. Si implementa desde código, puede implementar con
Visual Studio Code, con la CLI de Azure, desde un repositorio git local o con acciones de
GitHub. Si implementa en un contenedor de Docker, puede hacerlo desde Azure
Container Registry, Docker Hub o cualquier registro privado.

Antes de continuar con este artículo, se recomienda revisar la configuración del entorno
de desarrollo para obtener instrucciones sobre cómo configurar el entorno de desarrollo
para Python y Azure. A continuación, analizaremos la configuración y la configuración
específicas del desarrollo de aplicaciones web de Python.

Después de configurar el entorno local para el desarrollo de aplicaciones web de


Python, estará listo para abordar estos artículos:

Inicio rápido: Creación de una aplicación web de Python (Django o Flask) en Azure
App Service.
Tutorial: Implementación de una aplicación web de Python (Django o Flask) con
PostgreSQL en Azure
Creación e implementación de una aplicación web de Flask en Azure con una
identidad administrada asignada por el sistema

Trabajar con Visual Studio Code


El Visual Studio Code entorno de desarrollo integrado (IDE) es una manera sencilla de
desarrollar aplicaciones web de Python y trabajar con recursos de Azure que usan las
aplicaciones web.
 Sugerencia

Asegúrese de que tiene instalada la extensión de Python . Para obtener


información general sobre cómo trabajar con Python en VS Code, consulte
Introducción con Python en VS Code .

En VS Code, trabajará con recursos de Azure mediante extensiones de VS Code .


Puede instalar extensiones desde la vista Extensiones o la combinación de teclas
Ctrl+Mayús+X. En el caso de las aplicaciones web de Python, es probable que trabaje
con una o varias de las siguientes extensiones:

La extensión Azure App Service permite interactuar con Azure App Service desde
Visual Studio Code. App Service proporciona hospedaje totalmente administrado
para aplicaciones web, incluidos sitios web y API web.

La extensión Azure Static Web Apps permite crear Azure Static Web Apps
directamente desde VS Code. Static Web Apps es sin servidor y es una buena
opción para el hospedaje de contenido estático.

Si planea trabajar con contenedores, instale:

Extensión de Docker para compilar y trabajar con contenedores localmente.


Por ejemplo, puede ejecutar una aplicación web de Python en contenedor en
Azure App Service mediante Web Apps para contenedores .

La extensión Azure Container Apps para crear e implementar aplicaciones en


contenedor directamente desde Visual Studio Code.

Hay otras extensiones, como azure Storage , bases de datos de Azure y


extensiones de recursos de Azure . Siempre puede agregar estas y otras
extensiones según sea necesario.

Las extensiones de Visual Studio Code son accesibles como cabría esperar en una
interfaz IDE típica y con compatibilidad con palabras clave enriquecidas mediante la
paleta de comandos de VS Code . Para acceder a la paleta de comandos, use la
combinación de teclas Ctrl+Mayús+P. La paleta de comandos es una buena manera de
ver todas las posibles acciones que puede realizar en un recurso de Azure. En la captura
de pantalla siguiente se muestran algunas de las acciones de App Service.

Trabajar con contenedores de desarrollo en Visual Studio


Code
Los desarrolladores de Python suelen confiar en entornos virtuales para crear un
entorno aislado y autocontenido para un proyecto específico. Los entornos virtuales
permiten a los desarrolladores administrar dependencias, paquetes y versiones de
Python por separado para cada proyecto, lo que evita conflictos entre proyectos
diferentes que podrían requerir versiones de paquetes diferentes.

Aunque hay opciones populares disponibles en Python para administrar entornos como
virtualenv o venv , la extensión de contenedor de desarrollo de Visual Studio Code

(basada en la especificación de contenedor de desarrollo abierta) le permite usar un


contenedor de Docker como un entorno contenedorizado completo. Permite a los
desarrolladores definir una cadena de herramientas coherente y fácilmente reproducible
con todas las herramientas, dependencias y extensiones necesarias preconfiguradas.
Esto significa que si tiene requisitos del sistema, configuraciones de shell o usa otros
lenguajes por completo, puede usar un contenedor de desarrollo para configurar
explícitamente todas las partes del proyecto que podrían residir fuera de un entorno
básico de Python.

Por ejemplo, un desarrollador puede configurar un único contenedor de desarrollo para


incluir todo lo necesario para trabajar en un proyecto, incluido un servidor de base de
datos PostgreSQL junto con la base de datos del proyecto y los datos de ejemplo, un
servidor Redis, Nginx, código front-end, bibliotecas cliente como React, etc. Además, el
contenedor contendrá el código del proyecto, el entorno de ejecución de Python y
todas las dependencias del proyecto de Python con las versiones correctas. Por último,
el contenedor puede especificar Visual Studio Code extensiones que se van a instalar
para que todo el equipo tenga las mismas herramientas disponibles. Por lo tanto,
cuando un nuevo desarrollador se une al equipo, todo el entorno, incluidas las
herramientas, las dependencias y los datos, está listo para clonarse en su equipo local y
puede empezar a trabajar inmediatamente.

Consulte Desarrollo dentro de un contenedor .

Trabajar con Visual Studio 2022


Visual Studio 2022 es un entorno de desarrollo integrado (IDE) completo compatible
con el desarrollo de aplicaciones de Python y muchas herramientas y extensiones
integradas para acceder a los recursos de Azure e implementarlos. Aunque la mayoría
de la documentación para compilar aplicaciones web de Python en Azure se centra en el
uso de Visual Studio Code, Visual Studio 2022 es una excelente opción si ya la tiene
instalada, se siente cómodo con su uso y la usa para proyectos de .NET o C++.

En general, consulte Visual Studio | Documentación de Python para toda la


documentación relacionada con el uso de Python en Visual Studio 2022.

Para conocer los pasos de instalación, consulte Instalación de la compatibilidad


con Python en Visual Studio que le guía por los pasos para instalar la carga de
trabajo de Python en Visual Studio 2022.

Para obtener un flujo de trabajo general sobre el uso de Python para el desarrollo
web, consulte Inicio rápido: Creación de la primera aplicación web de Python con
Visual Studio. Este artículo es útil para comprender cómo compilar una aplicación
web de Python desde cero (pero no incluye la implementación en Azure).

Para usar Visual Studio 2022 para administrar los recursos de Azure e
implementarlos en Azure, consulte Desarrollo de Azure con Visual Studio. Aunque
gran parte de la documentación aquí menciona específicamente .NET, las
herramientas para administrar los recursos de Azure e implementar en Azure
funcionan igual independientemente del lenguaje de programación.

Cuando no hay ninguna herramienta integrada disponible en Visual Studio 2022


para una tarea de implementación o administración de Azure determinada,
siempre puede usar comandos de la CLI de Azure.

Trabajar con otros IDE


Si trabaja en otro IDE que no tiene compatibilidad explícita con Azure, puede usar la CLI
de Azure para administrar los recursos de Azure. En la captura de pantalla siguiente, se
abre una aplicación web de Flask sencilla en el IDE de PyCharm . La aplicación web se
puede implementar en un Azure App Service mediante el az webapp up comando . En la
captura de pantalla, el comando de la CLI se ejecuta en el emulador de terminal
insertado de PyCharm. Si el IDE no tiene un emulador incrustado, puede usar cualquier
terminal y el mismo comando. La CLI de Azure debe estar instalada en el equipo y ser
accesible en cualquier caso.

Comandos de la CLI de Azure


Al trabajar localmente con aplicaciones web mediante los comandos de la CLI de Azure ,
normalmente trabajará con los siguientes comandos:

Get-Help Descripción

az webapp Administra aplicaciones web. Incluye los subcomandos create para crear una
aplicación web y hasta crear e implementar desde un área de trabajo local.

az container Administra Azure Container Apps.


app

az Administra Azure Static Web Apps.


staticwebapp

az group Administra los grupos de recursos y las implementaciones de plantillas. Use el


subcomando create en un grupo de recursos para colocar los recursos de Azure.

az appservice Administra los planes de App Service.

az config Configuración de la CLI de Azure administrada. Para guardar pulsaciones de


tecla, puede definir una ubicación predeterminada o un grupo de recursos que
otros comandos usen automáticamente.

Este es un comando de ejemplo de la CLI de Azure para crear una aplicación web y
recursos asociados, e implementarla en Azure en un comando mediante az webapp up.
Ejecute el comando en el directorio raíz de la aplicación web.

bash
Azure CLI

az webapp up \
--runtime PYTHON:3.9 \
--sku B1 \
--logs

Para obtener más información sobre este ejemplo, consulte Inicio rápido:
Implementación de una aplicación web de Python (Django o Flask) en Azure App
Service.

Tenga en cuenta que para algunos de los flujos de trabajo de Azure también puede usar
la CLI de Azure desde una Cloud Shell de Azure. Azure Cloud Shell es un shell
interactivo, autenticado y al que se puede acceder desde un explorador para administrar
recursos de Azure.

Paquetes de claves del SDK de Azure


En las aplicaciones web de Python, puede hacer referencia mediante programación a los
servicios de Azure mediante el SDK de Azure para Python. Este SDK se describe
ampliamente en la sección Uso de las bibliotecas de Azure (SDK) para Python . En esta
sección, mencionaremos brevemente algunos paquetes clave del SDK que usará en el
desarrollo web. Además, mostraremos un ejemplo sobre el procedimiento
recomendado para autenticar el código con recursos de Azure.

A continuación se muestran algunos de los paquetes que se usan habitualmente en el


desarrollo de aplicaciones web. Puede instalar paquetes en el entorno virtual
directamente con pip . O bien, coloque el nombre del índice de paquetes de Python
(Pypi) en el archivo [Link] .

Documentación del SDK Instalar Índice de paquetes de


Python

Identidad de Azure pip install azure-identity azure-identity

Blobs de Azure Storage pip install azure-storage-blob azure-storage-blob

Azure Cosmos DB pip install azure-cosmos azure-cosmos

Secretos de Azure Key pip install azure-keyvault- azure-keyvault-secrets


Vault secrets
El paquete azure-identity permite que la aplicación web se autentique con Azure
Active Directory (Azure AD). Para la autenticación en el código de la aplicación web, se
recomienda usar DefaultAzureCredential en el azure-identity paquete. Este es un
ejemplo de cómo acceder a Azure Storage. El patrón es similar para otros recursos de
Azure.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url=account_url,
credential=azure_credential)

DefaultAzureCredential Buscará en ubicaciones predefinidas la información de la


cuenta, por ejemplo, en variables de entorno o desde el inicio de sesión de la CLI de
Azure. Para obtener información detallada sobre la DefaultAzureCredential lógica,
consulte Autenticación de aplicaciones de Python en servicios de Azure mediante el SDK
de Azure para Python.

Marcos web basados en Python


En el desarrollo de aplicaciones web de Python, a menudo se trabaja con marcos web
basados en Python. Estos marcos proporcionan funcionalidades como plantillas de
página, administración de sesiones, acceso a bases de datos y acceso fácil a objetos de
solicitud y respuesta HTTP. Los marcos le permiten evitar la necesidad de tener que
reinventar la rueda para una funcionalidad común.

Tres marcos web comunes de Python son Django , Flask o FastAPI . Estos y otros
marcos web se pueden usar con Azure.

A continuación se muestra un ejemplo de cómo puede empezar a trabajar rápidamente


con estos marcos localmente. Al ejecutar estos comandos, terminará con una aplicación,
aunque una sencilla que se pueda implementar en Azure. Ejecute estos comandos
dentro de un entorno virtual.

Paso 1: Descargue los marcos con pip .

Django
pip install Django

Paso 2: Cree una aplicación hola mundo.

Django

Cree un proyecto de ejemplo con el comando startproject django-admin . El


proyecto incluye un archivo [Link] que es el punto de entrada para ejecutar la
aplicación.

django-admin startproject hello_world

Paso 3: Ejecute el código localmente.

Django

Django usa WSGI para ejecutar la aplicación.

python hello_world\[Link] runserver

Paso 4: Examine la aplicación hola mundo.

Django

[Link]

En este momento, agregue un archivo [Link] y, a continuación, puede


implementar la aplicación web en Azure o incluirla en contenedores con Docker y, a
continuación, implementarla.

Pasos siguientes
Inicio rápido: Creación de una aplicación web de Python (Django o Flask) en Azure
App Service.
Tutorial: Implementación de una aplicación web de Python (Django o Flask) con
PostgreSQL en Azure
Creación e implementación de una aplicación web de Flask en Azure con una
identidad administrada asignada por el sistema
Información general sobre las plantillas
de azd web de Python
Artículo • 23/10/2023

Las plantillas de la CLI para desarrolladores de Azure web de Python (azd) son la manera
más rápida y sencilla de empezar a compilar e implementar aplicaciones web de Python
en Azure. En este artículo se proporciona información contextual en segundo plano a
medida que se está iniciando.

La mejor manera de empezar es seguir el inicio rápido para crear su primera aplicación
web de Python e implementarla en Azure en cuestión de minutos con plantillas azd.

¿Cuáles son las plantillas de azd web de


Python?
Hay muchas plantillas azd disponibles en la galería Awesome AZD Templates. Sin
embargo, esta colección de plantillas azd web de Python es única, ya que proporcionan
una aplicación web de ejemplo con paridad de características en muchas combinaciones
populares de recursos de Azure y marcos web de Python.

Al ejecutar una plantilla azd web de Python, hará lo siguiente:

Crear una aplicación de inicio: específicamente, un sitio web para una empresa
ficticia denominada Relecloud. El código del proyecto presenta muchos
procedimientos recomendados para los marcos y paquetes de Python
especificados que son necesarios para esa pila concreta de tecnologías. La plantilla
está pensada para ser un punto de partida para la aplicación. Agregue o quite la
lógica de la aplicación y los recursos de Azure según sea necesario.
Aprovisionamiento de recursos de Azure: la plantilla aprovisiona recursos de
Azure para hospedar la aplicación web y la base de datos mediante Bicep, una
conocida herramienta de infraestructura como código. De nuevo, modifique las
plantillas de Bicep si necesita agregar más servicios de Azure.
Implementación de la aplicación de inicio en los recursos de Azure recién
aprovisionados: la aplicación de inicio se implementa automáticamente para que
pueda verlo todo en cuestión de minutos y decidir lo que desea modificar.
Opcional: Configure un repositorio de GitHub y una canalización de CI/CD: si lo
desea, la plantilla contiene la lógica para configurar un repositorio de GitHub para
usted, incluida una canalización de CI/CD de Acciones de GitHub. En cuestión de
minutos, puede realizar cambios en el código del proyecto web. Al combinar esos
cambios en la rama principal del repositorio de GitHub, la canalización de CI/CD
las publica en el nuevo entorno de hospedaje de Azure.

¿A quién va dirigida esta característica?


Las plantillas están diseñadas para que las usen desarrolladores web de Python
experimentados que quieran empezar a crear una nueva aplicación web de Python
destinada a la implementación de Azure.

¿Por qué querría usar esto?


El uso de las plantillas azd proporciona varias ventajas:

Inicio más rápido posible : con el entorno de desarrollo local y las configuraciones
del entorno de hospedaje fuera del camino, puede centrarse en compilar la
aplicación en cuestión de minutos.
Inicio más sencillo posible : ejecute solo algunas instrucciones de línea de
comandos para crear un entorno de desarrollo, hospedaje e implementación local
completo. El flujo de trabajo es fácil de usar y fácil de recordar.
Creación de procedimientos recomendados : cada plantilla se crea y mantiene
mediante Python en veteranos del sector de Azure. Agregue el código siguiendo
sus enfoques de diseño para basarse en una base sólida.

Índice de plantillas
En la tabla siguiente se enumeran los monikers de plantilla web de Python disponibles
para usarlos con el azd init comando , las tecnologías implementadas en cada plantilla
y un vínculo al repositorio de GitHub si desea contribuir a los cambios.

Django

Plantilla Marco Base de datos Plataforma de Repositorio de


web hospedaje GitHub

azure-django- Django Servidor flexible de Azure Container repo


postgres-flexible- PostgreSQL Apps
aca

azure-django- Django Servidor flexible de Azure App repo


postgres-flexible- PostgreSQL Service
appservice

azure-django- Django Cosmos DB (adaptador Azure Container repo


cosmos-postgres- de PostgreSQL) Apps
aca
Plantilla Marco Base de datos Plataforma de Repositorio de
web hospedaje GitHub
azure-django- Django Cosmos DB (adaptador Azure App repo
cosmos-postgres- de PostgreSQL) Service
appservice

azure-django- Django Complemento Azure Container repo


postgres-addon-aca PostgreSQL de Azure Apps
Container Apps

FastAPI

Plantilla Marco Base de datos Plataforma de Repositorio de


web hospedaje GitHub

azure-fastapi- FastAPI Servidor flexible de Azure Container repo


postgres-flexible- PostgreSQL Apps
aca

azure-fastapi- FastAPI Servidor flexible de Azure App repo


postgres-flexible- PostgreSQL Service
appservice

azure-fastapi- FastAPI Cosmos DB (adaptador Azure Container repo


cosmos-postgres- de PostgreSQL) Apps
aca

azure-fastapi- FastAPI Cosmos DB (adaptador Azure App repo


cosmos-postgres- de PostgreSQL) Service
appservice

azure-fastapi- FastAPI Complemento Azure Container repo


postgres-addon-aca PostgreSQL de Azure Apps
Container Apps

Flask

Plantilla Marco Base de datos Plataforma de Repositorio de


web hospedaje GitHub

azure-flask- Flask Servidor flexible de Azure Container repo


postgres-flexible- PostgreSQL Apps
aca

azure-flask- Flask Servidor flexible de Azure App repo


postgres-flexible- PostgreSQL Service
appservice

azure-flask-cosmos- Flask Cosmos DB (adaptador de Azure Container repo


postgres-aca PostgreSQL) Apps
Plantilla Marco Base de datos Plataforma de Repositorio de
web hospedaje GitHub

azure-flask-cosmos- Flask Cosmos DB (adaptador de Azure App repo


postgres-appservice PostgreSQL) Service

azure-flask- Flask Complemento Azure Container repo


postgres-addon-aca PostgreSQL de Azure Apps
Container Apps

azure-flask-cosmos- Flask Cosmos DB (MongoDB) Azure Container repo


mongodb-aca Apps

azure-flask-cosmos- Flask Cosmos DB (MongoDB) Azure App repo


mongodb- Service
appservice

¿Cómo funcionan las plantillas?


Use varios azd comandos para realizar tareas definidas por una plantilla azd. Estos
comandos se tratan en detalle en Introducción al uso de la CLI para desarrolladores de
Azure.

La plantilla azd consta de un repositorio de GitHub que contiene el código de aplicación


(código de Python que usa un marco web popular) y los archivos de infraestructura
como código (es decir, Bicep) para crear los recursos de Azure. También contiene la
configuración necesaria para configurar un repositorio de GitHub con una canalización
de CI/CD.

El inicio rápido le guía por los pasos para usar una plantilla azd específica. Solo requiere
ejecutar cinco instrucciones de línea de comandos para el entorno de hospedaje de
producción y el entorno de desarrollo local:

1. azd init --template <template name> : crea un nuevo proyecto a partir de una
plantilla y crea una copia del código de aplicación en el equipo local. El comando
le pide que proporcione un nombre de entorno (como "myapp") que se usa como
prefijo int en la nomenclatura de los recursos implementados.
2. azd auth login : inicia sesión en Azure. El comando abre una ventana del
explorador donde puede iniciar sesión en Azure. Después de iniciar sesión, se
cierra la ventana del explorador y se completa el comando. El azd auth login
comando solo es necesario la primera vez que use la CLI para desarrolladores de
Azure (azd) por sesión.
3. azd up : aprovisiona los recursos en la nube e implementa la aplicación en esos
recursos.
4. azd deploy : implementa los cambios en el código fuente de la aplicación en los
recursos ya aprovisionados por azd up .
5. azd down : elimina los recursos de Azure y la canalización de CI/CD si se usó.

 Sugerencia

Vea la salida de azd las solicitudes que necesita responder. Por ejemplo, después
de ejecutar el azd up comando, puede que se le pida que seleccione una
suscripción si pertenece a más de una. Además, se le pedirá que seleccione una
región. Puede cambiar las respuestas a las solicitudes editando las variables de
entorno almacenadas en la carpeta /.azure/ de la plantilla.

Una vez finalizada la plantilla, tiene una copia personal de la plantilla original donde
puede modificar cada archivo según sea necesario. Como mínimo, puede modificar el
código del proyecto de Python para que el proyecto tenga la lógica de diseño y
aplicación. También puede modificar la configuración de infraestructura como código si
necesita cambiar los recursos de Azure. Consulte la sección titulada ¿Qué puedo editar o
eliminar?

Opcional: Modificar y volver a aprovisionar recursos de Azure

Si desea cambiar los recursos de Azure que se aprovisionan, puede editar los archivos
de Bicep adecuados en la plantilla y usarlos:

6. azd provision : vuelve a aprovisionar los recursos de Azure en el estado deseado


tal como se define en los archivos de Bicep.

Configuración de una canalización de CI/CD


La CLI para desarrolladores de Azure (azd) proporciona una manera sencilla de
configurar una canalización de CI/CD para la nueva aplicación web de Python. Cada vez
que combina confirmaciones o solicitudes de incorporación de cambios en la rama
principal, la canalización de CI/CD compila y publica automáticamente los cambios en
los recursos de Azure.

Opcional: configurar automáticamente la canalización de CI/CD de Acciones de


GitHub

Si desea implementar la funcionalidad de canalización de CI/CD de Acciones de GitHub,


use el siguiente comando:
1. azd pipeline config : permite designar un repositorio y una configuración de
GitHub para habilitar la canalización de CI\CD. Una vez configurado, cada vez que
se combinan los cambios de código en la rama principal del repositorio, la
canalización implementa los cambios en los servicios de Azure aprovisionados.

¿Cuáles son mis otras opciones?


Si no quiere usar plantillas azd, puede implementar la aplicación de Python en Azure y
crear recursos de Azure de muchas maneras.

Puede realizar muchos de los pasos de creación e implementación de recursos mediante


una de las siguientes herramientas:

Azure Portal
CLI de Azure
Visual Studio Code con la extensión Azure Tools

O bien, si busca un tutorial completo que incluya marcos de desarrollo web de Python,
consulte:

Implementación de una aplicación web de Flask o FastPI en Azure App Service


Aplicación web de Python en contenedor en Azure con MongoDB

¿Tengo que usar contenedores de desarrollo?


No. Las plantillas azd web de Python usan contenedores de desarrollo de forma
predeterminada. Los contenedores de desarrollo proporcionan muchas ventajas, pero
requieren algunos conocimientos y software previos. Si no quiere usar contenedores de
desarrollo y prefiere usar el entorno de desarrollo local en su lugar, consulte el archivo
[Link] en el directorio raíz de la aplicación de ejemplo para obtener instrucciones
de configuración del entorno.

¿Qué puedo editar o eliminar?


El contenido de cada plantilla azd puede variar según el tipo de proyecto y la pila de
tecnología subyacente empleada. Las plantillas enumeradas en este artículo siguen una
convención común:

Carpeta o Propósito Descripción


archivos

/ directorio raíz El directorio raíz contiene muchos tipos diferentes de


Carpeta o Propósito Descripción
archivos

archivos y carpetas para muchos propósitos diferentes.

/.Azul azd configuration Contiene las variables de entorno que usan los comandos
files de la CLI para desarrolladores de Azure (azd). Esta
carpeta se crea después de ejecutar el azd init
comando . Puede cambiar los valores de las variables de
entorno para personalizar la aplicación y los recursos de
Azure. Para obtener más información, vea Archivo .env
específico del entorno.

/.devcontainer Archivos de Los contenedores de desarrollo permiten crear un


configuración del entorno de desarrollo basado en contenedores completo
contenedor de con todos los recursos que necesita para el desarrollo de
desarrollo software dentro de Visual Studio Code.

.github/ Configuración de Contiene los valores de configuración de la canalización


Acciones de opcional de CI/CD de Acciones de GitHub, así como
GitHub linting y pruebas. El archivo [Link] se puede
modificar o eliminar si no desea configurar la canalización
de Acciones de GitHub mediante azd pipeline config el
comando .

/Infra Archivos de Bicep Bicep permite declarar los recursos de Azure que desea
implementar en el entorno. Solo debe modificar los
archivos [Link] y [Link] .

src/ archivos de código Incluye las plantillas necesarias para el marco web, los
de proyecto de archivos estáticos, los archivos .py para la lógica de
inicio código y los modelos de datos, un [Link] , etc.
Los archivos específicos dependen del marco web, del
marco de acceso a datos, etc. Puede modificar estos
archivos para que se adapten a los requisitos del
proyecto.

/.[Link] archivo de Se usa internamente para generar las plantillas azd.


generación de Puede eliminar este archivo de forma segura.
plantillas

/.gitattributes Atributos de Git Proporciona a Git una configuración importante sobre el


control de archivos y carpetas. Puede modificar este
archivo según sea necesario.

/.gitignore git ignore Indica a Git que omita archivos y carpetas de que se
incluyan en el repositorio. Puede modificar este archivo
según sea necesario.

/[Link] azd configuration Contiene los valores de configuración para azd up


file declarar qué servicios y carpetas de proyecto se
Carpeta o Propósito Descripción
archivos

implementarán. Este archivo NO DEBE eliminarse.

/*.Md Archivos Hay varios archivos markdown con distintos fines. Puede
markdown eliminar estos archivos de forma segura.

/docker- Docker Compose Crea el paquete de contenedor para la aplicación antes


[Link] de implementarlo en Azure.

/[Link] Sistema de Contiene los requisitos del sistema de compilación de


compilación de proyectos de Python. Puede modificar este archivo para
Python incluir las herramientas preferidas (por ejemplo, para usar
un marco de pruebas unitarias y linter).

/requirements- Archivo de Se usa para crear una versión del entorno de desarrollo
[Link] requisitos de pip de los requisitos mediante pip install -r el comando .
Puede modificar este archivo para incluir otros paquetes
según sea necesario.

 Sugerencia

Use buenas prácticas de control de versiones para poder volver a un momento


dado cuando el proyecto estaba trabajando en caso de que interrumpa algo.

Preguntas más frecuentes


P: Tengo un error al usar una plantilla azd. ¿Qué puedo hacer?

R: Consulte Solución de problemas de la CLI para desarrolladores de Azure. También


puede notificar problemas en el repositorio de GitHub de la plantilla azd
correspondiente.
Inicio rápido: Creación e
implementación de una aplicación web
de Python en Azure mediante una
plantilla azd
Artículo • 05/10/2023

Este inicio rápido le guía por la manera más fácil y rápida de crear e implementar una
solución web y de base de datos de Python en Azure. Siguiendo las instrucciones de
este inicio rápido, hará lo siguiente:

Elija una plantilla azd basada en el marco web de Python, la plataforma de base de
datos de Azure y la plataforma de hospedaje web de Azure en la que desea
compilar.
Use comandos de la CLI para ejecutar una plantilla azd para crear una base de
datos y una aplicación web de ejemplo, y crear y configurar los recursos de Azure
necesarios y, a continuación, implementar la aplicación web de ejemplo en Azure.
Edite la aplicación web en el equipo local y use un comando azd para volver a
implementar.
Use un comando azd para limpiar los recursos de Azure.

Este tutorial tardará menos de 15 minutos en completarse. Tras la finalización, puede


empezar a modificar el nuevo proyecto con el código personalizado.

Para más información sobre estas plantillas azd para el desarrollo de aplicaciones web
de Python:

¿Cuáles son estas plantillas?


¿Cómo funcionan las plantillas?
¿Por qué querría hacer esto?
¿Cuáles son mis otras opciones?

Requisitos previos
Una suscripción a Azure: cree una cuenta gratuita .

Debe tener instalado lo siguiente en el equipo local:

1. CLI de desarrollo de Azure


2. Docker Desktop
3. Visual Studio Code
4. Extensión de contenedor de desarrollo

Seleccionar una plantilla


Elija una plantilla azd basada en el marco web de Python, la plataforma de hospedaje
web de Azure y la plataforma de base de datos de Azure en la que desea compilar.

1. Seleccione un nombre de plantilla (primera columna) de la siguiente lista de


plantillas en las tablas siguientes. Usará el nombre de la plantilla durante el azd
init paso de la sección siguiente.

Django

Plantilla Marco Base de datos Plataforma de Repositorio de


web hospedaje GitHub

azure-django- Django Servidor flexible de Azure Container repo


postgres-flexible- PostgreSQL Apps
aca

azure-django- Django Servidor flexible de Azure App repo


postgres-flexible- PostgreSQL Service
appservice

azure-django- Django Cosmos DB (adaptador Azure Container repo


cosmos-postgres- de PostgreSQL) Apps
aca

azure-django- Django Cosmos DB (adaptador Azure App repo


cosmos-postgres- de PostgreSQL) Service
appservice

azure-django- Django Complemento Azure Container repo


postgres-addon-aca PostgreSQL de Azure Apps
Container Apps

FastAPI

Plantilla Marco Base de datos Plataforma de Repositorio de


web hospedaje GitHub

azure-fastapi- FastAPI Servidor flexible de Azure Container repo


postgres-flexible- PostgreSQL Apps
aca
Plantilla Marco Base de datos Plataforma de Repositorio de
web hospedaje GitHub

azure-fastapi- FastAPI Servidor flexible de Azure App repo


postgres-flexible- PostgreSQL Service
appservice

azure-fastapi- FastAPI Cosmos DB (adaptador Azure Container repo


cosmos-postgres- de PostgreSQL) Apps
aca

azure-fastapi- FastAPI Cosmos DB (adaptador Azure App repo


cosmos-postgres- de PostgreSQL) Service
appservice

azure-fastapi- FastAPI Complemento Azure Container repo


postgres-addon-aca PostgreSQL de Azure Apps
Container Apps

Flask

Plantilla Marco Base de datos Plataforma de Repositorio de


web hospedaje GitHub

azure-flask- Flask Servidor flexible de Azure Container repo


postgres-flexible- PostgreSQL Apps
aca

azure-flask- Flask Servidor flexible de Azure App repo


postgres-flexible- PostgreSQL Service
appservice

azure-flask-cosmos- Flask Cosmos DB (adaptador de Azure Container repo


postgres-aca PostgreSQL) Apps

azure-flask-cosmos- Flask Cosmos DB (adaptador de Azure App repo


postgres-appservice PostgreSQL) Service

azure-flask- Flask Complemento Azure Container repo


postgres-addon-aca PostgreSQL de Azure Apps
Container Apps

azure-flask-cosmos- Flask Cosmos DB (MongoDB) Azure Container repo


mongodb-aca Apps

azure-flask-cosmos- Flask Cosmos DB (MongoDB) Azure App repo


mongodb- Service
appservice
El repositorio de GitHub (última columna) solo se proporciona con fines de referencia.
Solo debe clonar el repositorio directamente si desea contribuir a cambios en la
plantilla. De lo contrario, siga las instrucciones de este inicio rápido para usar la CLI de
azd para interactuar con la plantilla en un flujo de trabajo normal.

Ejecución de la plantilla
La ejecución de una plantilla azd es la misma en todos los lenguajes y marcos de
trabajo. Además, se aplican los mismos pasos básicos a todas las plantillas. Los pasos
son:

1. En un terminal, vaya a una carpeta en el equipo local donde normalmente


almacena los repositorios git locales y, a continuación, cree una carpeta
denominada azdtest. A continuación, cambie a ese directorio mediante el cd
comando .

shell

mkdir azdtest
cd azdtest

No use Visual Studio Code Terminal para esta guía de inicio rápido.

2. Para configurar el entorno de desarrollo local, escriba los siguientes comandos en


el terminal y responda a las indicaciones:

shell

azd init --template <template name>

Sustituya <template name> por una de las plantillas de las tablas que seleccionó en
un paso anterior, como azure-django-postgres-aca , por ejemplo.

Cuando se le solicite un nombre de entorno, use azdtest o cualquier otro nombre.


El nombre del entorno se usa al asignar nombres a grupos de recursos y recursos
de Azure. Para obtener los mejores resultados, use un nombre corto, últimos en
minúsculas, sin caracteres especiales.

3. Para autenticar azd en su cuenta de Azure, escriba los siguientes comandos en el


terminal y siga el símbolo del sistema:

shell
azd auth login

Siga las instrucciones cuando se le pida que "Elija una cuenta" o inicie sesión en su
cuenta de Azure. Una vez que se haya autenticado correctamente, se muestra el
siguiente mensaje en una página web: "Autenticación completada. Puede volver a
la aplicación. No dude en cerrar esta pestaña del navegador".

Al cerrar la pestaña, el shell muestra el mensaje:

Resultados

Logged in to Azure.

4. Asegúrese de que Docker Desktop está abierto y ejecutándose en segundo plano


antes de intentar el paso siguiente.

5. Para crear los recursos de Azure necesarios, escriba los siguientes comandos en el
terminal y responda a las indicaciones:

shell

azd up

) Importante

Una vez azd up completada correctamente, la aplicación web de ejemplo


estará disponible en la red pública de Internet y la suscripción de Azure
comenzará a acumular cargos por todos los recursos creados. Los creadores
de las plantillas azd eligieron intencionadamente los niveles económicos, pero
no necesariamente los niveles gratuitos , ya que los niveles gratis suelen tener
disponibilidad restringida.

Siga las instrucciones cuando se le pida que elija la suscripción de Azure que se
usará para el pago y, a continuación, seleccione una ubicación de Azure para
usarla. Elija una región cercana geográficamente.

La azd up ejecución puede tardar varios minutos, ya que se aprovisiona e


implementa varios servicios de Azure. A medida que se muestra el progreso, watch
los errores. Si ve errores, pruebe lo siguiente para corregir el problema:
Elimine la carpeta azd-quickstart y las instrucciones de inicio rápido desde el
principio.
Cuando se le solicite, elija un nombre más sencillo para su entorno. Use solo
letras minúsculas y guiones. No hay números, letras mayúsculas ni caracteres
especiales.
Elija otra ubicación.

Si sigue teniendo problemas, consulte la sección Solución de problemas en la


parte inferior de este documento.

) Importante

Una vez que haya terminado de trabajar con la aplicación web de ejemplo,
use azd down para quitar todos los servicios creados por azd up .

6. Cuando azd up se completa correctamente, se muestra la siguiente salida:

Copie la primera dirección URL después de la palabra - Endpoint: y péguela en la


barra de ubicación de un explorador web para ver el proyecto de aplicación web
de ejemplo que se ejecuta en directo en Azure.

7. Abra una nueva pestaña en el explorador web, copie la segunda dirección URL del
paso anterior y péguela en la barra de ubicación. Azure Portal muestra todos los
servicios del nuevo grupo de recursos que se han implementado para hospedar el
proyecto de aplicación web de ejemplo.

Edición y reimplementación
El siguiente paso consiste en realizar un pequeño cambio en la aplicación web y, a
continuación, volver a implementarlo.
1. Abra Visual Studio Code y abra la carpeta azd-quickstart creada anteriormente.

2. Esta plantilla está configurada para usar opcionalmente Contenedores de


desarrollo. Cuando vea que aparece la notificación contenedora de desarrollo en
Visual Studio Code, seleccione el botón "Volver a abrir en el contenedor".

3. Use la vista Explorador de Visual Studio Code para ir a la carpeta src/templates y


abrir el archivo [Link]. Busque la línea de código siguiente:

HTML

<h1 id="pagte-title">Welcome to ReleCloud</h1>

Cambie el texto dentro del H1:

HTML

<h1 id="pagte-title">Welcome to ReleCloud - UPDATED</h1>

Guarde los cambios.

4. Para volver a implementar la aplicación con el cambio, en el terminal, ejecute el


siguiente comando:

Shell

azd deploy

Dado que usa contenedores de desarrollo y está conectado de forma remota al


shell del contenedor, no use el panel Terminal de Visual Studio Code para ejecutar
comandos azd.

5. Una vez completado el comando, actualice el explorador web para ver la


actualización. En función de la plataforma de hospedaje web que se use, los
cambios pueden tardar varios minutos antes de que los cambios estén visibles.

Ya está listo para editar y eliminar archivos en la plantilla. Para obtener más
información, consulte ¿Qué puedo editar o eliminar en la plantilla?

Limpieza de recursos
1. Limpie los recursos creados por la plantilla ejecutando el comando azd down .
Shell

azd down

El azd down comando elimina los recursos de Azure y el flujo de trabajo de


Acciones de GitHub. Cuando se le solicite, acepte eliminar todos los recursos
asociados al grupo de recursos.

También puede eliminar la carpeta azdtest o usarla como base para su propia
aplicación modificando los archivos del proyecto.

Solución de problemas
Si ve errores durante azd up , pruebe los pasos siguientes:

Ejecute azd down para quitar los recursos que se pueden haber creado. Como
alternativa, puede eliminar el grupo de recursos que se creó en Azure Portal.
Elimine la carpeta azdtest en el equipo local.
En Azure Portal, busque Almacenes de claves. Seleccione Administrar almacenes
eliminados, elija la suscripción, seleccione todos los almacenes de claves que
contengan el nombre azdtest o lo que haya llamado su entorno y seleccione
Purgar.
Vuelva a intentar los pasos de este inicio rápido. Esta vez, cuando se le solicite, elija
un nombre más sencillo para su entorno. Pruebe un nombre corto, letras
minúsculas, sin números, sin letras mayúsculas, sin caracteres especiales.
Al reintentar los pasos de inicio rápido, elija otra ubicación.

Consulte las preguntas más frecuentes para obtener una lista más completa de posibles
problemas y soluciones.

Contenido relacionado
Más información sobre las plantillas azd web de Python
Obtenga más información sobre los azd comandos.
Obtenga información sobre qué hacen cada una de las carpetas y los archivos del
proyecto y qué puede editar o eliminar?
Obtenga más información sobre los contenedores de desarrollo .
Actualice las plantillas de Bicep para agregar o quitar servicios de Azure. ¿No
conoce Bicep? Pruebe esta ruta de aprendizaje: Aspectos básicos de Bicep
Use azd para configurar una canalización de CI/CD de Acciones de GitHub para
volver a implementar la combinación en la rama principal.
Configure la supervisión para que pueda supervisar la aplicación mediante el Azure
Developer CLI
Inicio rápido: Creación e
implementación de una aplicación web
de Python desde GitHub Codespaces en
Azure mediante una plantilla de la CLI
para desarrolladores de Azure
Artículo • 16/12/2023

Este inicio rápido le guía a través de la manera más sencilla y rápida de crear e
implementar una solución web y de base de datos de Python en Azure. Siguiendo las
instrucciones de este inicio rápido, hará lo siguiente:

Elija una plantilla de la CLI para desarrolladores de Azure ( azd ) basada en el marco
web de Python, la plataforma de base de datos de Azure y la plataforma de
hospedaje web de Azure en la que quiera compilar.
Cree un nuevo código de GitHub Codespace que contenga el código generado a
partir de la azd plantilla seleccionada.
Use GitHub Codespaces y el terminal bash de Visual Studio Code en línea. El
terminal permite usar comandos de la CLI para desarrolladores de Azure para
ejecutar una azd plantilla para crear una base de datos y una aplicación web de
ejemplo, y crear y configurar los recursos de Azure necesarios y, a continuación,
implementar la aplicación web de ejemplo en Azure.
Edite la aplicación web en un espacio de código de GitHub y use un azd comando
para volver a implementar.
Use un azd comando para limpiar los recursos de Azure.
Cierre y vuelva a abrir gitHub Codespace.
Publique el nuevo código en un repositorio de GitHub.

Este tutorial tardará menos de 25 minutos en completarse. Al finalizar, puede empezar a


modificar el nuevo proyecto con el código personalizado.

Para más información sobre estas azd plantillas para el desarrollo de aplicaciones web
de Python:

¿Cuáles son estas plantillas?


¿Cómo funcionan las plantillas?
¿Por qué querría hacer esto?
¿Cuáles son mis otras opciones?
Requisitos previos
Una suscripción a Azure: cree una cuenta gratuita .
Una cuenta de GitHub: crear una gratuitamente

) Importante

Tanto GitHub Codespaces como Azure son servicios basados en suscripciones de


pago. Después de algunas asignaciones gratuitas, puede que se le cobre por usar
estos servicios. Después de este inicio rápido, podría afectar a estas asignaciones o
facturación. Cuando es posible, las plantillas azd se crearon con el nivel de
opciones menos costoso, pero es posible que algunos no sean gratuitos. Use la
calculadora de precios de Azure para comprender mejor los costos. Para más
información, consulte Precios de GitHub Codespaces para obtener más
información.

Elección de una plantilla y creación de un


espacio de código
Elija una azd plantilla basada en el marco web de Python, la plataforma de hospedaje
web de Azure y la plataforma de base de datos de Azure en la que quiera compilar.

1. En la siguiente lista de plantillas, elija una que use las tecnologías que desea usar
en la nueva aplicación web.

Django

ノ Expandir tabla

Plantilla Marco Base de datos Plataforma Nuevo


web de hospedaje espacio de
código

azure-django- Django Servidor flexible de Azure Nuevo


postgres- PostgreSQL Container espacio de
flexible-aca Apps código

azure-django- Django Servidor flexible de Azure App Nuevo


postgres- PostgreSQL Service espacio de
flexible- código
appservice
Plantilla Marco Base de datos Plataforma Nuevo
web de hospedaje espacio de
código

azure-django- Django Cosmos DB Azure Nuevo


cosmos- (adaptador de Container espacio de
postgres-aca PostgreSQL) Apps código

azure-django- Django Cosmos DB Azure App Nuevo


cosmos- (adaptador de Service espacio de
postgres- PostgreSQL) código
appservice

azure-django- Django Complemento Azure Nuevo


postgres-addon- PostgreSQL de Azure Container espacio de
aca Container Apps Apps código

2. Para mayor comodidad, la última columna de cada tabla contiene un vínculo que
crea un nuevo Codespace e inicializa la plantilla en la azd cuenta de GitHub. Haga
clic con el botón derecho y seleccione "Abrir en nueva pestaña" en el vínculo
"Nuevo espacio de código" junto al nombre de plantilla que seleccionó para iniciar
el proceso de instalación.

Durante este proceso, es posible que se le pida que inicie sesión en su cuenta de
GitHub y se le pedirá que confirme que desea crear codespace. Seleccione el
botón "Crear espacio de código" para ver la página "Configurar el espacio de
código".

3. Después de unos minutos, se carga una versión basada en web de Visual Studio
Code en una nueva pestaña del explorador con la plantilla web de Python cargada
como un área de trabajo en la vista Explorador.

Autenticación en Azure e implementación de la


plantilla azd
Ahora que tiene un espacio de código de GitHub que contiene el código recién
generado, use la azd utilidad desde codespace para publicar el código en Azure.

1. En Visual Studio Code basado en web, el terminal debe estar abierto de forma
predeterminada. Si no es así, use la tecla tilde ~ para abrir el terminal. Además, de
forma predeterminada, el terminal debe ser un terminal bash. Si no es así, cambie
a Bash en el área superior derecha de la ventana del terminal.
2. En el terminal de Bash, escriba el siguiente comando:

Bash

azd auth login

azd auth login comienza el proceso de autenticación de Codespace en su cuenta

de Azure.

Resultados

Start by copying the next code: XXXXXXXXX


Then press enter and continue to log in from your browser...

Waiting for you to complete authentication in the browser...

3. Siga las instrucciones, entre las que se incluyen:

Copia de un código generado


Selección de entrar para abrir una nueva pestaña del explorador y pegar el
código en el cuadro de texto
Elección de la cuenta de Azure en una lista
Confirmación de que está intentando iniciar sesión en la CLI de Microsoft
Azure

4. Cuando se ejecuta correctamente, el mensaje siguiente se muestra de nuevo en la


pestaña Codespaces del terminal:

Resultados

Device code authentication completed.


Logged in to Azure.

5. Implemente la nueva aplicación en Azure escribiendo el siguiente comando:

Bash

azd up

Durante este proceso, se le pide que:

Escribir un nuevo nombre de entorno


Seleccione una suscripción de Azure para usar [Usar flechas para mover,
escriba para filtrar]
Seleccione una ubicación de Azure que se va a usar: [Use flechas para mover,
escriba para filtrar]

Una vez que responda a esas preguntas, la salida de azd indica que la
implementación está progresando.

) Importante

Una vez azd up completada correctamente, la aplicación web de ejemplo


estará disponible en la red pública de Internet y la suscripción de Azure
comenzará a acumular cargos por todos los recursos que se crean. Los
creadores de las azd plantillas eligieron intencionadamente niveles
económicos, pero no necesariamente niveles gratuitos , ya que los niveles
gratuitos a menudo tienen disponibilidad restringida. Una vez que haya
terminado de trabajar con la aplicación web de ejemplo, use azd down para
quitar todos los servicios creados por azd up .

Siga las instrucciones cuando se le pida que elija La suscripción de Azure que se
usará para el pago y, a continuación, seleccione una ubicación de Azure que se va
a usar. Elija una región cercana geográficamente.

azd up La ejecución puede tardar varios minutos, ya que se aprovisiona e

implementa varios servicios de Azure. A medida que se muestra el progreso,


observe si hay errores. Si ve errores, consulte la sección Solución de problemas en
la parte inferior de este documento.

6. Cuando azd up se completa correctamente, se muestra una salida similar:

Resultados

(✓) Done: Deploying service web


- Endpoint: [Link]
[Link]/

SUCCESS: Your application was provisioned and deployed to Azure in 11


minutes 44 seconds.
You can view the resources created under the resource group xxxxx-rg in
Azure Portal:
[Link]
xxxx-xxxxxxxxxxxx/resourceGroups/xxxxx-rg/overview

Si ve una pantalla predeterminada o una pantalla de error, es posible que la


aplicación se inicie. Espere entre 5 y 10 minutos para ver si el problema se resuelve
antes de solucionarlo.
Ctrl + haga clic en la primera dirección URL después de la palabra - Endpoint:
para ver el proyecto de aplicación web de ejemplo que se ejecuta en vivo en Azure.

7. Ctrl + haga clic en la segunda dirección URL del paso anterior para ver los recursos
aprovisionados en Azure Portal.

Edición y reimplementación
El siguiente paso consiste en realizar un pequeño cambio en la aplicación web y, a
continuación, volver a implementar.

1. Vuelva a la pestaña del explorador que contiene Visual Studio Code y use la vista
Explorador de Visual Studio Code para ir a la carpeta src/templates y abrir el
archivo [Link] . Busque la línea de código siguiente:

HTML

<h1 id="page-title">Welcome to ReleCloud</h1>

Cambie el texto dentro del H1:

HTML

<h1 id="page-title">Welcome to ReleCloud - UPDATED</h1>

El código se guarda mientras escribe.

2. Para volver a implementar la aplicación con el cambio, ejecute el siguiente


comando en el terminal:

Bash

azd deploy

3. Una vez completado el comando, actualice la pestaña del explorador con el sitio
web de ReleCloud para ver la actualización. Dependiendo de la plataforma de
hospedaje web que se use, puede tardar varios minutos antes de que los cambios
sean visibles.

Ya está listo para editar y eliminar archivos en la plantilla. Para obtener más
información, consulte ¿Qué puedo editar o eliminar en la plantilla?
Limpieza de recursos
Limpie los recursos creados por la plantilla ejecutando el comando azd down .

Bash

azd down

El azd down comando elimina los recursos de Azure y el flujo de trabajo de Acciones de
GitHub. Cuando se le solicite, acepte eliminar todos los recursos asociados al grupo de
recursos.

Opcional: Busque el espacio de código.


En esta sección se muestra cómo se ejecuta el código (temporalmente) y se conserva a
corto plazo en un codespace. Si planea seguir trabajando en el código, debe publicar el
código en un nuevo repositorio.

1. Cierre todas las pestañas relacionadas con este artículo de inicio rápido o cierre
completamente el explorador web.

2. Abra el explorador web y una nueva pestaña y vaya a:


[Link]

3. Cerca de la parte inferior, verá una lista de los espacios de código recientes.
Busque la que creó en una sección denominada "Propiedad de Azure-Samples".

4. Seleccione los puntos suspensivos situados a la derecha de codespace para ver un


menú contextual. Desde aquí puede cambiar el nombre del espacio de código,
publicar en un nuevo repositorio, cambiar el tipo de máquina, detener el espacio
de código, etc.

Opcional: Publicación de un repositorio de


GitHub desde Codespaces
En este momento, tiene un codespace, que es un contenedor hospedado por GitHub
que ejecuta el entorno de desarrollo de Visual Studio Code con el nuevo código
generado a partir de una azd plantilla. Sin embargo, el código no se almacena en un
repositorio de GitHub. Si planea seguir trabajando en el código, debe hacer que sea una
prioridad.
1. En el menú contextual del espacio de código, seleccione "Publicar en un nuevo
repositorio".
2. En el cuadro de diálogo "Publicar en un nuevo repositorio", cambie el nombre del
nuevo repositorio y elija si desea que sea un repositorio público o privado.
Seleccione "Crear repositorio".
3. Después de unos instantes, se creará el repositorio y el código que generó
anteriormente en este inicio rápido se insertará en el nuevo repositorio. Seleccione
el botón "Ver repositorio" para ir al nuevo repositorio.
4. Para volver a abrir y continuar con la edición de código, seleccione la lista
desplegable verde "<> Código", cambie a la pestaña Codespaces y seleccione el
nombre del espacio de código en el que estaba trabajando anteriormente. Ahora
debe volver al entorno de desarrollo de Visual Studio Codespace.
5. Use el panel Control de código fuente para crear nuevas ramas y almacenar
provisionalmente y confirmar nuevos cambios en el código.

Solución de problemas
Si ve errores durante azd up , pruebe lo siguiente:

Ejecute azd down para quitar los recursos que se puedan haber creado. Como
alternativa, puede eliminar el grupo de recursos que se creó en Azure Portal.
Vaya a la página Codespaces de la cuenta de GitHub, busque Codespace creado
durante este inicio rápido, seleccione los puntos suspensivos a la derecha y elija
"Eliminar" en el menú contextual.
En Azure Portal, busque Almacenes de claves. Seleccione Administrar almacenes
eliminados, elija la suscripción, seleccione todos los almacenes de claves que
contengan el nombre azdtest o lo que haya llamado su entorno y seleccione
Purgar.
Vuelva a intentar los pasos de este inicio rápido. Esta vez, cuando se le solicite, elija
un nombre más sencillo para su entorno. Pruebe un nombre corto, letras
minúsculas, sin números, sin letras mayúsculas, sin caracteres especiales.
Al reintentar los pasos de inicio rápido, elija otra ubicación.

Consulte las preguntas más frecuentes para obtener una lista más completa de posibles
problemas y soluciones.

Contenido relacionado
Más información sobre las plantillas de azd web de Python
Obtenga más información sobre los azd comandos.
Obtenga información sobre qué hacen cada una de las carpetas y los archivos del
proyecto y qué puede editar o eliminar?
Más información sobre GitHub Codespaces
Actualice las plantillas de Bicep para agregar o quitar servicios de Azure. ¿No
conoces a Bicep? Pruebe esta ruta de aprendizaje: Aspectos básicos de Bicep
Use azd para configurar una canalización de CI/CD de Acciones de GitHub para
volver a implementar la combinación en la rama principal.
Configuración de la supervisión para que pueda supervisar la aplicación mediante
la CLI para desarrolladores de Azure
Inicio rápido: Escalado de servicios
implementados con las plantillas web de
Python azd mediante Bicep
Artículo • 23/12/2023

Las plantillas web azd de Python le permiten crear rápidamente una nueva aplicación
web e implementarla en Azure. Las azd plantillas se diseñaron para usar opciones de
servicio de Azure de bajo costo. Sin duda, querrá ajustar los niveles de servicio (o sku)
para cada uno de los servicios definidos en la plantilla para su escenario.

En este inicio rápido, actualizará los archivos de plantilla de bicep adecuados para
escalar verticalmente los servicios existentes y agregará nuevos servicios a la
implementación. A continuación, ejecutará el azd provision comando y verá el cambio
realizado en la implementación de Azure.

Requisitos previos
Una suscripción a Azure: cree una cuenta gratuita .

Debe tener instalado lo siguiente en el equipo local:

CLI de desarrollo de Azure


Docker Desktop
Visual Studio Code
Extensión del contenedor de desarrollo
Visual Studio Code Bicep Esta extensión le ayuda a crear la sintaxis de Bicep.

Implementación de una plantilla


Para empezar, necesita una implementación en funcionamiento azd . Una vez que lo
tenga, podrá modificar los archivos de Bicep generados por la azd plantilla.

1. Siga los pasos del 1 al 7 del artículo Inicio rápido. En el paso 2, use la azure-
django-postgres-flexible-appservice plantilla. Para mayor comodidad, esta es la

secuencia completa de comandos que se van a emitir desde la línea de comandos:

shell
mkdir azdtest
cd azdtest
azd init --template azure-django-postgres-flexible-appservice
azd auth login
azd up

Una vez azd up finalizado, abra Azure Portal, vaya a la App de Azure Service que se
implementó en el nuevo grupo de recursos y anote el plan de precios de App
Service (consulte la página Información general del plan de App Service, sección
Essentials, valor "Plan de precios").

2. En el paso 1 del artículo inicio rápido, se le indicó que creara la carpeta azdtest .
Abra esa carpeta en Visual Studio Code.

3. En el panel Explorador, vaya a la carpeta infra . Observe las subcarpetas y los


archivos de la carpeta infra .

El archivo [Link] organiza la creación de todos los servicios implementados al


realizar o azd up azd provision . Llama a otros archivos, como [Link] y
[Link], que a su vez llaman a archivos contenidos en la subcarpeta \core.

La subcarpeta \core es una estructura de carpetas profundamente anidada que


contiene plantillas de bicep para muchos servicios de Azure. Algunos de los
archivos de la subcarpeta \core son referenciados por los tres archivos bicep de
nivel superior ([Link], [Link] y [Link]) y algunos no se usan en absoluto
en este proyecto.

Escalado de un servicio modificando sus


propiedades de Bicep
Puede escalar un recurso existente en la implementación cambiando su SKU. Para
demostrarlo, cambiará el plan de App Service del "plan de servicio básico" (que está
diseñado para aplicaciones con requisitos de tráfico más bajos y no necesita
características avanzadas de escalado automático y administración de tráfico) al "plan de
servicio estándar", que está diseñado para ejecutar cargas de trabajo de producción.

7 Nota

No todos los cambios de SKU se pueden realizar después del hecho. Algunas
investigaciones pueden ser necesarias para comprender mejor las opciones de
escalado.
1. Abra el archivo [Link] y busque la definición del appService módulo. En
concreto, busque el valor de la propiedad :

Bicep

sku: {
name: 'B1'
}

Cambie el valor de a B1 S1 como se indica a continuación:

Bicep

sku: {
name: 'S1'
}

) Importante

Como resultado de este cambio, el precio por hora aumentará ligeramente.


Puede encontrar detalles sobre los diferentes planes de servicio y sus costos
asociados en la página de precios de App Service.

2. Suponiendo que ya tiene la aplicación implementada en Azure, use el siguiente


comando para implementar los cambios en la infraestructura sin volver a
implementar el propio código de la aplicación.

shell

azd provision

No se le debe solicitar una ubicación ni una suscripción. Estos valores se guardan


en el archivo .azure<[Link]>, donde <environment-name> es el
nombre de entorno que proporcionó durante azd init .

3. Cuando azd provision haya finalizado, confirme que la aplicación web sigue
funcionando. Busque también el plan de App Service para el grupo de recursos y
confirme que el plan de precios está establecido en el plan de servicio estándar
(S1).
Adición de una nueva definición de servicio
con Bicep
Puede agregar un nuevo recurso a la implementación realizando cambios más grandes
en Bicep en el proyecto. Para demostrarlo, agregará una instancia de Azure Cache for
Redis a la implementación existente como preparación para una nueva característica
ficticia que planea agregar en una fecha futura.

) Importante

Como resultado de este cambio, pagará por una instancia de Azure Cache for Redis
hasta que elimine el recurso en Azure Portal o mediante azd down . Puede encontrar
detalles sobre los diferentes planes de servicio y sus costos asociados en la
página de precios de Azure Cache for Redis.

1. Cree un nuevo archivo en la carpeta infra denominada [Link]. Copie y pegue el


código siguiente en el nuevo archivo:

Python

param name string


param location string = resourceGroup().location
param tags object = {}
param keyVaultName string
param connStrKeyName string
param passwordKeyName string
param primaryKeyKeyName string

@allowed([
'Enabled'
'Disabled'
])
param publicNetworkAccess string = 'Enabled'

@allowed([
'C'
'P'
])
param skuFamily string = 'C'

@allowed([
0
1
2
3
4
5
6
])
param skuCapacity int = 1
@allowed([
'Basic'
'Standard'
'Premium'
])
param skuName string = 'Standard'

param saveKeysToVault bool = true

resource redis '[Link]/redis@2020-12-01' = {


name: name
location: location
properties: {
sku: {
capacity: skuCapacity
family: skuFamily
name: skuName
}
publicNetworkAccess: publicNetworkAccess
enableNonSslPort: true
}
tags: tags
}

resource keyVault '[Link]/vaults@2022-07-01' existing = {


name: keyVaultName
}

resource redisKey '[Link]/vaults/secrets@2022-07-01' = if


(saveKeysToVault) {
name: primaryKeyKeyName
parent: keyVault
properties: {
value: [Link]().primaryKey
}
}

resource redisConnStr '[Link]/vaults/secrets@2018-02-14' =


if (saveKeysToVault) {
name: connStrKeyName
parent: keyVault
properties: {
value:
'${name}.[Link],abortConnect=false,ssl=true,password=$
{[Link]().primaryKey}'
}
}
resource redisPassword '[Link]/vaults/secrets@2018-02-14' =
if (saveKeysToVault) {
name: passwordKeyName
parent: keyVault
properties: {
value: [Link]().primaryKey
}
}

output REDIS_ID string = [Link]


output REDIS_HOST string = [Link]

2. Modifique el archivo [Link] para crear una instancia del recurso "redis".

En el archivo [Link] , agregue el código siguiente debajo de las llaves finales


asociadas a la sección front-end web y encima de la sección secretos .

Python

// Caching server
module redis '[Link]' = {
name: 'redis'
scope: resourceGroup
params: {
name: replace('${take(prefix, 19)}-rds', '--', '-')
location: location
tags: tags
keyVaultName: [Link]
connStrKeyName: 'RedisConnectionString'
passwordKeyName: 'RedisPassword'
primaryKeyKeyName: 'RedisPrimaryKey'
publicNetworkAccess: 'Enabled'
skuFamily: 'C'
skuCapacity: 1
skuName: 'Standard'
saveKeysToVault: true
}
}

3. Agregue valores de salida a la parte inferior del archivo:

Python

output REDIS_ID string = [Link].REDIS_ID


output REDIS_HOST string = [Link].REDIS_HOST

4. Confirme que todo el archivo [Link] es idéntico al código siguiente:

Python

targetScope = 'subscription'

@minLength(1)
@maxLength(64)
@description('Name which is used to generate a short unique hash for
each resource')
param name string

@minLength(1)
@description('Primary location for all resources')
param location string

@secure()
@description('DBServer administrator password')
param dbserverPassword string

@secure()
@description('Secret Key')
param secretKey string

@description('Id of the user or app to assign application roles')


param principalId string = ''

var resourceToken = toLower(uniqueString(subscription().id, name,


location))
var prefix = '${name}-${resourceToken}'
var tags = { 'azd-env-name': name }

resource resourceGroup '[Link]/resourceGroups@2021-04-01'


= {
name: '${name}-rg'
location: location
tags: tags
}

// Store secrets in a keyvault


module keyVault './core/security/[Link]' = {
name: 'keyvault'
scope: resourceGroup
params: {
name: '${take(replace(prefix, '-', ''), 17)}-vault'
location: location
tags: tags
principalId: principalId
}
}

module db '[Link]' = {
name: 'db'
scope: resourceGroup
params: {
name: 'dbserver'
location: location
tags: tags
prefix: prefix
dbserverDatabaseName: 'relecloud'
dbserverPassword: dbserverPassword
}
}
// Monitor application with Azure Monitor
module monitoring 'core/monitor/[Link]' = {
name: 'monitoring'
scope: resourceGroup
params: {
location: location
tags: tags
applicationInsightsDashboardName: '${prefix}-appinsights-dashboard'
applicationInsightsName: '${prefix}-appinsights'
logAnalyticsName: '${take(prefix, 50)}-loganalytics' // Max 63
chars
}
}

// Web frontend
module web '[Link]' = {
name: 'web'
scope: resourceGroup
params: {
name: replace('${take(prefix, 19)}-appsvc', '--', '-')
location: location
tags: tags
applicationInsightsName: [Link]
keyVaultName: [Link]
appCommandLine: '[Link]'
pythonVersion: '3.12'
dbserverDomainName: [Link]
dbserverUser: [Link]
dbserverDatabaseName: [Link]
}
}

// Caching server
module redis '[Link]' = {
name: 'redis'
scope: resourceGroup
params: {
name: replace('${take(prefix, 19)}-rds', '--', '-')
location: location
tags: tags
keyVaultName: [Link]
connStrKeyName: 'RedisConnectionString'
passwordKeyName: 'RedisPassword'
primaryKeyKeyName: 'RedisPrimaryKey'
publicNetworkAccess: 'Enabled'
skuFamily: 'C'
skuCapacity: 1
skuName: 'Standard'
saveKeysToVault: true
}
}

var secrets = [
{
name: 'DBSERVERPASSWORD'
value: dbserverPassword
}
{
name: 'SECRETKEY'
value: secretKey
}
]

@batchSize(1)
module keyVaultSecrets './core/security/[Link]' = [for
secret in secrets: {
name: 'keyvault-secret-${[Link]}'
scope: resourceGroup
params: {
keyVaultName: [Link]
name: [Link]
secretValue: [Link]
}
}]

output AZURE_LOCATION string = location


output AZURE_KEY_VAULT_ENDPOINT string = [Link]
output AZURE_KEY_VAULT_NAME string = [Link]
output APPLICATIONINSIGHTS_NAME string =
[Link]
output BACKEND_URI string = [Link]

output REDIS_ID string = [Link].REDIS_ID


output REDIS_HOST string = [Link].REDIS_HOST

5. Asegúrese de que se guardan todos los cambios y, a continuación, use el siguiente


comando para actualizar los recursos aprovisionados en Azure:

shell

azd provision

7 Nota

En función de muchos factores, agregar una instancia de Azure Cache for


Redis a la implementación existente podría tardar mucho tiempo. En las
pruebas, experimentamos tiempos de ejecución superiores a 20 minutos.
Siempre que no vea ningún error, permita que el proceso continúe hasta que
se complete.

6. Cuando azd provision finalice, abra Azure Portal, vaya al grupo de recursos de la
implementación y, en la lista de servicios, confirme que ahora tiene una instancia
de Azure Cache for Redis.

Esto concluye el inicio rápido, pero hay muchos servicios de Azure que pueden ayudarle
a crear aplicaciones más escalables y listas para producción. Un excelente punto de
partida sería obtener información sobre Azure API Management, Azure Front Door,
Azure CDN y Azure Virtual Network, por nombrar algunos.

Limpieza de recursos
Limpie los recursos creados por la plantilla ejecutando el comando azd down .

shell

azd down

El azd down comando elimina los recursos de Azure y el flujo de trabajo de Acciones de
GitHub. Cuando se le solicite, acepte eliminar todos los recursos asociados al grupo de
recursos.

También puede eliminar la carpeta azdtest o usarla como base para su propia aplicación
modificando los archivos del proyecto.

Contenido relacionado
Más información sobre las plantillas web azd de Python
Obtenga más información sobre los azd comandos.
Obtenga información sobre qué hacen cada una de las carpetas y los archivos del
proyecto y qué puede editar o eliminar?
Actualice las plantillas de Bicep para agregar o quitar servicios de Azure. ¿No
conoces a Bicep? Pruebe esta ruta de aprendizaje: Aspectos básicos de Bicep
Use azd para configurar una canalización de CI/CD de Acciones de GitHub para
volver a implementar la combinación en la rama principal.
Configuración de la supervisión para que pueda supervisar la aplicación mediante
la CLI para desarrolladores de Azure
Inicio rápido: Implementación de una
aplicación web de Python (Django, Flask
o FastAPI) en Azure App Service
Artículo • 13/09/2024

7 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>.[Link] . Los nombres de aplicación existentes permanecerán

sin cambios.

Ejemplo: [Link]

Para más información, consulte Nombre de host predeterminado único para el


recurso App Service .

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:

Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita .
Python 3.9 o posterior instalado localmente.

7 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.

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.

Flask

Console

git clone [Link]


quickstart

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

Flask

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

Console

cd msdocs-python-flask-webapp-quickstart

2. Cree un entorno virtual para la aplicación:

Windows

Console

py -m venv .venv
.venv\scripts\activate

3. Instale las dependencias:

Console

pip install -r [Link]

4. Ejecute la aplicación:

Console

flask run
5. Vaya a la aplicación de ejemplo en [Link] , en un explorador
web.

¿Tiene problemas? Háganoslo saber .

Creación de una aplicación web en Azure


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 .

CLI de Azure

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 az login.

Azure CLI
az login

Cree la aplicación web y otros recursos y, a continuación, implemente el código en


Azure mediante az webapp up.

Azure CLI

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 [Link] 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 [Link]
{
"URL": "[Link]
"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>"
}

7 Nota

El comando az webapp up realiza las acciones siguientes:

Cree un grupo de recursos predeterminado.

Cree un plan de App Service predeterminado.

Cree una aplicación con el nombre especificado.

Implemente desde un archivo ZIP todos los archivos del directorio de


trabajo actual, con la automatización de compilación habilitada.

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.

¿Tiene problemas? Háganoslo saber .

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.

Implementación con la CLI de 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.

¿Tiene problemas? Consulte primero la Guía de solución de problemas. Si eso no le


ayuda, infórmenos .

Configuración del script de inicio


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.

Para más información sobre cómo App Service ejecuta aplicaciones de Python y cómo
puede configurar y personalizar su comportamiento con la aplicación, consulte
Configuración de una aplicación de Python de Linux para Azure App Service.

CLI de Azure

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.

Navegación hasta la aplicación


Vaya a la aplicación implementada en el explorador web mediante la dirección URL
[Link] . 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.

¿Tiene problemas? Consulte primero la Guía de solución de problemas. Si eso no le


ayuda, infórmenos .

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.

Flask

Python

@[Link]('/')
def index():
print('Request for index page received')
return render_template('[Link]')

@[Link]('/[Link]')
def favicon():
return send_from_directory([Link](app.root_path, 'static'),
'[Link]',
mimetype='image/[Link]')

@[Link]('/hello', methods=['POST'])
def hello():
name = [Link]('name')

if name:
print('Request for hello page received with name=%s' % name)
return render_template('[Link]', name = name)
else:
print('Request for hello page received with no name or blank name
-- redirecting')
return redirect(url_for('index'))

Puede revisar el contenido de los registros de diagnóstico de App Service mediante la


CLI de Azure, VS Code o Azure Portal.

CLI de Azure

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

bash

Azure CLI

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.

bash

Azure CLI

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.

Output

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received


2021-12-23T02:15:52.740740222Z [Link] - - [23/Dec/2021:02:15:52
+0000] "GET / HTTP/1.1" 200 1360 "[Link]
[Link]/hello" "Mozilla/5.0 (Windows NT 10.0;
Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z [Link] - - [23/Dec/2021:02:15:52
+0000] "GET /static/bootstrap/css/[Link] HTTP/1.1" 200 0
"[Link]
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101
Firefox/95.0"
2021-12-23T02:15:52.884541951Z [Link] - - [23/Dec/2021:02:15:52
+0000] "GET /static/images/[Link] HTTP/1.1" 200 0
"[Link]
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101
Firefox/95.0"
2021-12-23T02:15:53.043211176Z [Link] - - [23/Dec/2021:02:15:53
+0000] "GET /[Link] HTTP/1.1" 404 232 "[Link]
[Link]/" "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 [Link] - - [23/Dec/2021:02:16:01
+0000] "POST /hello HTTP/1.1" 200 695 "[Link]
[Link]/" "Mozilla/5.0 (Windows NT 10.0; Win64;
x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z [Link] - - [23/Dec/2021:02:16:01
+0000] "GET /static/bootstrap/css/[Link] HTTP/1.1" 304 0
"[Link]
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101
Firefox/95.0"
2021-12-23T02:16:01.430740060Z [Link] - - [23/Dec/2021:02:16:01
+0000] "GET /static/images/[Link] HTTP/1.1" 304 0
"[Link]
"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. Si eso no le


ayuda, infórmenos .

Limpieza de recursos
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.

CLI de Azure

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

Azure CLI

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
Tutorial: Aplicación web de Python (Django o Flask) con PostgreSQL

Configuración de una aplicación de Python

Incorporación del inicio de sesión de un usuario a una aplicación web de Python

Tutorial: Ejecución de una aplicación de Python en un contenedor personalizado

Proteger una aplicación con un dominio personalizado y un certificado

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Implementación de una aplicación web
Python (Django o Flask) con PostgreSQL
en Azure
Artículo • 30/11/2023

En este tutorial, implementará una aplicación web de Python controlada por datos
(Django o Flask ) en Azure App Service con el servicio de base de datos relacional
Azure Database for PostgreSQL. Azure App Service admite Python en un entorno de
servidor Linux.

Para completar este tutorial, necesita:

Una cuenta de Azure con una suscripción activa. Si no tiene una cuenta de Azure,
puede crearla gratis .
Conocimientos de Python con desarrollo de Flask o Python con desarrollo de
Django

Ir al final
Flask

Con la CLI para desarrolladores de Azure instalada, puede implementar una


aplicación de ejemplo totalmente configurada que se muestra en este tutorial y
verla en ejecución en Azure. Solo tiene que ejecutar los siguientes comandos en un
directorio de trabajo vacío:

Bash
azd auth login
azd init --template msdocs-flask-postgresql-sample-app
azd up

Aplicación de ejemplo
Se proporcionan aplicaciones de Python de ejemplo que usan el marco Flask y Django
para ayudarle a seguir este tutorial. Para implementarlas sin ejecutarlas localmente,
omita esta parte.

Para ejecutar la aplicación localmente, asegúrese de que tiene Python 3.7 o posterior
y PostgreSQL instalados localmente. A continuación, clone la rama del repositorio de
starter-no-infra ejemplo y cambie a la raíz del repositorio.

Flask

Bash

git clone -b starter-no-infra [Link]


flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app

Cree un archivo .env como se ve a continuación, con el archivo .[Link] como


guía. Establezca el valor de DBNAME en el nombre de una base de datos existente en
la instancia de PostgreSQL local. Establezca los valores de DBHOST , DBUSER y DBPASS
según corresponda para la instancia de PostgreSQL local.

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

Cree un entorno virtual para la aplicación:

Windows

Cmd
py -m venv .venv
.venv\scripts\activate

Instale las dependencias:

Bash

pip install -r [Link]

Ejecute la aplicación de ejemplo con los comandos siguientes:

Flask

Bash

# Run database migration


flask db upgrade
# Run the app at [Link]
flask run

1. Creación de una instancia de App Service y


PostgreSQL
Flask

Bash

git clone [Link]


[Link]

En este paso, creará los recursos de Azure. Los pasos que se usan en este tutorial crean
un conjunto de recursos seguros de forma predeterminada que incluyen App Service y
Azure Database for PostgreSQL. En el proceso de creación especificará lo siguiente:

El Nombre de la aplicación web. Es el nombre que se usa como parte del nombre
DNS de la aplicación web en el formato [Link] .
La región para ejecutar la aplicación físicamente en el mundo.
La pila en tiempo de ejecución para la aplicación. Es donde se selecciona la
versión de Python que se va a usar para la aplicación.
El plan de hospedaje para la aplicación. Es el plan de tarifa que incluye el conjunto
de características y la capacidad de escalado de la aplicación.
El Grupo de recursos de la aplicación. Un grupo de recursos permite agrupar (en
un contenedor lógico) todos los recursos de Azure necesarios para la aplicación.

Inicie sesión en Azure Portal y siga estos pasos para crear los recursos de Azure App
Service.

Flask

Paso 1: En el portal Azure:


1. Escriba "base de datos de aplicación web" en la barra de búsqueda de la parte
superior de Azure Portal.
2. Seleccione el elemento denominado Aplicación web + base de datos en el
encabezado Marketplace. También puede ir directamente al asistente de
creación.

Paso 2: In the páginaCrear aplicación web + base de datos, rellene el formulario de


la siguiente manera.
1. Grupo de recursos → seleccione Crear nuevo y use el nombre msdocs-python-
postgres-tutorial.
2. Región → Cualquier región de Azure cercana.
3. Nombre → msdocs-python-postgres-XYZ, donde XYZ son tres caracteres
aleatorios. Este nombre debe ser único en Azure.
4. Pila en tiempo de ejecución → Python 3.10.
5. Base de datos → PostgreSQL: servidor flexible está seleccionado de manera
predeterminada como motor de base de datos. El nombre del servidor y el
nombre de la base de datos también se establecen de manera
predeterminada en los valores adecuados.
6. Plan de hospedaje → Básico. Cuando esté listo, puede escalar verticalmente a
un plan de tarifa de producción más adelante.
7. Seleccione Revisar + crear.
8. Una vez completada la validación, seleccione Crear.

Step 3:La implementación tarda unos minutos en completarse. Una vez completada
la implementación, seleccione el botón Ir al recurso. Se le dirigirá directamente a la
aplicación App Service, pero se crean los siguientes recursos:
Grupo de recursos → Contenedor de todos los recursos creados.
Plan de App Service → Define los recursos de proceso de App Service. Se crea
un plan de Linux en el nivel Básico.
App Service → Representa su aplicación y se ejecuta en el plan de App
Service.
Red virtual → Se integra con la aplicación App Service y aísla el tráfico de red
de back-end.
Servidor flexible de Azure Database for PostgreSQL → Accesible solo desde
la red virtual. Una base de datos y un usuario se crean automáticamente en el
servidor.
Zona DNS privada → Habilita la resolución DNS del servidor de PostgreSQL
en la red virtual.

2. Comprobación de los valores de


configuración de la conexión
El Asistente para la creación generó automáticamente las variables de conectividad
como valores de configuración de la aplicación. La configuración de la aplicación es una
forma de mantener los secretos de conexión fuera del repositorio de código. Cuando
esté listo para mover los secretos a una ubicación más segura, consulte este artículo
sobre el almacenamiento en Azure Key Vault.

Flask

Paso 1: En la página App Service, en el menú de la izquierda, seleccione


Configuración.

Paso 2: en la pestaña Configuración de la aplicación de la página Configuración,


compruebe que AZURE_POSTGRESQL_CONNECTIONSTRING esté presente. Se insertará en
el entorno de tiempo de ejecución como variable de entorno.

Paso 3: en un terminal o símbolo del sistema, ejecute el siguiente script de Python


para generar un secreto único: python -c 'import secrets;
print(secrets.token_hex())' . Copie el valor de salida que se usará en el paso

siguiente.
3. Implementación del código de ejemplo
En este paso, configurará la implementación de GitHub mediante Acciones de GitHub.
Es solo una de las muchas maneras de implementar en App Service, pero también una
excelente manera de disponer de integración continua en el proceso de
implementación. De forma predeterminada, cada uno de los repositorios git push de
GitHub iniciará la acción de compilación e implementación.

Flask

Paso 1: En una nueva ventana del navegador:


1. Inicie sesión en su cuenta de GitHub.
2. Vaya a [Link]
app.
3. Seleccione Bifurcación.
4. Seleccione Crear bifurcación.

Paso 2: En la página de GitHub, abre Visual Studio Code en el navegador pulsando


la tecla . .

Paso 3: en el explorador de Visual Studio Code, abra azureproject/[Link].


Consulte las variables de entorno que se usan en el entorno de producción, incluida
la configuración de la aplicación que vio en la página de configuración.

Paso 4: De nuevo en la página App Service, en el menú de la izquierda, seleccione


Centro de implementación.

Paso 5: En la página Centro de implementación:


1. En Origen, seleccione GitHub. De forma predeterminada, Acciones de GitHub
está seleccionado como proveedor de compilación.
2. Inicie sesión en su cuenta de GitHub y siga las indicaciones para autorizar a
Azure.
3. En Organización, seleccione su cuenta.
4. En Repositorio, seleccione msdocs-flask-postgresql-sample-app.
5. En Rama, seleccione main.
6. Mantenga la opción predeterminada seleccionada para Agregar un flujo de
trabajo.
7. En Tipo de autenticación, seleccione Identidad asignada por el usuario.
8. En el menú superior, elija Guardar. App Service confirma un archivo de flujo
de trabajo en el repositorio de GitHub escogido, en el directorio
.github/workflows .

Paso 6: En la página Centro de implementación:


1. Seleccione Registros. Ya hay iniciada una ejecución de implementación.
2. En el elemento de registro de la ejecución de implementación, seleccione
Compilar o implementar registros.

Paso 7: Se le llevará al repositorio de GitHub, donde ve que la acción de GitHub se


está ejecutando. El archivo de flujo de trabajo define dos fases independientes:
compilación e implementación. Espere a que la ejecución de GitHub muestre el
estado Completado. Tardará unos 5 minutos.

¿Tiene problemas? Consulte la Guía de solución de problemas.


4. Generación del esquema de la base de datos
Flask

Con la base de datos PostgreSQL protegida por la red virtual, la manera más fácil
de ejecutar migraciones de base de datos de Flask es mediante una sesión SSH
con el contenedor de App Service.

Paso 1: Volver a la página de App Service, en el menú izquierdo,


1. Seleccione SSH.
2. Seleccione Ir.

Paso 2: en el terminal SSH, ejecute flask db upgrade . Si se realiza correctamente,


App Service se conecta a la base de datos. Cuando la aplicación se reinicie, solo
persisten los cambios realizados en los archivos ubicados en /home . Los cambios
efectuados fuera de /home no se conservan.

5. Navegación hasta la aplicación


Flask

Paso 1. En la página App Service:


1. En el menú de la izquierda, seleccione Información general.
2. Seleccione la dirección URL de la aplicación. También puede navegar
directamente a [Link] .


Paso 2: agregue algunos restaurantes a la lista. Enhorabuena, ya está ejecutando
una aplicación web en Azure App Service, con conectividad protegida a Azure
Database for PostgreSQL.

6. Transmisión de registros de diagnóstico


Azure App Service captura toda la salida de mensajes hacia la consola, para ayudarle a
diagnosticar problemas de la aplicación. La aplicación de ejemplo incluye instrucciones
print() para demostrar esta funcionalidad, como se muestra a continuación.

Flask

Python

@[Link]('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = [Link]()
return render_template('[Link]', restaurants=restaurants)
Paso 1. En la página App Service:
1. En el menú de la izquierda, seleccione Registros de App Service.
2. En Registro de aplicaciones, seleccione Sistema de archivos.
3. En el menú superior, elija Guardar.

Paso 2: En el menú de la izquierda, seleccione Flujo de registro. Verá los registros de la


aplicación, incluidos los registros de plataforma y los registros de dentro del
contenedor.

Obtenga más información sobre cómo iniciar sesión en aplicaciones de Python en la


serie sobre cómo configurar Azure Monitor para la aplicación Python.

7. Limpieza de recursos
Cuando acabe, puede eliminar todos los recursos de la suscripción de Azure mediante la
eliminación del grupo de recursos.

Paso 1:En la barra de búsqueda de la parte superior de Azure Portal:


1. Escriba el nombre del grupo de recursos.
2. Seleccione el grupo de recursos.

Paso 2: En la página del grupo de recursos, seleccione Borrar grupo de recursos.

Paso 3:
1. Escriba el nombre del grupo de recursos para confirmar la eliminación.
2. Seleccione Eliminar.

:

Solucionar problemas
A continuación se indican los problemas que pueden surgir al intentar trabajar con este
tutorial y los pasos para resolverlos.

No puedo conectarme a la sesión de SSH

Si no puede conectarse a la sesión SSH, significa que no se pudo iniciar la propia


aplicación. Compruebe los registros de diagnóstico para obtener más información. Por
ejemplo, si ve un error como KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING' , puede
significar que falta la variable de entorno (es posible que haya quitado el valor de
configuración de la aplicación).

Recibo un error al ejecutar migraciones de base de datos


Si encuentra algún error relacionado con la conexión a la base de datos, compruebe si
se han cambiado los valores de configuración de la aplicación
( AZURE_POSTGRESQL_CONNECTIONSTRING ). Sin esa cadena de conexión, el comando de
migración no se puede comunicar con la base de datos.
Preguntas más frecuentes
¿Cuánto cuesta esta configuración?
¿Cómo me conecto al servidor de PostgreSQL protegido tras la red virtual con
otras herramientas?
¿Cómo funciona el desarrollo de aplicaciones locales con Acciones de GitHub?
¿Cómo está configurado el ejemplo de Django para ejecutarse en Azure App
Service?

¿Cuánto cuesta esta configuración?

Los precios por los recursos creados son los siguientes:

El plan de App Service se crea en el nivel Básico y puede escalar o reducirse


verticalmente. Consulte Precios de App Service .
PostgreSQL, servidor flexible se crea en el nivel ampliable más bajo
(Standard_B1ms), con el tamaño de almacenamiento mínimo, que se puede escalar
o reducir verticalmente. Consulte los precios de Azure Database for PostgreSQL .
La red virtual no incurre en cargo alguno, a menos que se configure alguna
funcionalidad extra, como, por ejemplo, el emparejamiento. Vea Precios de Azure
Virtual Network .
La zona DNS privada conlleva un pequeño cargo. Vea Precios de Azure DNS .

¿Cómo me conecto al servidor de PostgreSQL protegido tras la red


virtual con otras herramientas?
Para tener un acceso básico desde una herramienta de línea de comandos, puede
ejecutar psql desde el terminal de SSH de la aplicación.
Para conectarse desde una herramienta de escritorio, la máquina debe estar en la
red virtual. Por ejemplo, podría ser una máquina virtual de Azure conectada a una
de las subredes, o una máquina de una red local que tenga una conexión VPN de
sitio a sitio a la red virtual de Azure.
También puede integrar Azure Cloud Shell en la red virtual.

¿Cómo funciona el desarrollo de aplicaciones locales con Acciones


de GitHub?

Tomando como ejemplo el archivo de flujo de trabajo generado automáticamente de


App Service: cada git push inicia una nueva ejecución de compilación e
implementación. Desde un clon local del repositorio de GitHub, realiza las
actualizaciones deseadas y las inserta en GitHub. Por ejemplo:

terminal

git add .
git commit -m "<some-message>"
git push origin main

¿Cómo está configurado el ejemplo de Django para ejecutarse en


Azure App Service?

7 Nota

Si sigue este tutorial con su propia aplicación, examine la descripción del archivo
[Link] en el archivo [Link] de cada proyecto (Flask , Django )
para ver los paquetes que necesitará.

La aplicación de ejemplo de Django configura los valores en el archivo


azureproject/[Link] para que se pueda ejecutar en Azure App Service. Estos
cambios son comunes a la implementación de Django en producción y no son
específicos de App Service.

Django valida el encabezado HTTP_HOST en las solicitudes entrantes. El código de


ejemplo usa la variable de entorno WEBSITE_HOSTNAME en App Service para
agregar el nombre de dominio de la aplicación al valor de ALLOWED_HOSTS de
Django.

Python

# Configure the domain name using the environment variable


# that Azure automatically creates for us.
ALLOWED_HOSTS = [[Link]['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME'
in [Link] else []

Django no admite servir archivos estáticos en producción . En este tutorial se usa


WhiteNoise para permitir servir los archivos. El paquete WhiteNoise ya se instaló
con [Link] y su middleware se ha agregado a la lista.

Python

# WhiteNoise configuration
MIDDLEWARE = [
'[Link]',
# Add whitenoise middleware after the security middleware
'[Link]',

Los valores del archivo estático se configuran según la documentación de Django.

Python

SESSION_ENGINE = "[Link]"
STATICFILES_STORAGE =
'[Link]'

Para obtener más información, consulte Configuración de producción para aplicaciones


de Django.

Pasos siguientes
Pase al tutorial siguiente para aprender a proteger la aplicación con un dominio
personalizado y un certificado.

Protección con un certificado y dominio personalizado

Obtenga información sobre cómo App Service ejecuta una aplicación de Python:

Configuración de una aplicación de Python


Creación e implementación de una
aplicación web de Python de Flask en
Azure con una identidad administrada
asignada por el sistema
Artículo • 30/09/2024

En este tutorial, se implementa código Python Flask para crear e implementar una
aplicación web que se ejecuta en Azure App Service. La aplicación web utiliza su
identidad administrada asignada por el sistema (conexiones sin contraseña) con el
control de acceso basado en roles de Azure para acceder a los recursos Azure Storage y
Azure Database for PostgreSQL - Servidor Flexible. El código utiliza la clase
DefaultAzureCredential de la biblioteca de clientes Azure Identity para Python. La clase
DefaultAzureCredential detecta automáticamente que existe una identidad

administrada para el App Service y la utiliza para acceder a otros recursos de Azure.

Puede configurar conexiones sin contraseña a servicios Azure usando Service Connector
o puede configurarlas manualmente. Este tutorial muestra cómo se usa Service
Connector. Para obtener más información sobre las conexiones sin contraseña, consulte
Conexiones sin contraseña para servicios de Azure. Para obtener información sobre
Service Connector, consulte la documentación de Service Connector.

Este tutorial muestra cómo crear e implementar una aplicación web de Python
utilizando la CLI de Azure. Los comandos de este tutorial están escritos para ejecutarse
en un shell Bash. Puede ejecutar los comandos del tutorial en cualquier entorno Bash
con la CLI instalada, como su entorno local o Azure Cloud Shell . Con algunas
modificaciones —por ejemplo, estableciendo y usando variables de entorno—, puede
ejecutar estos comandos en otros entornos como el shell de comandos de Windows.
Para ver ejemplos de uso de una identidad gestionada asignada por el usuario, consulte
Creación e implementación una aplicación web Django en Azure con una identidad
administrada asignada por el usuario.

Obtención de la aplicación de ejemplo


Hay disponible una aplicación Python de ejemplo que utiliza el framework Flask que le
ayudará a seguir este tutorial. Descargue o clone una de las aplicaciones de ejemplo en
la estación de trabajo local.

1. Clone el ejemplo en una sesión de Azure Cloud Shell.


Consola

git clone [Link]


[Link]

2. Vaya a la carpeta de la aplicación.

Consola

cd msdocs-flask-web-app-managed-identity

Examine el código de autenticación


La aplicación web de ejemplo necesita autenticarse en dos almacenes de datos
diferentes:

El servidor de almacenamiento blob de Azure, donde almacena y recupera las


fotos enviadas por los revisores.
Una base de datos Azure Database for PostgreSQL - Servidor Flexible donde
almacena los restaurantes y las reseñas.

Usa DefaultAzureCredential para autenticarse en ambos almacenes de datos. Con


DefaultAzureCredential , la aplicación puede configurarse para ejecutarse bajo la

identidad de diferentes principales de servicio, dependiendo del entorno en el que se


esté ejecutando, sin realizar cambios en el código. Por ejemplo, en un entorno de
desarrollo local, la aplicación puede ejecutarse con la identidad del desarrollador que ha
iniciado sesión en la CLI de Azure, mientras que en Azure, como en este tutorial, puede
ejecutarse con la identidad gestionada asignada por el sistema.

En cualquier caso, el principal de seguridad bajo el que se ejecuta la aplicación debe


tener un rol en cada recurso Azure que la aplicación utiliza que le permita realizar las
acciones en el recurso que la aplicación requiere. En este tutorial, utilizará conectores de
servicio para habilitar automáticamente la identidad administrada asignada por el
sistema en su aplicación en Azure y para asignar a esa identidad los roles adecuados en
su cuenta de almacenamiento de Azure y en el servidor Azure Database for PostgreSQL.

Una vez habilitada la identidad administrada asignada por el sistema y asignados los
roles adecuados en los almacenes de datos, puede utilizar DefaultAzureCredential para
autenticarse con los recursos de Azure necesarios.

El siguiente código se utiliza para crear un cliente de almacenamiento blob para subir
fotos en [Link] . Se proporciona una instancia de DefaultAzureCredential al cliente, que
usa para adquirir tokens de acceso para realizar operaciones en el almacenamiento de
Azure.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url=account_url,
credential=azure_credential)

También se utiliza una instancia de DefaultAzureCredential para obtener un token de


acceso para Azure Database for PostgreSQL en ./azureproject/get_conn.py . En este
caso, el token se adquiere directamente llamando a get_token en la instancia de
credenciales y pasándole el valor scope apropiado. A continuación, se usa el token en
lugar de la contraseña en el URI de conexión PostgreSQL devuelto al autor de la
llamada.

Python

azure_credential = DefaultAzureCredential()
token = azure_credential.get_token("[Link]
[Link]")
conn =
str(current_app.[Link]('DATABASE_URI')).replace('PASSWORDORTOKEN',
[Link])

Para obtener más información sobre la autenticación de sus aplicaciones con los
servicios Azure, consulte Autenticación de aplicaciones Python en los servicios Azure
mediante el SDK de Azure para Python. Para obtener más información sobre
DefaultAzureCredential , incluido cómo personalizar la cadena de credenciales que

evalúa para su entorno, consulte Introducción a DefaultAzureCredential.

Crear un servidor Azure PostgreSQL


1. Configure las variables de entorno necesarias para el tutorial.

Bash

LOCATION="eastus"
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="ChAnG33#ThsPssWD$RAND_ID"

) Importante

La ADMIN_PW debe contener entre 8 y 128 caracteres de tres de las siguientes


categorías: Letras del alfabeto inglés mayúsculas y minúsculas, números y
caracteres no alfanuméricos. Al crear nombres de usuario o contraseñas, no
use el carácter $ . Más adelante creará variables de entorno con estos valores,
donde el carácter $ tiene un significado especial dentro del contenedor de
Linux que se usa para ejecutar aplicaciones de Python.

2. Para crear un grupo de recursos, use el comando az group create.

Azure CLI

az group create --location $LOCATION --name $RESOURCE_GROUP_NAME

3. Cree un servidor PostgreSQL con el comando az postgres flexible-server create.


(Este comando y los siguientes usan el carácter de continuación de línea de Bash
Shell ('\'). Cambie el carácter de continuación de línea para su shell si es necesario).

Azure CLI

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

El sku-name es el nombre del nivel de precios y de la configuración informática.


Para más información, consulte los precios de Azure Database for PostgreSQL .
Para enumerar las SKU disponibles, use az postgres flexible-server list-skus --
location $LOCATION .

4. Cree una base de datos denominada restaurant mediante el comando az


postgres flexible-server execute.

Azure CLI
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 un Azure App Service e


implementación del código
1. Cree un servicio de aplicación con el comando az webapp up.

Azure CLI

az webapp up \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--runtime PYTHON:3.9 \
--sku B1

El sku define el tamaño (CPU, memoria) y el coste del plan de App Service. El plan
de servicio B1 (Básico) incurre en un pequeño coste en su suscripción Azure. Para
obtener una lista completa de los planes de App Service, vea la página Precios de
App Service .

2. Configura App Service para usar el [Link] en el repo con el comando az webapp
config set.

Azure CLI

az webapp config set \


--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--startup-file "[Link]"

Creación de conectores sin contraseña a los


recursos de Azure
Los comandos Service Connector configuran los recursos Azure Storage y Azure
Database for PostgreSQL para usar la identidad administrada y el control de acceso
basado en roles de Azure. Los comandos crean configuraciones de aplicación en App
Service que conectan su aplicación web a estos recursos. La salida de los comandos
enumera las acciones del conector de servicio realizadas para habilitar la capacidad sin
contraseña.

1. Agregue un conector de servicio PostgreSQL con el comando az webapp


connection create postgres-flexible. La identidad administrada asignada por el
sistema se usa para autenticar la aplicación web en el recurso de destino,
PostgreSQL, en este caso.

Azure CLI

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

2. Agregue un conector de servicio de almacenamiento con el comando az webapp


connection create storage-blob.

Este comando también agrega una cuenta de almacenamiento y añade la


aplicación web con el rol Colaborador de datos de blobs de almacenamiento a la
cuenta de almacenamiento.

Azure CLI

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

Creación de un contenedor en la cuenta de


almacenamiento
La aplicación Python de ejemplo almacena las fotos enviadas por los revisores como
blobs en un contenedor de su cuenta de almacenamiento.
Cuando un usuario envía una foto con su revisión, la aplicación de ejemplo escribe
la imagen en el contenedor utilizando su identidad administrada asignada por el
sistema para la autenticación y autorización. Esta funcionalidad se configuró en la
última sección.

Cuando un usuario consulta las reseñas de un restaurante, la aplicación devuelve


un enlace a la foto en el Blob Storage para cada reseña que tenga una asociada.
Para que el navegador muestre la foto, debe poder acceder a ella en su cuenta de
almacenamiento. Los datos blob deben estar disponibles para su lectura pública a
través de un acceso anónimo (no autenticado).

Para mejorar la seguridad, las cuentas de almacenamiento se crean con el acceso


anónimo a los datos blob desactivado por defecto. En esta sección, habilitará el acceso
anónimo de lectura en su cuenta de almacenamiento y luego creará un contenedor
llamado fotos que proveerá acceso público (anónimo) a sus blobs.

1. Actualice la cuenta de almacenamiento para permitir el acceso anónimo de lectura


a los blobs con el comando az storage account update.

Azure CLI

az storage account update \


--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--allow-blob-public-access true

La habilitación del acceso anónimo en la cuenta de almacenamiento no afecta al


acceso a blobs individuales. Debe habilitar explícitamente el acceso público a los
blobs a nivel de contenedor.

2. Cree un contenedor llamado fotos en la cuenta de almacenamiento con el


comando az storage container create. Permita el acceso anónimo de lectura
(público) a los blobs en el contenedor recién creado.

Azure CLI

az storage container create \


--account-name $STORAGE_ACCOUNT_NAME \
--name photos \
--public-access blob \
--account-key $(az storage account keys list --account-name
$STORAGE_ACCOUNT_NAME \
--query [0].value --output tsv)
7 Nota

Para abreviar, este comando utiliza la clave de cuenta de almacenamiento


para autorizar con la cuenta de almacenamiento. Para la mayoría de los
escenarios, el enfoque recomendado por Microsoft es usar Microsoft Entra ID
y roles Azure (RBAC). Para obtener un conjunto rápido de instrucciones,
consulte Inicio rápido: Crear, descargar y listar blobs con Azure CLI. Tenga en
cuenta que varios roles de Azure le permiten crear contenedores en una
cuenta de almacenamiento, incluidos "Propietario", "Colaborador",
"Propietario de datos de bloques de almacenamiento" y "Colaborador de
datos de bloques de almacenamiento".

Para obtener más información sobre el acceso de lectura anónimo a los datos de blob,
consulte Configuración del acceso de lectura anónimo para contenedores y blobs.

Prueba de la aplicación web Python en Azure


La aplicación Python de ejemplo utiliza el paquete [Link] y su clase
DefaultAzureCredential . Cuando la app se ejecuta en Azure, DefaultAzureCredential

detecta automáticamente si existe una identidad administrada para el App Service y, si


es así, la usa para acceder a otros recursos de Azure (almacenamiento y PostgreSQL en
este caso). No es necesario proporcionar claves de almacenamiento, certificados o
credenciales al App Service para acceder a estos recursos.

1. Vaya a la aplicación implementada en la dirección URL


[Link] .

La aplicación puede tardar uno o dos minutos en iniciarse. Si ve una página de


aplicación predeterminada que no es la página de aplicación de muestra
predeterminada, espere un minuto y actualice el navegador.

2. Pruebe la funcionalidad de la aplicación de ejemplo y añada un restaurante y


algunas reseñas con fotos del restaurante.

La información del restaurante y las reseñas se almacenan en Azure Database for


PostgreSQL y las fotos se almacenan en Azure Storage. He aquí una captura de
pantalla de ejemplo:

Limpiar
En este tutorial, todos los recursos Azure se crearon en el mismo grupo de recursos.
Eliminar el grupo de recursos con el comando az group delete elimina todos los
recursos del grupo de recursos y es la forma más rápida de eliminar todos los recursos
de Azure utilizados para su app.

Azure CLI

az group delete --name $RESOURCE_GROUP_NAME

Opcionalmente, puede agregar el argumento --no-wait para permitir que el comando


devuelva antes de que se complete la operación.

Pasos siguientes
Creación e implementación de una aplicación web de Django en Azure con una
identidad administrada asignada por el usuario

Implementación de una aplicación web Python (Django o Flask) con PostgreSQL en


Azure App Service

Comentarios
¿Le ha resultado útil esta página?  Sí  No
Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A
Creación e implementación de una
aplicación web de Django en Azure con
una identidad administrada asignada
por el usuario
Artículo • 30/09/2024

En este tutorial se implementa una aplicación web Django en Azure App Service. La
aplicación web utiliza una identidad administrada asignada por el usuario (conexiones
sin contraseña) con control de acceso basado en roles de Azure para acceder a los
recursos Azure Storage y Azure Database for PostgreSQL - Flexible Server. El código
utiliza la clase DefaultAzureCredential de la biblioteca de clientes Azure Identity para
Python. La clase DefaultAzureCredential detecta automáticamente que existe una
identidad administrada para el App Service y la utiliza para acceder a otros recursos de
Azure.

En este tutorial, creará una identidad administrada asignada por el usuario y se asigna al
App Service para que pueda acceder a la base de datos y a los recursos de la cuenta de
almacenamiento. Para ver un ejemplo de uso de una identidad administrada asignada
por el sistema, consulte Creación e implementación de una aplicación web Flask Python
en Azure con una identidad administrada asignada por el sistema. Las identidades
administradas asignadas por el usuario se recomiendan porque pueden ser usadas por
varios recursos y sus ciclos de vida están desacoplados de los ciclos de vida de los
recursos a los que están asociadas. Para obtener más información sobre las prácticas
recomendadas para el uso de identidades administradas, consulte Recomendaciones de
prácticas recomendadas para identidades administradas.

En este tutorial se muestra cómo implementar la aplicación web Python y crear recursos
Azure utilizando la CLI de Azure. Los comandos de este tutorial están escritos para
ejecutarse en un shell Bash. Puede ejecutar los comandos del tutorial en cualquier
entorno Bash con la CLI instalada, como su entorno local o Azure Cloud Shell . Con
algunas modificaciones —por ejemplo, estableciendo y usando variables de entorno—,
puede ejecutar estos comandos en otros entornos como el shell de comandos de
Windows.

Obtención de la aplicación de ejemplo


Use la aplicación de ejemplo de Django para seguir este tutorial. Descargue o clone la
aplicación de ejemplo en su entorno de desarrollo.
1. Clonación del ejemplo.

Consola

git clone [Link]


[Link]

2. Vaya a la carpeta de la aplicación.

Consola

cd msdocs-django-web-app-managed-identity

Examine el código de autenticación


La aplicación web de ejemplo necesita autenticarse en dos almacenes de datos
diferentes:

El servidor de almacenamiento blob de Azure, donde almacena y recupera las


fotos enviadas por los revisores.
Una base de datos Azure Database for PostgreSQL - Servidor Flexible donde
almacena los restaurantes y las reseñas.

Usa DefaultAzureCredential para autenticarse en ambos almacenes de datos. Con


DefaultAzureCredential , la aplicación puede configurarse para ejecutarse bajo la

identidad de diferentes principales de servicio, dependiendo del entorno en el que se


esté ejecutando, sin realizar cambios en el código. Por ejemplo, en un entorno de
desarrollo local, la aplicación puede ejecutarse con la identidad del desarrollador que ha
iniciado sesión en la CLI de Azure, mientras que en Azure, como en este tutorial, puede
ejecutarse con una identidad administrada asignada por el usuario.

En cualquier caso, el principal de seguridad bajo el que se ejecuta la aplicación debe


tener un rol en cada recurso Azure que la aplicación utiliza que le permita realizar las
acciones en el recurso que la aplicación requiere. En este tutorial, usará los comandos
de la CLI de Azure para crear una identidad administrada asignada por el usuario y
asignarla a su aplicación en Azure. A continuación, asigne manualmente a esa identidad
las funciones adecuadas en su cuenta de almacenamiento Azure y en el servidor Azure
Database for PostgreSQL. Por último, se establece la variable de entorno
AZURE_CLIENT_ID para su aplicación en Azure para configurar DefaultAzureCredential y

usar la identidad administrada.


Una vez configurada la identidad administrada asignada al usuario en su aplicación y su
entorno de ejecución, y asignados los roles adecuados en los almacenes de datos,
puede usar DefaultAzureCredential para autenticarse con los recursos Azure necesarios.

El siguiente código se utiliza para crear un cliente de almacenamiento blob para subir
fotos en ./restaurant_review/[Link] . Se proporciona una instancia de
DefaultAzureCredential al cliente, que usa para adquirir tokens de acceso para realizar

operaciones en el almacenamiento de Azure.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url=account_url,
credential=azure_credential)

También se utiliza una instancia de DefaultAzureCredential para obtener un token de


acceso para Azure Database for PostgreSQL en ./azureproject/get_conn.py . En este
caso, el token se adquiere directamente llamando a get_token en la instancia de
credenciales y pasándole el valor scope apropiado. A continuación, el token se usa para
establecer la contraseña en el URI de conexión PostgreSQL.

Python

azure_credential = DefaultAzureCredential()
token = azure_credential.get_token("[Link]
[Link]")
[Link]['default']['PASSWORD'] = [Link]

Para obtener más información sobre la autenticación de sus aplicaciones con los
servicios Azure, consulte Autenticación de aplicaciones Python en los servicios Azure
mediante el SDK de Azure para Python. Para obtener más información sobre
DefaultAzureCredential , incluido cómo personalizar la cadena de credenciales que

evalúa para su entorno, consulte Introducción a DefaultAzureCredential.

Crear un servidor flexible Azure PostgreSQL


1. Configure las variables de entorno necesarias para el tutorial.

Bash
LOCATION="eastus"
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="ChAnG33#ThsPssWD$RAND_ID"
UA_NAME="UAManagedIdentityPythonTest$RAND_ID"

) Importante

La ADMIN_PW debe contener entre 8 y 128 caracteres de tres de las siguientes


categorías: Letras del alfabeto inglés mayúsculas y minúsculas, números y
caracteres no alfanuméricos. Al crear nombres de usuario o contraseñas, no
use el carácter $ . Más adelante creará variables de entorno con estos valores,
donde el carácter $ tiene un significado especial dentro del contenedor de
Linux que se usa para ejecutar aplicaciones de Python.

2. Para crear un grupo de recursos, use el comando az group create.

Azure CLI

az group create --location $LOCATION --name $RESOURCE_GROUP_NAME

3. Cree un servidor flexible PostgreSQL con el comando az postgres flexible-server


create. (Este comando y los siguientes usan el carácter de continuación de línea de
Bash Shell ('\'). Cambie el carácter de continuación de línea para otros shells).

Azure CLI

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 \
--active-directory-auth Enabled \
--public-access [Link]

El sku-name es el nombre del nivel de precios y de la configuración informática.


Para más información, consulte los precios de Azure Database for PostgreSQL .
Para enumerar las SKU disponibles, use az postgres flexible-server list-skus --
location $LOCATION .

4. Agregue su cuenta Azure como administrador de Microsoft Entra para el servidor


con el comando az postgres flexible-server ad-admin create.

Azure CLI

ACCOUNT_EMAIL=$(az ad signed-in-user show --query userPrincipalName --


output tsv)
ACCOUNT_ID=$(az ad signed-in-user show --query id --output tsv)
echo $ACCOUNT_EMAIL, $ACCOUNT_ID
az postgres flexible-server ad-admin create \
--resource-group $RESOURCE_GROUP_NAME \
--server-name $DB_SERVER_NAME \
--display-name $ACCOUNT_EMAIL \
--object-id $ACCOUNT_ID \
--type User

5. Configure una regla de cortafuegos en su servidor con el comando az postgres


flexible-server firewall-rule create. Esta regla permite el acceso de su entorno local
para conectarse al servidor. (Si usa Azure Cloud Shell, puede omitir este paso).

Azure CLI

IP_ADDRESS=<your IP>
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_ADDRESS

Use cualquier herramienta o sitio web que muestre su dirección IP para sustituir
<your IP> en el comando. Por ejemplo, puede utilizar el sitio web ¿Cuál es mi

dirección IP? .

6. Cree una base de datos denominada restaurant mediante el comando az


postgres flexible-server execute.

Azure CLI

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 un Azure App Service e


implementación del código
Ejecute estos comandos en la carpeta raíz de la aplicación de ejemplo para crear un
servicio de aplicación e implementar el código en él.

1. Cree un servicio de aplicación con el comando az webapp up.

Azure CLI

az webapp up \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--name $APP_SERVICE_NAME \
--runtime PYTHON:3.9 \
--sku B1

El sku define el tamaño (CPU, memoria) y el coste del plan de App Service. El plan
de servicio B1 (Básico) incurre en un pequeño coste en su suscripción Azure. Para
obtener una lista completa de los planes de App Service, vea la página Precios de
App Service .

2. Configure App Service para usar [Link] en el repositorio de ejemplo con el


comando az webapp config set.

Azure CLI

az webapp config set \


--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--startup-file "[Link]"

Creación de una cuenta de almacenamiento y


un contenedor
La aplicación de ejemplo almacena las fotos enviadas por los revisores como blobs en
Azure Storage.
Cuando un usuario envía una foto con su reseña, la app de ejemplo escribe la
imagen en el contenedor mediante la identidad administrada y
DefaultAzureCredential para acceder a la cuenta de almacenamiento.

Cuando un usuario consulta las reseñas de un restaurante, la aplicación devuelve


un enlace a la foto en el Blob Storage para cada reseña que tenga una asociada.
Para que el navegador muestre la foto, debe poder acceder a ella en su cuenta de
almacenamiento. Los datos blob deben estar disponibles para su lectura pública a
través de un acceso anónimo (no autenticado).

En esta sección, creará una cuenta de almacenamiento y un contenedor que permita el


acceso público de lectura a los blobs del contenedor. En secciones posteriores, se crea
una identidad administrada asignada por el usuario y se configura para escribir blobs en
la cuenta de almacenamiento.

1. Use el comando az storage create para crear una cuenta de almacenamiento.

Azure CLI

STORAGE_ACCOUNT_NAME="msdocsstorage$RAND_ID"
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--sku Standard_LRS \
--allow-blob-public-access true

2. Cree un contenedor llamado fotos en la cuenta de almacenamiento con el


comando az storage container create.

Azure CLI

az storage container create \


--account-name $STORAGE_ACCOUNT_NAME \
--name photos \
--public-access blob \
--auth-mode login

7 Nota

Si el comando falla, por ejemplo, si obtiene un error que indica que la


solicitud puede estar bloqueada por las reglas de red de la cuenta de
almacenamiento, introduzca el siguiente comando para asegurarse de que su
cuenta de usuario Azure tiene asignado un rol Azure con permiso para crear
un contenedor.
Azure CLI

az role assignment create --role "Storage Blob Data Contributor" --


assignee $ACCOUNT_EMAIL --scope
"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAM
E/providers/[Link]/storageAccounts/$STORAGE_ACCOUNT_NAME
"

Para obtener más información, consulte Inicio rápido: Creación, descarga y


listados de blobs con Azure CLI. Tenga en cuenta que varios roles de Azure le
permiten crear contenedores en una cuenta de almacenamiento, incluidos
"Propietario", "Colaborador", "Propietario de datos de bloques de
almacenamiento" y "Colaborador de datos de bloques de almacenamiento".

Creación de una identidad administrada


asignada por el usuario
Cree una identidad administrada asignada por el usuario y asígnela al App Service. La
identidad administrada se usa para acceder a la base de datos y a la cuenta de
almacenamiento.

1. Use el comando az identity create para crear una identidad administrada asignada
por el usuario y enviar el ID de cliente a una variable para su uso posterior.

Azure CLI

UA_CLIENT_ID=$(az identity create --name $UA_NAME --resource-group


$RESOURCE_GROUP_NAME --query clientId --output tsv)
echo $UA_CLIENT_ID

2. Use el comando az account show para obtener su ID de suscripción y enviarlo a


una variable que pueda utilizarse para construir el ID de recurso de la identidad
administrada.

Azure CLI

SUBSCRIPTION_ID=$(az account show --query id --output tsv)


RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_G
ROUP_NAME/providers/[Link]/userAssignedIdentities/$U
A_NAME"
echo $RESOURCE_ID
3. Asigne la identidad administrada al App Service con el comando az webapp
identity assign.

Azure CLI

export MSYS_NO_PATHCONV=1
az webapp identity assign \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--identities $RESOURCE_ID

4. Cree la configuración de la aplicación App Service que contiene el ID de cliente de


la identidad administrada y otra información de configuración con el comando az
webapp config appsettings set.

Azure CLI

az webapp config appsettings set \


--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings AZURE_CLIENT_ID=$UA_CLIENT_ID \
STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME \
STORAGE_CONTAINER_NAME=photos \
DBHOST=$DB_SERVER_NAME \
DBNAME=restaurant \
DBUSER=$UA_NAME

La aplicación de ejemplo usa variables de entorno (configuración de la aplicación) para


definir la información de conexión para la base de datos y la cuenta de almacenamiento,
pero estas variables no incluyen contraseñas. En su lugar, la autenticación se realiza sin
contraseña con DefaultAzureCredential .

El código de la aplicación de ejemplo utiliza el constructor de clase


DefaultAzureCredential sin pasar el ID de cliente de identidad administrada asignado
por el usuario al constructor. En este escenario, la alternativa es comprobar la variable
de entorno AZURE_CLIENT_ID , que se establece como una configuración de la aplicación.

Si la variable de entorno AZURE_CLIENT_ID no existe, se usa la identidad administrada


asignada por el sistema si está configurada. Para más información, consulte Introducing
DefaultAzureCredential.

Creación de roles para la identidad


administrada
En esta sección, se crean asignaciones de funciones para la identidad administrada con
el fin de permitir el acceso a la cuenta de almacenamiento y a la base de datos.

1. Cree una asignación de roles para la identidad administrada para permitir el


acceso a la cuenta de almacenamiento con el comando az role assignment create.

Azure CLI

export MSYS_NO_PATHCONV=1
az role assignment create \
--assignee $UA_CLIENT_ID \
--role "Storage Blob Data Contributor" \
--scope
"/subscriptions/$SUBSCRIPTION_ID/resourcegroups/$RESOURCE_GROUP_NAME"

El comando especifica el ámbito de la asignación de funciones al grupo de


recursos. Para más información, consulte Comprender la asignación de roles.

2. Use el comando az postgres flexible-server execute para conectarse a la base de


datos Postgres y ejecutar los mismos comandos para asignar funciones a la
identidad administrada.

Azure CLI

ACCOUNT_EMAIL_TOKEN=$(az account get-access-token --resource-type oss-


rdbms --output tsv --query accessToken)
az postgres flexible-server execute \
--name $DB_SERVER_NAME \
--admin-user $ACCOUNT_EMAIL \
--admin-password $ACCOUNT_EMAIL_TOKEN \
--database-name postgres \
--querytext "select * from pgaadauth_create_principal('"$UA_NAME"',
false, false);select * from pgaadauth_list_principals(false);"

Si tiene problemas para ejecutar el comando, asegúrese de haber añadido su


cuenta de usuario como administrador de Microsoft Entra para el servidor
PosgreSQL y de haber permitido el acceso a su dirección IP en las reglas del
cortafuegos. Para obtener más información, consulte la sección Crear un servidor
Azure PostgreSQL flexible.

Prueba de la aplicación web Python en Azure


La aplicación Python de ejemplo utiliza el paquete [Link] y su clase
DefaultAzureCredential . Cuando la app se ejecuta en Azure, DefaultAzureCredential

detecta automáticamente si existe una identidad administrada para el App Service y, si


es así, la usa para acceder a otros recursos de Azure (almacenamiento y PostgreSQL en
este caso). No es necesario proporcionar claves de almacenamiento, certificados o
credenciales al App Service para acceder a estos recursos.

1. Vaya a la aplicación implementada en la dirección URL


[Link] .

La aplicación puede tardar uno o dos minutos en iniciarse. Si ve una página de


aplicación predeterminada que no es la página de aplicación de muestra
predeterminada, espere un minuto y actualice el navegador.

2. Pruebe la funcionalidad de la aplicación de ejemplo y añada un restaurante y


algunas reseñas con fotos del restaurante.

La información del restaurante y las reseñas se almacenan en Azure Database for


PostgreSQL y las fotos se almacenan en Azure Storage. He aquí una captura de
pantalla de ejemplo:

Limpiar
En este tutorial, todos los recursos Azure se crearon en el mismo grupo de recursos.
Eliminar el grupo de recursos con el comando az group delete elimina todos los
recursos del grupo de recursos y es la forma más rápida de eliminar todos los recursos
de Azure utilizados para su app.

Azure CLI

az group delete --name $RESOURCE_GROUP_NAME


Opcionalmente, puede agregar el argumento --no-wait para permitir que el comando
devuelva antes de que se complete la operación.

Pasos siguientes
Creación e implementación de una aplicación web de Flask en Azure con una
identidad administrada asignada por el sistema

Implementación de una aplicación web Python (Django o Flask) con PostgreSQL en


Azure App Service

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Hospedaje de sitios web estáticos en
Azure Storage
Artículo • 21/10/2023

Puede proporcionar contenido estático (HTML, CSS, JavaScript y archivos de imagen)


directamente desde un contenedor de almacenamiento llamado $web. El hospedaje de
contenido en Azure Storage permite usar arquitecturas sin servidor que incluyen Azure
Functions y otros servicios de plataforma como servicio (PaaS). El hospedaje de sitios
web estáticos de Azure Storage es una opción excelente en los casos en los que no es
necesario que un servidor web represente contenido.

Los sitios web estáticos tienen algunas limitaciones. Por ejemplo, si desea configurar
encabezados, tendrá que usar Azure Content Delivery Network (Azure CDN). No hay
forma de configurar encabezados como parte de la propia característica de sitio web
estático. Además, no se admiten AuthN ni AuthZ.

Si estas características son importantes para su escenario, considere la posibilidad de


usar Azure Static Web Apps . Es una excelente alternativa a los sitios web estáticos y
también es adecuada en los casos en los que no se requiere un servidor web para
representar contenido. Puede configurar encabezados y AuthN/AuthZ es totalmente
compatible. Azure Static Web Apps también proporciona un flujo de trabajo de
integración continua y entrega continua (CI/CD) totalmente administrado desde el
origen de GitHub a la implementación global.

Si necesita un servidor web para representar contenido, puede usar Azure App
Service .

Configuración de un sitio web estático


El hospedaje de sitios web estáticos es una característica que permite habilitar la cuenta
de almacenamiento.

Para habilitar el hospedaje de sitios web estáticos, seleccione el nombre del archivo
predeterminado y, opcionalmente, proporcione una ruta de acceso a una página 404
personalizada. Si aún no existe un contenedor de almacenamiento de blobs
denominado $web en la cuenta, se creará uno. Agregue los archivos del sitio a ese
contenedor.

Para obtener instrucciones detalladas, consulte Hospedaje de sitios web estáticos en


Azure Storage.
Los archivos del contenedor $web distinguen mayúsculas de minúsculas, se
proporcionan mediante solicitudes de acceso anónimo y solo están disponibles a través
operaciones de lectura.

Carga de contenido
Puede usar cualquiera de estas herramientas para cargar contenido en el contenedor
$web:

" CLI de Azure
" Módulo de Azure PowerShell
" AzCopy
" Explorador de Azure Storage
" Azure Pipelines
" Extensión de Visual Studio Code y Demostración de vídeo de Channel 9

Visualización de contenido
Los usuarios pueden ver contenido del sitio desde un explorador usando la dirección
URL pública del sitio web. Puede buscar la dirección URL usando Azure Portal, CLI de
Azure o PowerShell. Consulte cómo Búsqueda de la dirección URL del sitio web.

El documento del índice que especifique al habilitar el hospedaje de sitios web estáticos
aparece cuando los usuarios abren el sitio y no especifican un archivo concreto (por
ejemplo, [Link] ).

Si el servidor devuelve un error 404 y no se ha especificado un documento de error al


habilitar el sitio web, se devuelve una página 404 predeterminada al usuario.

7 Nota
El uso compartido de recursos entre orígenes (CORS) para Azure Storage no se
admite para los sitios web estáticos.

Puntos de conexión secundarios


Si configura la redundancia en una región secundaria, también puede tener acceso al
contenido del sitio web mediante un punto de conexión secundario. Los datos se
replican en las regiones secundarias de forma asincrónica. Por lo tanto, los archivos que
están disponibles en el punto de conexión secundario no están siempre sincronizados
con los archivos que están disponibles en el punto de conexión principal.

Impacto de la configuración del nivel de acceso


en el contenedor web
Puede modificar el nivel de acceso anónimo del contenedor $web, pero esto no afecta
al punto de conexión principal del sitio web estático porque estos archivos se
proporcionan a través de solicitudes de acceso anónimo. Eso significa acceso público
(de solo lectura) a todos los archivos.

Aunque el punto de conexión principal del sitio web estático no se ve afectado, un


cambio en el nivel de acceso anónimo afecta al punto de conexión del servicio blob
principal.

Por ejemplo, si cambia el nivel de acceso anónimo del contenedor $web de Privado (sin
acceso anónimo) a Blob (acceso anónimo de lectura solo para blobs), el nivel de
acceso anónimo al punto de conexión principal del sitio web estático
[Link] no cambia.

Sin embargo, el acceso anónimo al punto de conexión de servicio blob principal


[Link] cambia, lo que

permite a los usuarios abrir ese archivo mediante cualquiera de estos dos puntos de
conexión.

Deshabilitar el acceso público en una cuenta de almacenamiento mediante la


configuración de acceso público de la cuenta de almacenamiento no afecta a los sitios
web estáticos hospedados en esa cuenta de almacenamiento. Para más información,
consulte Corrección del acceso de lectura anónimo a datos de blobs (implementaciones
de Azure Resource Manager).
Asignación de un dominio personalizado a una
dirección URL de un sitio web estático
Puede hacer que el sitio web estático esté disponible a través de un dominio
personalizado.

Es más fácil habilitar el acceso HTTP para un dominio personalizado, ya que Azure
Storage lo admite de forma nativa. Para habilitar HTTPS, tendrá que usar Azure CDN
porque Azure Storage no admite de forma nativa HTTPS con dominios personalizados.
Para obtener instrucciones pormenorizadas, consulte Asignación de un dominio
personalizado a un punto de conexión de Azure Blob Storage.

Si la cuenta de almacenamiento está configurada para requerir la transferencia segura a


través de HTTPS, los usuarios deben utilizar el punto de conexión HTTPS.

 Sugerencia

Consider la posibilidad de hospedar el dominio en Azure. Para más información,


consulte Hospedaje de un dominio en Azure DNS.

Adición de encabezados HTTP


No hay forma de configurar encabezados como parte de la característica de sitio web
estático. Sin embargo, puede usar Azure CDN para agregar encabezados y anexar (o
sobrescribir) sus valores. Consulte Referencia del motor de reglas estándar de
Azure CDN.

Si quiere usar encabezados para controlar el almacenamiento en caché, consulte Control


del comportamiento del almacenamiento en caché de Azure CDN con reglas de
almacenamiento en caché.

Hospedaje de sitios web de varias regiones


Si planea hospedar un sitio web en varias zonas geográficas, se recomienda usar
Content Delivery Network para el almacenamiento en caché regional. Use Azure Front
Door para proporcionar contenido diferente en cada región. También proporciona
funcionalidad de conmutación por error. No se recomienda Azure Traffic Manager si
tiene previsto usar un dominio personalizado. Pueden surgir problemas debido a cómo
Azure Storage comprueba los nombres de dominio personalizados.
Permisos
El permiso para habilitar el sitio web estático es
[Link]/storageAccounts/blobServices/write o clave compartida. Los roles
integrados que proporcionan este acceso incluyen Colaborador de la cuenta de
almacenamiento.

Precios
Puede habilitar el hospedaje de sitios web estáticos de forma gratuita. Se le factura solo
por el almacenamiento de blobs que el sitio usa y por los costes de las operaciones.
Para obtener más información acerca de los precios de Azure Blob Storage, consulte la
página de precios de Azure Blob Storage .

Métricas
Puede habilitar métricas en páginas de sitios web estáticos. Después de habilitar las
métricas, las estadísticas de tráfico de los archivos en el contenedor $web aparecen en
el panel de métricas.

Para habilitar métricas en las páginas de su sitio web estático, consulte Enable metrics
on static website pages (Habilitación de métricas en páginas de sitios web estáticos).

Compatibilidad de características
La compatibilidad con esta característica puede verse afectada al habilitar Data Lake
Storage Gen2, el protocolo Network File System (NFS) 3.0 o el Protocolo de
transferencia de archivos SSH (SFTP). Si ha habilitado cualquiera de estas
funcionalidades, consulte Compatibilidad con características de Blob Storage en cuentas
de Azure Storage para evaluar la compatibilidad con esta característica.

Preguntas más frecuentes

¿Funciona el firewall de Azure Storage con un sitio web estático?

Sí. Se admiten reglas de seguridad de red de la cuenta de almacenamiento, como


firewalls basados en IP y VNET, para el punto de conexión del sitio web estático, y se
pueden usar para proteger el sitio web.
¿Los sitios web estáticos admiten Microsoft Entra ID?

No. Un sitio web estático solo admite acceso de lectura anónimo para los archivos del
contenedor $web.

¿Cómo uso un dominio personalizado con un sitio web estático?

Puede configurar un dominio personalizado con un sitio web estático mediante Azure
Content Delivery Network (Azure CDN). Azure CDN proporciona latencias bajas
coherentes al sitio web desde cualquier lugar del mundo.

¿Cómo se usa el certificado de la Capa de sockets seguros (SSL)


personalizado con un sitio web estático?

Puede configurar un certificado SSL personalizado con un sitio web estático mediante
Azure CDN. Azure CDN proporciona latencias bajas coherentes al sitio web desde
cualquier lugar del mundo.

¿Cómo se agregan encabezados y reglas personalizados con un


sitio web estático?

Puede configurar el encabezado host para un sitio web estático mediante Azure CDN -
Verizon Premium. Nos interesa conocer sus comentarios aquí .

¿Por qué obtengo un error HTTP 404 de un sitio web estático?

Puede ocurrir un error 404 si hace referencia a un nombre de archivo con mayúsculas y
minúsculas incorrectas. Por ejemplo, [Link] en lugar de [Link] . Los nombres
de archivo y las extensiones en la URL de un sitio web estático distinguen mayúsculas de
minúsculas, aunque entreguen a través de HTTP. Esto también puede ocurrir si el punto
de conexión de Azure CDN aún no está aprovisionado. Espere hasta 90 minutos después
de aprovisionar una nueva red de Azure CDN para que se complete la propagación.

¿Por qué el directorio raíz del sitio web no redirige a la página de


índice predeterminada?

En Azure Portal, abra la página de configuración del sitio web estático de su cuenta y
busque el nombre y la extensión que se establecieron en el campo Nombre del
documento de índice. Asegúrese de que este nombre sea exactamente el mismo que el
nombre del archivo ubicado en el contenedor $web de la cuenta de almacenamiento.
Los nombres de archivo y las extensiones en la URL de un sitio web estático distinguen
mayúsculas de minúsculas, aunque entreguen a través de HTTP.

Pasos siguientes
Hospedaje de sitios web estáticos en Azure Storage
Asignación de un dominio personalizado a un punto de conexión de Azure Blob
Storage
Funciones de Azure
Azure App Service
Crear la primera aplicación web sin servidor
Tutorial: Hospedaje del dominio en Azure DNS
Inicio rápido: Creación del primer sitio
estático con Azure Static Web Apps
Artículo • 09/04/2024

Azure Static Web Apps publica un sitio web mediante la creación de una aplicación
desde un repositorio de código. En este inicio rápido se implementa una aplicación en
Azure Static Web Apps mediante la extensión de Visual Studio Code.

Si no tiene ninguna suscripción a Azure, cree una cuenta de evaluación gratuita .

Requisitos previos
GitHub
Cuenta de Azure
Visual Studio Code
Extensión de Azure Static Web Apps para Visual Studio Code
Instalación de Git

Creación de un repositorio
En este artículo se usa un repositorio de plantillas de GitHub para facilitar los primeros
pasos. La plantilla incluye una aplicación de inicio que se implementa en Azure Static
Web Apps.

Ningún marco

1. Vaya a la siguiente ubicación para crear un repositorio:


a. [Link]
2. Asigne el nombre my-first-static-web-app al repositorio.

7 Nota

Azure Static Web Apps requiere al menos un archivo HTML para crear una
aplicación web. El repositorio que se crea en este paso incluye un solo archivo
[Link].

Seleccione Create repository (Crear repositorio).


Clonación del repositorio
Con el repositorio creado en su cuenta de GitHub, clone el proyecto en la máquina local
mediante el siguiente comando.

Bash

git clone [Link]


[Link]

Asegúrese de reemplazar <YOUR_GITHUB_ACCOUNT_NAME> por el nombre de usuario de


GitHub.

Después, abra Visual Studio Code y vaya a Archivo > Abrir carpeta para abrir el
repositorio clonado en el editor.

Instalación de la extensión de Azure Static Web


Apps
Si aún no tiene la extensión Azure Static Web Apps para Visual Studio Code , puede
instalarla en Visual Studio Code.

1. Seleccione Ver>Extensiones.
2. En Buscar extensiones en Marketplace, escriba Azure Static Web Apps.
3. Seleccione Instalar para Azure Static Web Apps.

Creación de una aplicación web estática


1. En Visual Studio Code, seleccione el logotipo de Azure en la barra de actividades
para abrir la ventana extensiones de Azure.

7 Nota
Tendrá que iniciar sesión en Azure y GitHub en Visual Studio Code para
continuar. Si todavía no está autenticado, la extensión le solicita que inicie
sesión en los dos servicios durante el proceso de creación.

2. En Visual Studio Code, seleccione F1 para abrir la paleta de comandos.

3. Escriba Crear aplicación web estática en el cuadro de comandos.

4. Seleccione Azure Static Web Apps: Crear aplicación web estática....

5. Seleccione su suscripción a Azure.

6. Escriba my-first-static-web-app como nombre de la aplicación.

7. Seleccione la región más cercana a la suya.

8. Escriba los valores de configuración que coincidan con la opción del marco.

Ningún marco

ノ Expandir tabla

Configuración Valor

marco Seleccionar Personalizado

Ubicación del código de la aplicación Escriba /src .

Ubicación de la compilación Escriba /src .

9. Una vez creada la aplicación, se muestra una notificación de confirmación en


Visual Studio Code.

Si GitHub muestra un botón con la etiqueta Habilitar acciones en este repositorio,


selecciónelo para permitir que la acción de compilación se ejecute en el
repositorio.
A medida que la implementación está en curso, la extensión Visual Studio Code le
informa del estado de compilación.

Cuando se complete la implementación, puede navegar directamente al sitio web.

10. Para ver el sitio web en el explorador, haga clic con el botón derecho en el
proyecto en la extensión de Static Web Apps y seleccione Examinar sitio.

Limpieza de recursos
Si no va a seguir usando esta aplicación, puede eliminar la instancia de Azure Static Web
Apps mediante la extensión.

En la ventana de Azure de Visual Studio Code, vuelva a la sección Recursos y en Static


Web Apps, haga clic con el botón derecho en my-first-static-web-app y seleccione
Eliminar.
Pasos siguientes
Adición de una API
Creación de un entorno de desarrollo de
GitHub Codespaces con FastAPI y
Postgres
Artículo • 24/06/2024

En este artículo se muestra cómo ejecutar FastAPI y Postgres juntos en un entorno de


GitHub Codespaces . Codespaces es un entorno de desarrollo hospedado en la nube.
Codespaces permite crear entornos de desarrollo configurables y repetibles.

Puede abrir el repositorio de ejemplo en un explorador o en un entorno de desarrollo


integrado (IDE), como Visual Studio Code con la extensión GitHub Codespaces.

También puede clonar el repositorio de ejemplo localmente y, al abrir el proyecto en


Visual Studio Code, puede ejecutarlo mediante contenedores de desarrollo. Los
contenedores de desarrollo requieren que Docker Desktop esté instalado localmente.
Si no tiene Docker instalado, todavía puede usar VS Code para ejecutar el proyecto,
pero usa GitHub Codespaces como entorno.

Al usar GitHub Codespaces, tenga en cuenta que tiene un número fijo de horas básicas
gratuitas al mes. Este tutorial requiere menos de una hora de núcleo para completarse.
Para más información, consulte Acerca de la facturación de GitHub Codespaces .

Con el enfoque que se muestra en este tutorial, puede empezar con el código de
ejemplo y modificarlo para ejecutar otros marcos de Python como Django o Flask.

Inicio del entorno de desarrollo en Codespaces


Hay muchas rutas de acceso posibles para crear y usar GitHub Codespaces. En este
tutorial se muestra una ruta de acceso con la que puede empezar.

1. Vaya al repositorio [Link]


codespace de aplicaciones de ejemplo .

El repositorio de ejemplo tiene toda la configuración necesaria para crear un


entorno con una aplicación fastAPI mediante una base de datos postgres. Puede
crear un proyecto similar siguiendo los pasos descritos en Configuración de un
proyecto de Python para GitHub Codespaces .

2. Seleccione la pestaña Código, Codespaces y + para crear un nuevo espacio de


código.

3. Cuando el contenedor termine de compilarse, confirme que ve Codespaces en la


esquina inferior izquierda del explorador y que el repositorio de ejemplo se ha
cargado.

Los archivos de configuración de claves de codespace son [Link],


Dockerfile y [Link]. Para más información, consulte Introducción a
GitHub Codespaces.

 Sugerencia

También puede ejecutar el espacio de código en Visual Studio Code.


Seleccione Codespaces en la esquina inferior izquierda del explorador o
( Ctrl Shift Command + + P P + / Ctrl + ) y escriba "Codespaces". A
continuación, seleccione Abrir en VS Code. Además, si detiene el espacio de
código y vuelve al repositorio y vuelve a abrirlo en GitHub Codespaces, tiene
la opción de abrirlo en VS Code o en un explorador.

4. Seleccione el archivo .[Link] y cree una copia denominada .env con el


mismo contenido.

El .env contiene variables de entorno que se usan en el código para conectarse a la


base de datos.

5. Si aún no está abierta una ventana de terminal, abra una; para ello, abra la paleta
de comandos ( Ctrl Shift Command + + P P + / Ctrl + ), escriba "Terminal: Crear
nuevo terminal" y selecciónela para crear un nuevo terminal.

6. Seleccione la pestaña PUERTOS en la ventana del terminal para confirmar que


PostgreSQL se está ejecutando en el puerto 5432.

7. En la ventana del terminal, ejecute la aplicación FastAPI.

Bash

uvicorn main:app --reload


8. Seleccione la notificación Abrir en el explorador.

Si no ve o no ha perdido la notificación, vaya a PUERTOS y busque la dirección


local del puerto 8000. Use la dirección URL que aparece allí.

9. Agregue /docs al final de la dirección URL de vista previa para ver la interfaz de
usuario de Swagger, lo que le permite probar los métodos de API.

Los métodos de API se generan a partir de la interfaz openAPI que FastAPI crea a
partir del código.

10. En la página Swagger, ejecute el método POST para agregar un restaurante.

a. Expanda el método POST .

b. Haga clic en Probar.

c. Rellene el cuerpo de la solicitud.

JSON

{
"name": "Restaurant 1",
"address": "Restaurant 1 address"
}

d. Seleccione Ejecutar para confirmar el cambio.

Conectar a la base de datos y ver los datos


1. Vuelva a GitHub Codespace para el proyecto, seleccione la extensión SQLTools y, a
continuación, seleccione Base de datos local para conectarse.

La extensión SQLTools debe instalarse cuando se crea el contenedor. Si la


extensión SQLTools no aparece en la barra de actividad, cierre el espacio de código
y vuelva a abrirlo.

2. Expanda el nodo Base de datos local hasta que encuentre la tabla de restaurantes ,
seleccione Mostrar registros de tabla.

Debería ver el restaurante que agregó.

Limpieza
Para dejar de usar el espacio de código, cierre el explorador. (O bien, cierre VS Code si
lo abrió de esa manera).

Si planea volver a usar el espacio de código, puede mantenerlo. Solo los codespaces en
ejecución incurren en cargos de CPU. Un espacio de código detenido solo conlleva
costes de almacenamiento.

Si desea quitar el espacio de código, vaya a [Link] para


administrar los espacios de código.

Pasos siguientes
Desarrollo de una aplicación web de Python
Desarrollo de una aplicación de contenedor
Aprenda a usar las bibliotecas de Azure para Python.
Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Configuración de un archivo de inicio
personalizado para aplicaciones de
Python en Azure App Service
Artículo • 12/01/2024

En este artículo, obtendrá información sobre cómo configurar un archivo de inicio


personalizado, si es necesario, para una aplicación web de Python hospedada en App de
Azure Service. Para ejecutarse localmente, no necesita un archivo de inicio. Sin embargo,
al implementar una aplicación web en App de Azure Service, el código se ejecuta en un
contenedor de Docker que puede usar cualquier comando de inicio si están presentes.

Necesita un archivo de inicio personalizado en los casos siguientes:

Quiere iniciar el servidor web predeterminado gunicorn con argumentos


adicionales más allá de los valores predeterminados, que son --bind=[Link] --
timeout 600 .

La aplicación se compila con un marco distinto de Flask o Django, o quiere usar un


servidor web diferente además de Gunicorn.

Tiene una aplicación de Flask cuyo archivo de código principal se denomina algo
distinto de [Link] o [Link]*, o el objeto de aplicación se denomina algo
distinto de app .

En otras palabras, a menos que tenga un archivo [Link] o [Link] en la


carpeta raíz del proyecto y el objeto de aplicación de Flask se llame app , necesitará
un comando de inicio personalizado.

Para más información, consulte Proceso de inicio del contenedor.

Creación de un archivo de inicio


Cuando necesite un archivo de inicio personalizado, siga estos pasos:

1. Cree un archivo en el proyecto llamado [Link], [Link] u otro nombre de su


elección que contenga los comandos de inicio. Vea las secciones posteriores de
este artículo para obtener información específica sobre Django, Flask y otros
marcos.

Un archivo de inicio puede incluir varios comandos si es necesario.


2. Confirme el archivo en el repositorio de código para que se pueda implementar
con el resto de la aplicación.

3. En Visual Studio Code, seleccione el icono de Azure en la barra de actividades,


expanda RECURSOS, busque y expanda la suscripción, expanda App Services y
haga clic con el botón derecho en App Service y seleccione Abrir en el portal.

4. En Azure Portal , en la página Configuración de App Service, seleccione


Configuración general, escriba el nombre del archivo de inicio (como [Link] o
[Link]) en Comando de inicio de configuración>de pila y, a continuación,
seleccione Guardar.

7 Nota

En lugar de usar un archivo de comandos de inicio, puede colocar el propio


comando de inicio directamente en el campo Comando de inicio en Azure
Portal. Sin embargo, es preferible usar un archivo de comandos porque así se
mantiene esa parte de la configuración en el repositorio, donde puede auditar
los cambios y volver a implementar en otra instancia de App Service.

5. App Service se reinicia al guardar los cambios.

Sin embargo, si no ha implementado el código de la aplicación, visitar el sitio en


este momento muestra "Error de aplicación". Este mensaje indica que el servidor
Gunicorn se inició pero no encontró la aplicación y, por tanto, no responde nada a
las solicitudes HTTP.
Comandos de inicio de Django
De forma predeterminada, App Service busca automáticamente la carpeta que contiene
el archivo [Link] e inicia Gunicorn con el siguiente comando:

sh

# <module> is the folder that contains [Link]. If you need to use a


subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=[Link] --timeout 600 <module>.wsgi

Si desea cambiar cualquiera de los argumentos de Gunicorn, como el uso de --timeout


1200 , cree un archivo de comandos con esas modificaciones. Para obtener más

información, consulte Proceso de inicio de contenedor: aplicación Django.

Comandos de inicio de Flask


De forma predeterminada, el contenedor de App Service en Linux da por hecho que un
objeto WSGI al que se puede llamar de una aplicación de Flask se llama app y se incluye
en un archivo llamado [Link] o [Link], que se encuentra en la carpeta raíz de la
aplicación.

Si usa alguna de las siguientes variantes, el comando de inicio personalizado debe


identificar la ubicación del objeto de aplicación con el formato file:app_object:

Nombre de archivo o nombre de objeto de aplicación diferentes: por ejemplo, si


el archivo de código principal de la aplicación es [Link] y el objeto de aplicación
se llama myapp , el comando de inicio es el siguiente:

text

gunicorn --bind=[Link] --timeout 600 hello:myapp

El archivo de inicio está en una subcarpeta: por ejemplo, si el archivo de inicio es


myapp/[Link] y el objeto de aplicación es app , use el argumento --chdir de
Gunicorn para especificar la carpeta y, a continuación, asigne un nombre al archivo
de inicio y al objeto de aplicación como de costumbre:

text

gunicorn --bind=[Link] --timeout 600 --chdir myapp website:app


El archivo de inicio está dentro de un módulo: en el código python-sample-
vscode-flask-tutorial , el archivo de inicio de [Link] se encuentra dentro de la
carpeta hello_app, que es un módulo con un archivo __init__.py . El objeto de
aplicación se denomina app y se define en __init__.py y [Link] usa una
importación relativa.

Debido a esta organización, cuando Gunicorn apunta a webapp:app , se genera el


error "Attempted relative import in non-package" (Intento de importación relativa
en no paquete) y la aplicación no se inicia.

En esta situación, cree un archivo de correcciones de compatibilidad (shim) que


importe el objeto de aplicación desde el módulo y, a continuación, haga que
Gunicorn inicie la aplicación mediante la corrección de compatibilidad (shim). El
código python-sample-vscode-flask-tutorial , por ejemplo, incluye [Link] con
el siguiente contenido:

Python

from hello_app.webapp import app

A continuación, el comando de inicio es:

txt

gunicorn --bind=[Link] --workers=4 startup:app

Para obtener más información, consulte Proceso de inicio del contenedor: aplicación
flask.

Otros marcos y servidores web


El contenedor de App Service que ejecuta aplicaciones de Python tiene Django y Flask
instalados de forma predeterminada, junto con el servidor web Gunicorn.

Para usar un marco distinto de Django o Flask (como Falcon , FastAPI , etc.) o para
usar un servidor web diferente:

Incluya el marco o el servidor web en el archivo [Link].

En el comando de inicio, identifique el objeto WSGI al que se puede llamar como


se describe en la sección anterior de Flask.
Para iniciar un servidor web distinto de Gunicorn, use un python -m comando en
lugar de invocar el servidor directamente. Por ejemplo, el siguiente comando inicia
el servidor uvicorn , suponiendo que se llama app a WSGI y se encuentra en
[Link]:

sh

python -m uvicorn application:app --host [Link]

Se usa python -m porque los servidores web instalados a través de [Link]


no se agregan al entorno global de Python y, por lo tanto, no se pueden invocar
directamente. El comando python -m invoca el servidor desde dentro del entorno
virtual actual.
Uso de CI/CD con Acciones de GitHub
para implementar una aplicación web
de Python en Azure App Service en
Linux
Artículo • 03/08/2023

Use la plataforma de integración continua y entrega continua (CI/CD) Acciones de


GitHub para implementar una aplicación web de Python en Azure App Service en Linux.
El flujo de trabajo de Acciones de GitHub compila automáticamente el código e lo
implementa en el App Service siempre que haya una confirmación en el repositorio.
Puede agregar otra automatización en el flujo de trabajo de Acciones de GitHub, como
scripts de prueba, comprobaciones de seguridad e implementación de varias fases.

Creación de un repositorio para almacenar el


código de la aplicación
Si ya tiene una aplicación web de Python para usarla, asegúrese de que se confirma en
un repositorio de GitHub.

Si necesita una aplicación con la que trabajar, puede bifurcar y clonar el repositorio en
[Link] . El código procede
del tutorial de Flask en Visual Studio Code .

7 Nota

Si la aplicación usa Django y una base de datos de SQLite, no funcionará para este
tutorial. Si la aplicación django usa una base de datos independiente como
PostgreSQL, puede usarla con este tutorial. Para obtener más información sobre
Django, consulte consideraciones para Django más adelante en este artículo.

Creación del Azure App Service de destino


La forma más rápida de crear una instancia de App Service es usar la interfaz de la línea
de comandos (CLI) de Azure a través del Cloud Shell interactivo de Azure. El Cloud Shell
incluye Git y la CLI de Azure. En los pasos siguientes, usará az webapp para crear la
App Service y realizar la primera implementación de la aplicación.
Paso 1. Inicie sesión en Azure Portal en [Link] .

Paso 2. Para abrir la CLI de Azure, seleccione el icono Cloud Shell en la barra de
herramientas del portal.

Paso 3. En el Cloud Shell, seleccione Bash en la lista desplegable.

Paso 4. En el Cloud Shell, clone el repositorio mediante git clone . Por ejemplo, si usa
la aplicación de ejemplo de Flask, el comando es:

Bash

git clone [Link]


[Link]

Reemplace <github-user> por el nombre de la cuenta de GitHub donde bifurca el


repositorio. Si usa un repositorio de aplicaciones diferente, este repositorio es donde
configurará Acciones de GitHub.

7 Nota

Cloud Shell está respaldado por una cuenta de Azure Storage en un grupo de
recursos denominado cloud-shell-storage-<su-región>. Esa cuenta de
almacenamiento contiene una imagen del sistema de archivos del Cloud Shell, que
almacena el repositorio clonado. Hay un pequeño costo para este almacenamiento.
Puede eliminar la cuenta de almacenamiento al final de este artículo, junto con
otros recursos que cree.
 Sugerencia

Para pegar en Cloud Shell, use Ctrl+Mayús+V o haga clic con el botón derecho y
seleccione Pegar en el menú contextual.

Paso 5. En el Cloud Shell, cambie el directorio a la carpeta del repositorio que tiene la
aplicación de Python para que el comando az webapp up reconozca la aplicación como
Python. Por ejemplo, para la aplicación de ejemplo de Flask:

Bash

cd python-sample-vscode-flask-tutorial

Paso 6. En el Cloud Shell, use az webapp para crear una App Service e implementar
inicialmente la aplicación.

Bash

az webapp up --name <app-service-name> --runtime "PYTHON:3.9"

Especifique un nombre App Service único en Azure. El nombre debe tener entre 3 y 60
caracteres y solo puede contener letras, números y guiones. El nombre debe comenzar
con una letra y terminar con una letra o un número.

Use az webapp list-runtimes para obtener una lista de los entornos de ejecución
disponibles. Use el PYTHON|X.Y formato , donde X.Y es la versión de Python.

También puede especificar la ubicación del App Service con el --location parámetro .
Use el az account list-locations --output table comando para obtener una lista de
las ubicaciones disponibles.

Paso 7. Si la aplicación usa un comando de inicio personalizado, use el comando az


webapp config use ese comando. Si la aplicación no tiene un comando de inicio
personalizado, omita este paso.

Por ejemplo, la aplicación python-sample-vscode-flask-tutorial contiene un archivo


denominado [Link] que contiene un comando de inicio que puede usar de la
siguiente manera:

Bash

az webapp config set \


--resource-group <resource-group-name> \
--name <app-service-name> \
--startup-file [Link]

Puede encontrar el nombre del grupo de recursos en la salida del comando anterior az
webapp up . El nombre del grupo de recursos comenzará por <azure-account-

name>_rg_.

Paso 8. Para ver la aplicación en ejecución, abra un explorador y vaya a [Link] app-
[Link]>.

Si ve una página genérica, espere unos segundos para que se inicie la instancia de App
Service y actualice la página. Si sigue viendo la página genérica, compruebe que
implementó desde la carpeta correcta. Por ejemplo, si usa la aplicación de ejemplo flask,
la carpeta es python-sample-vscode-flask-tutorial. Además, para la aplicación de ejemplo
de Flask, compruebe que establece el comando de inicio correctamente.

Configuración de la implementación continua


en App Service
En los pasos siguientes, configurará la implementación continua (CD), lo que significa
que se produce una nueva implementación de código cuando se desencadena un flujo
de trabajo. El desencadenador de este tutorial es cualquier cambio en la rama principal
del repositorio, como con una solicitud de incorporación de cambios (PR).

Paso 1. Agregue Acción de GitHub con el comando az webapp deployment github-


actions add .

Bash

az webapp deployment github-actions add \


--repo "<github-user>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github

El --login-with-github parámetro usa un método interactivo para recuperar un token


de acceso personal. Siga las indicaciones para completar la autenticación.

Si hay un archivo de flujo de trabajo existente que entra en conflicto con el nombre App
Service usa, se le pedirá que elija si desea sobrescribir. Use el --force parámetro para
sobrescribir sin preguntar.
Qué hace el comando add:

Crea un nuevo archivo de flujo de trabajo: .github/workflows/<workflow-


[Link]> en el repositorio; el nombre del archivo contendrá el nombre de la App
Service.
Captura un perfil de publicación con secretos para la App Service y lo agrega como
secreto de acción de GitHub. El nombre del secreto comenzará por
AZUREAPPSERVICE_PUBLISHPROFILE_. Se hace referencia a este secreto en el
archivo de flujo de trabajo.

Paso 2. Obtenga los detalles de una configuración de implementación de control de


código fuente con el comando az webapp deployment source show .

Bash

az webapp deployment source show \


--name <app-service-name> \
--resource-group <resource-group-name>

En la salida del comando , confirme los valores de las repoUrl propiedades y branch .
Estos valores deben coincidir con los valores especificados en el paso anterior.

Flujo de trabajo y acciones de GitHub


explicados
Un flujo de trabajo se define mediante un archivo YAML (.yml) en la ruta de acceso
/.github/workflows/ del repositorio. Este archivo YAML contiene los distintos pasos y
parámetros que componen el flujo de trabajo, un proceso automatizado asociado a un
repositorio de GitHub. Puede compilar, probar, empaquetar, publicar e implementar
cualquier proyecto en GitHub con un flujo de trabajo.

Cada flujo de trabajo se compone de uno o varios trabajos. Cada trabajo a su vez es un
conjunto de pasos. Y, por último, cada paso es un script de shell o una acción.

En cuanto al flujo de trabajo configurado con el código de Python para la


implementación en App Service, el flujo de trabajo tiene las siguientes acciones:

Acción Descripción

Comprobación Consulte el repositorio en un ejecutor, un agente de Acciones de GitHub.

setup-python Instale Python en el ejecutor.


Acción Descripción

appservice-build Cree la aplicación web.

webapps-deploy Implemente la aplicación web mediante una credencial de perfil de


publicación para autenticarse en Azure. La credencial se almacena en un
secreto de GitHub .

La plantilla de flujo de trabajo que se usa para crear el flujo de trabajo es Azure/actions-
workflow-samples .

El flujo de trabajo se desencadena en eventos de inserción en la rama especificada. El


evento y la rama se definen al principio del archivo de flujo de trabajo. Por ejemplo, el
siguiente fragmento de código muestra que el flujo de trabajo se desencadena en
eventos de inserción en la rama principal :

yml

on:
push:
branches:
- main

Aplicaciones autorizadas de OAuth


Al configurar la implementación continua, autoriza Azure App Service como una
aplicación de OAuth autorizada para su cuenta de GitHub. App Service usa el acceso
autorizado para crear un archivo YML de acción de GitHub en
.github/workflows/<[Link]>. Puede ver las aplicaciones autorizadas y
revocar permisos en la configuración de las cuentas de GitHub, en Integraciones o
aplicaciones.


Secreto de perfil de publicación de flujo de trabajo
En el archivo de flujo de trabajo .github/[Link]<> que se agregó al
repositorio, verá un marcador de posición para las credenciales de perfil de publicación
necesarias para el trabajo de implementación del flujo de trabajo. La información del
perfil de publicación se almacena cifrada en la configuración del repositorio, en
Seguridad o acciones.

En este artículo, la acción de GitHub se autentica con una credencial de perfil de


publicación. Hay otras maneras de autenticarse, como con una entidad de servicio o
OpenID Connect. Para obtener más información, consulte Implementación en App
Service mediante Acciones de GitHub.

Ejecución del flujo de trabajo


Ahora probará el flujo de trabajo realizando un cambio en el repositorio.

Paso 1. Vaya a la bifurcación del repositorio de ejemplo (o el repositorio que usó) y


seleccione la rama que estableció como parte del desencadenador.

Paso 2. Haga un pequeño cambio.


Por ejemplo, si usó el tutorial de VS Code Flask, puede

Vaya al archivo /hello-app/templates/[Link] de la rama del desencadenador.


Seleccione Editar y agregue el texto "Redeployed!".

Paso 3. Confirme el cambio directamente en la rama en la que está trabajando.

En la esquina superior derecha de la página que está editando, seleccione el botón


Confirmar cambios ... . Se abre la ventana Confirmar cambios . En la ventana
Confirmar cambios , modifique el mensaje de confirmación si lo desea y, a
continuación, seleccione el botón Confirmar cambios .
La confirmación inicia el flujo de trabajo de Acciones de GitHub.

También puede iniciar manualmente el flujo de trabajo.

Paso 1. Vaya a la pestaña Acciones del repositorio configurado para la implementación


continua.

Paso 2. Seleccione el flujo de trabajo en la lista de flujos de trabajo y, a continuación,


seleccione Ejecutar flujo de trabajo.

Solución de problemas de un flujo de trabajo con errores


Para comprobar el estado de un flujo de trabajo, vaya a la pestaña Acciones del
repositorio. Al profundizar en el archivo de flujo de trabajo creado en este tutorial, verá
dos trabajos "compilar" e "implementar". Para un trabajo con errores, examine la salida
de las tareas de trabajo para obtener una indicación del error. Algunos de los problemas
más comunes son:

Si se produce un error en la aplicación debido a una dependencia que falta, el


archivo [Link] no se procesó durante la implementación. Este
comportamiento se produce si creó la aplicación web directamente en el portal en
lugar de usar el comando az webapp up como se muestra en este artículo.

Si ha aprovisionado el servicio de aplicaciones a través del portal, es posible que


no se haya establecido la acción de compilación
SCM_DO_BUILD_DURING_DEPLOYMENT configuración. Esta configuración debe
establecerse en true . El az webapp up comando establece automáticamente la
acción de compilación.

Si ve un mensaje de error con el tiempo de espera del protocolo de enlace TLS,


ejecute el flujo de trabajo manualmente seleccionando Desencadenar
implementación automática en la pestaña Acciones del repositorio para ver si el
tiempo de espera es un problema temporal.
Si configura la implementación continua para la aplicación contenedora como se
muestra en este tutorial, el archivo de flujo de trabajo
(.github/workflows/<[Link]>) se crea automáticamente
automáticamente. Si lo modificó, quite las modificaciones para ver si están
causando el error.

Ejecución de un script posterior a la


implementación
Un script posterior a la implementación puede, por ejemplo, definir variables de entorno
esperadas por el código de la aplicación. Agregue el script como parte del código de la
aplicación y ejecútelo mediante el comando de inicio.

Para evitar la codificación rígida de valores de variables en el archivo YML de flujo de


trabajo, puede hacerlos en la interfaz web de GitHub y, a continuación, hacer referencia
al nombre de la variable en el script. Puede crear secretos cifrados para un repositorio o
para un entorno (repositorio de cuentas). Para más información, consulte Secretos
cifrados en GitHub Docs .

Consideraciones para Django


Como se indicó anteriormente en este artículo, puede usar Acciones de GitHub para
implementar aplicaciones de Django en Azure App Service en Linux, si usa una base de
datos independiente. No se puede usar una base de datos SQLite, ya que App Service
bloquea el archivo db.sqlite3, lo que impide tanto las lecturas como las escrituras. Este
comportamiento no afecta a una base de datos externa.

Como se describe en el artículo Configuración de la aplicación de Python en App


Service: proceso de inicio del contenedor, App Service busca automáticamente un
archivo [Link] en el código de la aplicación, que normalmente contiene el objeto de
aplicación. Cuando usó el webapp config set comando para establecer el comando de
inicio, usó el --startup-file parámetro para especificar el archivo que contiene el
objeto de aplicación. El webapp config set comando no está disponible en la acción
webapps-deploy. En su lugar, puede usar el startup-command parámetro para especificar
el comando de inicio. Por ejemplo, el siguiente fragmento de código muestra cómo
especificar el comando de inicio en el archivo de flujo de trabajo:

yml

startup-command: [Link]
Al usar Django, normalmente quiere migrar los modelos de datos mediante python
[Link] migrate el comando después de implementar el código de la aplicación.

Puede ejecutar el comando migrate en un script posterior a la implementación.

Desconectar Acciones de GitHub


Desconectar Acciones de GitHub de la App Service permite volver a configurar la
implementación de la aplicación. Puede elegir lo que sucede con el archivo de flujo de
trabajo después de desconectar, ya sea para guardar o eliminar el archivo.

CLI de Azure

Desconecte Acciones de GitHub con el comando az webapp deployment github-


actions remove de la CLI de Azure.

Bash

az webapp deployment github-actions remove \


--repo "<github-user>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github

Limpieza de recursos
Para evitar incurrir en cargos en los recursos de Azure creados en este tutorial, elimine el
grupo de recursos que contiene la instancia de App Service y el plan de App Service.

CLI de Azure

En cualquier lugar en que se instale la CLI de Azure, incluida la Cloud Shell de


Azure, puede usar el comando az group delete para eliminar el grupo de recursos.

Bash

az group delete --name <resource-group-name>

Para eliminar la cuenta de almacenamiento que mantiene el sistema de archivos para


Cloud Shell, lo que conlleva un pequeño cargo mensual, elimine el grupo de recursos
que comienza con cloud-shell-storage-. Si es el único usuario del grupo, es seguro
eliminar el grupo de recursos. Si hay otros usuarios, puede eliminar una cuenta de
almacenamiento en el grupo de recursos.

Si eliminó el grupo de recursos de Azure, considere también la posibilidad de realizar las


siguientes modificaciones en la cuenta de GitHub y el repositorio conectado para la
implementación continua:

En el repositorio, quite el archivo .github/workflows/<[Link]>.


En la configuración del repositorio, quite la clave secreta
AZUREAPPSERVICE_PUBLISHPROFILE_ creada para el flujo de trabajo.
En la configuración de la cuenta de GitHub, quite Azure App Service como una
aplicación de Oauth autorizada para su cuenta de GitHub.
Uso de Azure Pipelines para crear e
implementar una aplicación web de
Python en Azure App Service
Artículo • 07/04/2024

Azure DevOps Services

Use Azure Pipelines para la integración y entrega continuas (CI/CD) para crear e
implementar una aplicación web de Python en Azure App Service en Linux. La
canalización crea e implementa automáticamente la aplicación web de Python en App
Service cada vez que hay una confirmación en el repositorio.

En este artículo aprenderá a:

" Crear una aplicación web en Azure App Service.


" Creación de un proyecto en Azure DevOps.
" Conectar su proyecto de DevOps con Azure.
" Crear una canalización específica de Python.
" Ejecutar la canalización para crear e implementar la aplicación en la aplicación web
en App Service.

Requisitos previos
Suscripción a Azure. En caso de no tener ninguna, cree una cuenta gratuita .
Una cuenta de GitHub. Si no tiene ninguna, cree una gratis .
Una organización de Azure DevOps Services. cree una de forma gratuita.

Creación de un repositorio para almacenar el


código de la aplicación
Bifurque el repositorio de muestra de [Link]
vscode-flask-tutorial a su cuenta de GitHub.

En el host local, clone el repositorio de GitHub. Use el comando siguiente,


reemplazando <repository-url> por la dirección URL del repositorio bifurcado.

git
git clone <repository-url>

Prueba local de la aplicación


Cree y ejecute la aplicación de forma local para asegurarse de que funciona.

1. Cambie a la carpeta del repositorio clonado.

Bash

cd python-sample-vscode-flask-tutorial

2. Compilar y ejecutar la aplicación

Linux

Bash

python -m venv .env


source .env/bin/activate
pip install --upgrade pip
pip install -r ./[Link]
export set FLASK_APP=hello_app.webapp
python3 -m flask run

3. Para ver la aplicación, abra una ventana del navegador y vaya a


[Link] Compruebe que ve el título Visual Studio Flask Tutorial .

4. Cuando haya terminado, cierre la ventana del navegador y detenga el servidor


Flask con Ctrl + C .

Abrir una ventana de Cloud Shell


1. Inicie sesión en Azure Portal en [Link] .

2. Para abrir la CLI de Azure, seleccione el botón Cloud Shell en la barra de


herramientas del portal.

3. Cloud Shell aparece en la parte inferior del explorador. Seleccione Bash en el menú
desplegable.
4. Para disponer de más espacio para trabajar, seleccione el botón maximizar.

Creación de una aplicación web de Azure App Service


Cree la aplicación web de Azure App Service desde Cloud Shell en Azure Portal.

 Sugerencia

Para pegar en Cloud Shell, use Ctrl + Mayús + V o haga clic con el botón derecho y
seleccione Pegar en el menú contextual.

1. Clone el repositorio con el siguiente comando y reemplace <repository-url> por


la dirección URL del repositorio bifurcado.

Bash

git clone <repository-url>

2. Cambie el directorio a la carpeta del repositorio clonado para que el comando az


webapp up reconozca la aplicación como una aplicación de Python.

Bash

cd python-sample-vscode-flask-tutorial

3. Use el comando az webapp up para aprovisionar App Service y realizar la primera


implementación de la aplicación. Reemplace <your-web-app-name> por un nombre
que sea único en Azure. Normalmente, se usa un nombre personal o de empresa
junto con un identificador de aplicación, como <your-name>-flaskpipelines . La
dirección URL de la aplicación se convierte en <[Link]>.

Azure CLI

az webapp up --name <your-web-app-name>

La salida JSON del comando az webapp up muestra:


JSON

{
"URL": <your-web-app-url>,
"appserviceplan": <your-app-service-plan-name>,
"location": <your-azure-location>,
"name": <your-web-app-name>,
"os": "Linux",
"resourcegroup": <your-resource-group>,
"runtime_version": "python|3.11",
"runtime_version_detected": "-",
"sku": <sku>,
"src_path": <repository-source-path>
}

Anote los valores URL y runtime_version . Use runtime_version en el archivo YAML


de la canalización. La URL es la dirección URL de la aplicación web. Puede usarla
para comprobar que la aplicación se está ejecutando.

7 Nota

El comando az webapp up realiza las acciones siguientes:

Cree un grupo de recursos predeterminado.

Cree un plan de App Service predeterminado.

Cree una aplicación con el nombre especificado.

Implemente desde un archivo ZIP todos los archivos del directorio de


trabajo actual, con la automatización de creación habilitada.

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.

Puede sustituir la acción predeterminada por sus propios valores mediante los
parámetros de comando. Para más información, consulte az webapp up.

4. La aplicación python-sample-vscode-flask-tutorial tiene un archivo [Link] que


contiene el comando de inicio específico de la aplicación web. Establezca la
propiedad de configuración startup-file de la aplicación web en [Link] .
a. En la salida del comando az webapp up , copie el valor de resourcegroup .

b. Escriba el siguiente comando, con el grupo de recursos y el nombre de la


aplicación.

Azure CLI

az webapp config set --resource-group <your-resource-group> --name


<your-web-app-name> --startup-file [Link]

Cuando el comando finaliza, muestra la salida JSON que contiene todas las
opciones de configuración de la aplicación web.

5. Para ver la aplicación en ejecución, abra un explorador y vaya a la URL que se


muestra en la salida del comando az webapp up . Si ve una página genérica, espere
unos segundos a que se inicie App Service y, a continuación, actualice la página.
Compruebe que ve el título Visual Studio Flask Tutorial .

Crear un proyecto de Azure DevOps.


Cree un proyecto de Azure DevOps nuevo.

1. En un explorador, vaya a [Link] e inicie sesión.


2. Seleccione su organización.
3. Para crear un nuevo proyecto, seleccione Nuevo proyecto o Crear proyecto si va a
crear el primer proyecto de la organización.
4. Escriba un nombre de proyecto.
5. Seleccione la visibilidad del proyecto.
6. Seleccione Crear.

Creación de una conexión de servicio


Una conexión de servicio permite crear una conexión para proporcionar acceso
autenticado desde Azure Pipelines a servicios externos y remotos. Para implementar en
la aplicación web de App de Azure Service, cree una conexión de servicio al grupo de
recursos que contiene la aplicación web.

1. En la página del proyecto, seleccione Configuración del proyecto.


2. Seleccione Conexiones de servicio en la sección Canalizaciones del menú.

3. Seleccione Crear conexión del servicio.

4. Seleccione Azure Resource Manager y, a continuación, seleccione Siguiente.


5. Seleccione el método de autenticación y seleccione Siguiente.

6. En el cuadro de diálogo Nueva conexión del servicio de Azure, escriba la


información específica del método de autenticación seleccionado. Para obtener
más información sobre los métodos de autenticación, consulte Conexión con
Azure mediante una conexión de servicio de Azure Resource Manager.

Por ejemplo, si usa un método de autenticación de Federación de identidades de


carga de trabajo (automática) o Entidad de servicio (automática), escriba la
información necesaria.
ノ Expandir tabla

Campo Descripción

Nivel de ámbito SeleccioneSuscripción.

Suscripción El nombre de la suscripción de Azure.


Campo Descripción

Grupo de recursos Nombre del grupo de recursos que contiene la


aplicación web.

Nombre de conexión de servicio Un nombre descriptivo para la conexión.

Conceder permisos de acceso a todas Seleccione esta opción para conceder acceso a
las canalizaciones todas las canalizaciones.

7. Seleccione Guardar.

La nueva conexión aparece en la lista Conexiones de servicio y está lista para su uso en
Azure Pipeline.

Crear una canalización


Cree una canalización para crear e implementar su aplicación web de Python en Azure
App Service. Para comprender los conceptos de canalización, vea:
[Link]
postJsllMsg=true&autoCaptions=es-es

1. En el menú de navegación izquierdo, seleccione Canalizaciones.


2. Seleccione Crear canalización.

3. En el cuadro de diálogo Dónde está el código, seleccione GitHub. Es posible que


se le pida que inicie sesión en GitHub.

4. En la pantalla Seleccionar un repositorio, seleccione el repositorio de ejemplo


bifurcado.
5. Es posible que se le pida que vuelva a escribir la contraseña de GitHub como
confirmación.

6. Si la extensión de Azure Pipelines no está instalada en GitHub, GitHub le pedirá


que instale la extensión de Azure Pipelines.

En esta página, desplácese hacia abajo hasta la sección Acceso al repositorio, elija
si desea instalar la extensión en todos los repositorios o solo en los seleccionados
y, a continuación, seleccione Aprobar e instalar.
7. En el cuadro de diálogo Configuración de la canalización, seleccione Aplicación
web de Python a Linux en Azure.

8. Seleccione la suscripción de Azure y seleccione Continuar.

9. Si usa su nombre de usuario y la contraseña para autenticarse, se abre un


explorador para que inicie sesión en su cuenta Microsoft.

10. Seleccione el nombre de la aplicación web en la lista desplegable y seleccione


Validar y configurar.

Azure Pipelines crea un archivo [Link] y lo muestra en el editor de


canalizaciones de YAML. El archivo de canalización define la canalización de CI/CD como
una serie de fases, trabajos y pasos, donde cada paso contiene los detalles de diferentes
tareas y scripts. Eche un vistazo a la canalización para ver lo que hace. Asegúrese de que
todas las entradas predeterminadas sean adecuadas para el código.

Archivo de canalización YAML


En la explicación siguiente se describe el archivo de canalización YAML. Para obtener
información sobre el esquema del archivo YAML de canalización, consulte Referencia de
esquema de YAML.

Variables
La sección variables contiene las siguientes variables:

yml

variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'

# Web app name


webAppName: '<your-web-app-name>'

# Agent VM image name


vmImageName: 'ubuntu-latest'

# Environment name
environmentName: '<your-web-app-name>'

# Project root folder.


projectRoot: $([Link])

# Python version: 3.11. Change this to match the Python runtime version
running on your web app.
pythonVersion: '3.11'

ノ Expandir tabla

Variable Descripción

azureServiceConnectionId El identificador o nombre de la conexión de servicio de Azure


Resource Manager.

webAppName Nombre de la aplicación web de Azure App Service.

vmImageName Nombre del sistema operativo que se va a usar para el agente de


creación.

environmentName Nombre del entorno usado en la fase de implementación. El entorno


se crea automáticamente cuando se ejecuta el trabajo de fase.

projectRoot Carpeta raíz que contiene el código de la aplicación.

pythonVersion Versión de Python que se va a usar en los agentes de compilación e


implementación.

Fase de compilación

La fase de compilación contiene un único trabajo que se ejecuta en el sistema operativo


definido en la variable vmImageName.

yml

- job: BuildJob
pool:
vmImage: $(vmImageName)

El trabajo contiene varios pasos:

1. La tarea UsePythonVersion selecciona la versión de Python que se va a usar. La


versión se define en la variable pythonVersion .

yml

- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
2. En este paso se usa un script para crear un entorno de Python virtual e instalar las
dependencias de la aplicación contenidas en el archivo [Link] . El
parámetro --target especifica la ubicación para instalar las dependencias. El
parámetro workingDirectory especifica la ubicación del código de la aplicación.

yml

- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install --target="./.python_packages/lib/site-packages" -r
./[Link]
workingDirectory: $(projectRoot)
displayName: "Install requirements"

3. La tarea ArchiveFiles crea el archivo .zip archivo que contiene la aplicación web. El
archivo .zip se carga en la canalización como el artefacto denominado drop . El
archivo .zip se usa en la fase de implementación para implementar la aplicación
en la aplicación web.

yml

- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile:
$([Link])/$([Link]).zip
replaceExistingArchive: true

- upload: $([Link])/$([Link]).zip
displayName: 'Upload package'
artifact: drop

ノ Expandir tabla

Parámetro Descripción

rootFolderOrFile Ubicación del código de la aplicación.

includeRootFolder Indica si se debe incluir la carpeta raíz en el archivo .zip.


Establezca este parámetro en false ; de lo contrario, el contenido
del archivo .zip se coloca en una carpeta denominada s y App
Parámetro Descripción

Service en el contenedor de Linux no encuentra el código de la


aplicación.

archiveType El tipo de archivo que se va a crear. Establézcalo en zip .

archiveFile Ubicación del archivo .zip que se va a crear.

replaceExistingArchive Indica si se va a reemplazar un archivo existente si el archivo ya


existe. Establézcalo en true .

upload Ubicación del archivo .zip que se va a cargar.

artifact Nombre del artefacto que se va a crear.

Fase de implementación
La fase de implementación se ejecuta si la fase de compilación se completa
correctamente. Las siguientes palabras clave definen este comportamiento:

yml

dependsOn: Build
condition: succeeded()

La fase de implementación contiene un único trabajo de implementación configurado


con las siguientes palabras clave:

yml

- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)

ノ Expandir tabla

Palabra Descripción
clave

deployment Indica que el trabajo es un trabajo de implementación que tiene como destino un
entorno.

pool Especifica el grupo de agentes de implementación. Grupo de agentes


predeterminado si no se especifica el nombre. La palabra clave vmImage identifica
el sistema operativo de la imagen de máquina virtual del agente.
Palabra Descripción
clave

environment Especifica el entorno en el que se va a implementar. El entorno se crea


automáticamente en el proyecto cuando se ejecuta el trabajo.

La palabra clave strategy se usa para definir la estrategia de implementación. La


palabra clave runOnce especifica que el trabajo de implementación se ejecuta una vez.
La palabra clave deploy especifica los pasos que se van a ejecutar en el trabajo de
implementación.

yml

strategy:
runOnce:
deploy:
steps:

Los steps de la canalización son los siguientes:

1. Use la tarea UsePythonVersion para especificar la versión de Python que se va a


usar en el agente. La versión se define en la variable pythonVersion .

yml

- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'

2. Implemente la aplicación web mediante AzureWebApp@1. Esta tarea implementa


el artefacto de canalización drop en la aplicación web.

yml

- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : <your-web-app-name>'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $([Link])/drop/$([Link]).zip

ノ Expandir tabla
Parámetro Descripción

azureSubscription El identificador o nombre de la conexión de servicio de Azure


Resource Manager que se va a utilizar.

appName el nombre de la aplicación web.

package Ubicación del archivo .zip que se va a implementar.

Además, debido a que el repositorio python-vscode-flask-tutorial contiene el


mismo comando de inicio en un archivo llamado [Link], puede especificar ese
archivo agregando el parámetro: startUpCommand: '[Link]' .

Ejecución de la canalización
Ya está todo listo para probarlo.

1. En el editor, seleccione Guardar y ejecutar.

2. En el cuadro de diálogo Guardar y ejecutar, agregue un mensaje de confirmación


y, a continuación, seleccione Guardar y ejecutar.

Puede ver la canalización a medida que se ejecuta seleccionando las fases o los
trabajos en el resumen de ejecución de la canalización.

Hay marcas de verificación verdes junto a cada fase y trabajo a medida que se
completa correctamente. Si se producen errores, se muestran en el resumen o en
los pasos del trabajo.
Para volver rápidamente al editor de YAML, seleccione los puntos verticales en la
parte superior derecha de la página Resumen y seleccione Editar canalización:
3. En el trabajo de implementación, seleccione la tarea Implementar aplicación web
de Azure para mostrar su salida. Para visitar el sitio implementado, mantenga
presionada la tecla Ctrl y seleccione la dirección URL tras App Service
Application URL .

Si usa la aplicación de ejemplo, la aplicación debería aparecer de la siguiente


manera:

) Importante

Si se produce un error en la aplicación debido a una dependencia que falta,


significa que el archivo [Link] no se procesó durante la implementación.
Este comportamiento se produce si creó la aplicación web directamente en el
portal en lugar de usar el comando az webapp up como se muestra en este artículo.

El comando az webapp up establece específicamente la acción de compilación


SCM_DO_BUILD_DURING_DEPLOYMENT en true . Si aprovisionó el servicio de aplicaciones

a través del portal, esta acción no se establece automáticamente.

Los pasos siguientes establecen la acción:

1. Abra Azure Portal , seleccione la instancia de App Service y, a continuación,


elija Configuración.
2. En la pestaña Configuración de aplicaciones, seleccione Nueva configuración
de aplicación.
3. En el menú emergente que aparece, establezca Nombre en
SCM_DO_BUILD_DURING_DEPLOYMENT , establezca Valor en true y seleccione

Aceptar.
4. Seleccione Guardar en la parte superior de la página Configuración.
5. Repetición de la ejecución de la canalización Las dependencias deben
instalarse durante la implementación.

Desencadenamiento de una ejecución de la


canalización
Para desencadenar una ejecución de canalización, confirme un cambio en el repositorio.
Por ejemplo, puede agregar una nueva característica a la aplicación o actualizar las
dependencias de la aplicación.

1. Vaya al repositorio de GitHub.


2. Realice un cambio en el código, como cambiar el título de la aplicación.
3. Confirme el cambio en el repositorio.
4. Vaya a la canalización y compruebe que se ha creado una nueva ejecución.
5. Cuando finalice la ejecución, compruebe que la nueva creación se ha
implementado en la aplicación web.
a. En Azure Portal, vaya a la aplicación web.
b. Seleccione Centro de implementación y seleccione la pestaña Registros.
c. Compruebe que aparece la nueva implementación.

Consideraciones para Django


Puede usar Azure Pipelines para implementar aplicaciones de Django en Azure App
Service en Linux si usa una base de datos independiente. No se puede usar una base de
datos SQLite, ya que App Service bloquea el archivo db.sqlite3, lo que impide tanto las
lecturas como las escrituras. Este comportamiento no afecta a una base de datos
externa.

Como se describe en Configuración de la aplicación de Python en App Service: proceso


de inicio del contenedor, App Service busca automáticamente un archivo [Link] en el
código de la aplicación, que normalmente contiene el objeto de aplicación. Si desea
personalizar el comando de inicio de cualquier manera, use el parámetro
startUpCommand en el paso AzureWebApp@1 del archivo de canalización de YAML, como se

describe en la sección anterior.

Al usar Django, normalmente quiere migrar los modelos de datos mediante [Link]
migrate después de implementar el código de la aplicación. Puede agregar

startUpCommand con un script posterior a la implementación para este propósito. Por

ejemplo, esta es la propiedad startUpCommand de la tarea AzureWebApp@1.

yml

- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $([Link])/drop/$([Link]).zip
startUpCommand: 'python [Link] migrate'

Ejecución de pruebas en el agente de


compilación
Como parte del proceso de compilación, puede que desee ejecutar pruebas en el
código de la aplicación. Las pruebas se ejecutan en el agente de compilación, por lo que
debe instalar las dependencias en un entorno virtual en el agente de compilación. Una
vez ejecutadas las pruebas, elimine el entorno virtual antes de crear el archivo .zip para
la implementación. Los siguientes elementos de script muestran este proceso.
Colóquelos antes de la tarea ArchiveFiles@2 en el archivo [Link]. Para más
información, consulte Ejecución de scripts multiplataforma.

yml

# The | symbol is a continuation character, indicating a multi-line script.


# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r [Link]

# The displayName shows in the pipeline UI when a build runs


displayName: 'Install dependencies on build agent'

- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'

También puede usar una tarea como PublishTestResults@2 para publicar los resultados
de las pruebas en la canalización. Para más información, consulte Compilación de
aplicaciones de Python: ejecución de pruebas.

Limpieza de recursos
Para evitar incurrir en cargos en los recursos de Azure creados en este tutorial:

Elimine el proyecto que creó. Al eliminar el proyecto, se elimina la canalización y la


conexión de servicio.

Elimine el grupo de recursos de Azure que contiene App Service y el plan de App
Service. En Azure Portal, vaya al grupo de recursos, seleccione Eliminar grupo de
recursos y siga las indicaciones.

Elimine la cuenta de almacenamiento que mantiene el sistema de archivos para


Cloud Shell. Cierre Cloud Shell y, a continuación, vaya al grupo de recursos que
comienza con cloud-shell-storage-, seleccione Eliminar grupo de recursos y siga
las indicaciones.

Pasos siguientes
Personalización de aplicaciones de Python en Azure Pipelines
Configuración de Python en App Service

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto


Inicio rápido: inicio de sesión de
usuarios y llamada a Microsoft Graph
desde una aplicación web de Python
Flask
Artículo • 22/04/2024

En este inicio rápido, descargará y ejecutará un ejemplo de aplicación web de Python


Flask que muestra cómo autenticar a los usuarios y llamar a Microsoft Graph API. Los
usuarios de su organización de Microsoft Entra pueden iniciar sesión en la aplicación.

Requisitos previos
Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita .
Un inquilino de Microsoft Entra. Para más información, consulte cómo obtener un
inquilino de Microsoft Entra.
Python 3+

Paso 1: Registrar su aplicación

 Sugerencia

Los pasos de este artículo pueden variar ligeramente en función del portal desde
donde comienza.

Siga estos pasos para registrar la aplicación en el centro de administración de Microsoft


Entra:

1. Inicie sesión en el Centro de administración de Microsoft Entra como


Administrador de aplicaciones en la nube.
2. Si tiene acceso a varios inquilinos, use el icono Configuración del menú
superior para cambiar al inquilino en el que desea registrar la aplicación desde el
menú Directorios y suscripciones.
3. Vaya a Identidad>Aplicaciones>Registros de aplicaciones y seleccione Nuevo
registro.
4. Escriba el nombre de la aplicación, por ejemplo, python-webapp.
5. En Tipos de cuenta admitidos, seleccione Solo las cuentas de este directorio
organizativo.
6. En URI de redirección, seleccione Web para la plataforma.
7. Escriba un URI de redirección de [Link] . Puedes
cambiar este valor más adelante.
8. Seleccione Registrar.

Paso 2: Agregar un secreto de cliente


La aplicación de ejemplo usa un secreto de cliente para demostrar su identidad cuando
solicita tokens. Siga estos pasos para crear un secreto de cliente para la aplicación web
de Python:

1. En la página de información general de la aplicación, anote el valor del


Identificador de aplicación (cliente) para su uso posterior.
2. En Administrar, seleccione Certificados y secretos, y en la sección Secretos de
cliente, elija Nuevo secreto de cliente.
3. Escriba una descripción para el secreto de cliente, deje el valor de expiración
predeterminado y seleccione Agregar.
4. Guarde el valor del secreto de cliente en una ubicación segura. Necesitará este
valor para configurar el código y no podrá recuperarlo más adelante.

Al crear credenciales para una aplicación cliente confidencial, Microsoft recomienda usar
un certificado en lugar de un secreto de cliente antes de mover la aplicación a un
entorno de producción. Para más información sobre cómo usar un certificado, consulte
estas instrucciones.

Paso 3: Agregar un ámbito


Dado que esta aplicación inicia la sesión de los usuarios, es necesario agregar permisos
delegados:

1. En Administrar, seleccione Permisos de API>Add a permission (Agregar un


permiso).
2. Asegúrese de que la pestaña API de Microsoft esté seleccionada.
3. En la sección API de Microsoft más usadas, seleccione Microsoft Graph.
4. En la sección Permisos delegados, asegúrese de que [Link] esté seleccionado.
Si es necesario, utilice el cuadro de búsqueda.
5. Seleccione Agregar permisos.
Paso 4: Descargar la aplicación de ejemplo
Descargue el ejemplo de código de Python o clone el repositorio:

Console

git clone [Link]

Paso 5: Configuración de la aplicación de


ejemplo
1. Abra la aplicación que descargó en un IDE y vaya a la carpeta raíz de la aplicación
de ejemplo.

Console

cd flask-web-app

2. Cree un archivo .env en la carpeta raíz del proyecto usando .[Link] como guía.

Python

# The following variables are required for the app to run.


CLIENT_ID=<Enter_your_client_id>
CLIENT_SECRET=<Enter_your_client_secret>
AUTHORITY=<Enter_your_authority_url>

Establezca el valor de CLIENT_ID en el identificador de aplicación (cliente) de


la aplicación registrada, disponible en la página de información general.
Establezca el valor de CLIENT_SECRET en el secreto de cliente que ha creado
en Certificados y secretos para la aplicación registrada.
Establezca el valor de AUTHORITY en un
[Link] . El id. de directorio

(inquilino) está disponible en la página de información general del registro


de la aplicación.

Se hace referencia a las variables de entorno en app_config.py y se mantienen en


un archivo .env independiente para mantenerlos fuera del control de código
fuente. El archivo .gitignore proporcionado impide que el archivo .env se proteja.

Paso 6: Ejecución de la aplicación de ejemplo


1. Cree un entorno virtual para la aplicación:

Windows

Cmd

py -m venv .venv
.venv\scripts\activate

2. Instale los requisitos mediante pip :

Console

pip install -r [Link]

3. Ejecute la aplicación desde la línea de comandos. Asegúrese de que la aplicación


se ejecuta en el mismo puerto que el identificador URI de redireccionamiento que
ha configurado anteriormente.

Console

flask run --debug --host=localhost --port=5000

4. Copie la URL https que aparece en el terminal, por ejemplo, [Link]


y péguela en un navegador. Recomendamos utilizar una sesión de navegador
privada o de incógnito.

5. Siga los pasos e introduzca los datos necesarios para iniciar sesión con su cuenta
Microsoft. Se le pedirá que proporcione una dirección de correo electrónico y una
contraseña para iniciar sesión.

6. La aplicación solicita permiso para mantener el acceso a los datos a los que le ha
concedido acceso y para iniciar sesión y leer el perfil, como se muestra. Seleccione
Aceptar.
1. Aparece la captura de pantalla siguiente, que indica que ha iniciado sesión
correctamente en la aplicación.

Funcionamiento
En el diagrama siguiente se muestra cómo funciona la aplicación de ejemplo:
1. La aplicación usa el identity paquete para obtener un token de acceso de la
plataforma de identidad de Microsoft. Este paquete se basa en la biblioteca de
autenticación de Microsoft (MSAL) para Python para simplificar la autenticación y
la autorización en las aplicaciones web.

2. El token de acceso que obtiene en el paso anterior se usa como token de portador
para autenticar al usuario al llamar a Microsoft Graph API.

Pasos siguientes
Para más información, cree una aplicación web de Python que inicie sesión de usuarios y
llame a una API web protegida en la siguiente serie de tutoriales de varias partes:

Tutorial: Aplicación web que inicia la sesión de los usuarios

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto


Inicio rápido: Biblioteca cliente de
secretos de Azure Key Vault para Python
Artículo • 05/10/2024

Introducción a la biblioteca cliente de secretos de Azure Key Vault para Python. Siga
estos pasos para instalar el paquete y probar el código de ejemplo para realizar tareas
básicas. Si usa Key Vault para almacenar secretos, no tendrá que almacenarlos en el
código, lo que aumenta la seguridad de las aplicaciones.

Documentación de referencia de API | Código fuente de la biblioteca | Paquete (índice


de paquetes de Python)

Prerrequisitos
Una suscripción a Azure: cree una cuenta gratuita .
Python 3.7+.
La CLI de Azure o Azure PowerShell.

En este inicio rápido se supone que está ejecutando la CLI de Azure o Azure PowerShell
en una ventana de terminal de Linux.

Configuración de un entorno local


En este inicio rápido se usa la biblioteca de identidades de Azure con la CLI de Azure o
Azure PowerShell para autenticar el usuario en los servicios de Azure. Los
desarrolladores también pueden usar Visual Studio o Visual Studio Code para autenticar
sus llamadas. Para más información, consulte Autenticación del cliente mediante la
biblioteca cliente Azure Identity.

Inicio de sesión en Azure

CLI de Azure

1. Ejecute el comando az login .

Azure CLI

az login
Si la CLI puede abrir el explorador predeterminado, lo hará y cargará una
página de inicio de sesión de Azure.

En caso contrario, abra una página del explorador en


[Link] y escriba el código de autorización que se
muestra en el terminal.

2. Inicie sesión con las credenciales de su cuenta en el explorador.

Instalación de los paquetes


1. En un símbolo del sistema o en un terminal, cree una carpeta de proyecto
adecuada y, después, cree y active un entorno virtual de Python, como se describe
en el apartado Uso de entornos virtuales de Python.

2. Instale la biblioteca de identidades de Microsoft Entra:

terminal

pip install azure-identity

3. Instale la biblioteca de secretos de Key Vault:

terminal

pip install azure-keyvault-secrets

Creación de un grupo de recursos y de un almacén de


claves

CLI de Azure

1. Uso del comando az group create para crear un grupo de recursos:

Azure CLI

az group create --name myResourceGroup --location eastus

Si lo prefiere, puede cambiar "eastus" a una ubicación más próxima.


2. Use az keyvault create para crear el almacén de claves:

Azure CLI

az keyvault create --name <your-unique-keyvault-name> --resource-


group myResourceGroup

Reemplace <your-unique-keyvault-name> por un nombre que sea único en


todo Azure. Normalmente, se usa el nombre personal o de la empresa, junto
con otros números e identificadores.

Establecimiento de la variable de entorno


KEY_VAULT_NAME
Nuestro script usará el valor asignado a la variable de entorno KEY_VAULT_NAME como el
nombre del almacén de claves. Por lo tanto, debe establecer este valor mediante el
comando siguiente:

Consola

export KEY_VAULT_NAME=<your-unique-keyvault-name>

Concesión de acceso al almacén de claves


Para obtener permisos para el almacén de claves mediante Control de acceso basado en
roles (RBAC), asigne un rol a su "Nombre principal de usuario" (UPN) mediante el
comando de la CLI de Azure az role assignment create.

Azure CLI

az role assignment create --role "Key Vault Secrets Officer" --assignee "
<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-
group-name>/providers/[Link]/vaults/<your-unique-keyvault-name>"

Reemplace <upn>, <subscription-id>, <resource-group-name> y <your-unique-


keyvault-name> por los valores reales. El UPN normalmente tendrá el formato de una
dirección de correo electrónico (por ejemplo, username@[Link]).

Creación del código de ejemplo


La biblioteca cliente de secretos de Azure Key Vault para Python permite administrar los
secretos. El siguiente código de ejemplo muestra cómo crear un cliente y cómo
establecer, recuperar y eliminar un secreto.

Cree un archivo llamado kv_secrets.py que contenga este código.

Python

import os
from [Link] import SecretClient
from [Link] import DefaultAzureCredential

keyVaultName = [Link]["KEY_VAULT_NAME"]
KVUri = f"[Link]

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

secretName = input("Input a name for your secret > ")


secretValue = input("Input a value for your secret > ")

print(f"Creating a secret in {keyVaultName} called '{secretName}' with the


value '{secretValue}' ...")

client.set_secret(secretName, secretValue)

print(" done.")

print(f"Retrieving your secret from {keyVaultName}.")

retrieved_secret = client.get_secret(secretName)

print(f"Your secret is '{retrieved_secret.value}'.")


print(f"Deleting your secret from {keyVaultName} ...")

poller = client.begin_delete_secret(secretName)
deleted_secret = [Link]()

print(" done.")

Ejecución del código


Asegúrese de que el código de la sección anterior se encuentra en un archivo llamado
kv_secrets.py. Luego, ejecute el código con el siguiente comando:

terminal

python kv_secrets.py
Si se producen errores de permisos, asegúrese de que ha ejecutado el comando az
keyvault set-policy o Set-AzKeyVaultAccessPolicy.
Al volver a ejecutar el código con el mismo nombre de secreto, puede aparecer el
error "(Conflict) Secret <name> is currently in a deleted but recoverable state". Use
otro nombre de secreto.

Detalles del código

Autenticación y creación de un cliente


Deben autorizarse las solicitudes de aplicación a la mayor parte de servicios de Azure. El
uso de la clase DefaultAzureCredential que proporciona la biblioteca cliente de Azure
Identity es el enfoque recomendado para implementar conexiones sin contraseña a los
servicios de Azure en el código. DefaultAzureCredential admite varios métodos de
autenticación y determina el que se debe usar en tiempo de ejecución. Este enfoque
permite que la aplicación use diferentes métodos de autenticación en distintos entornos
(local frente a producción) sin implementar código específico del entorno.

En este inicio rápido, DefaultAzureCredential se autentica en el almacén de claves


mediante las credenciales del usuario de desarrollo local que inició sesión en la CLI de
Azure. Cuando la aplicación se implementa en Azure, el mismo código
DefaultAzureCredential puede detectar y usar automáticamente una identidad

administrada asignada a una instancia de App Service, máquina virtual u otros servicios.
Para más información, consulte Introducción a la identidad administrada.

En el ejemplo siguiente, el nombre del almacén de claves se expande usando el valor de


la variable KVUri , con el formato "[Link]
claves>.[Link]".

Python

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

Almacenamiento de un secreto
Una vez que haya obtenido el objeto de cliente para el almacén de claves, puede
almacenar un secreto mediante el método set_secret:

Python
client.set_secret(secretName, secretValue)

La llamada a set_secret genera una llamada a la API REST de Azure para el almacén de
claves.

Cuando Azure administra la solicitud, autentica la identidad del autor de la llamada (la
entidad de servicio) mediante el objeto de credencial que proporcionó al cliente.

Recuperación de un secreto
Para leer un secreto de Key Vault, use el método get_secret:

Python

retrieved_secret = client.get_secret(secretName)

El valor de secreto se incluye en retrieved_secret.value .

Los secretos también se pueden recuperar con el comando az keyvault secret show de
la CLI de Azure o con el cmdlet Get-AzKeyVaultSecret de Azure PowerShell.

Eliminación de un secreto
Para eliminar un secreto, use el método begin_delete_secret:

Python

poller = client.begin_delete_secret(secretName)
deleted_secret = [Link]()

El método begin_delete_secret es asincrónico y devuelve un objeto de sondeador. La


llamada al método result del sondeador espera hasta su finalización.

Puede comprobar que se ha eliminado el secreto con el comando az keyvault secret


show de la CLI de Azure o con el cmdlet Get-AzKeyVaultSecret de Azure PowerShell.

Aun después de haberse eliminado, los secretos permanecen en estado eliminado, pero
recuperable, durante un tiempo. Si vuelve a ejecutar el código, use otro nombre de
secreto.

Limpieza de recursos
Si también desea experimentar con certificados y claves, puede volver a usar la instancia
de Key Vault que se ha creado en este artículo.

De lo contrario, cuando haya terminado con los recursos creados en este artículo, utilice
el siguiente comando para eliminar el grupo de recursos y todos los recursos que
contiene:

CLI de Azure

Azure CLI

az group delete --resource-group myResourceGroup

Pasos siguientes
Información general de Azure Key Vault
Guía del desarrollador de Azure Key Vault
Introducción a la seguridad de Key Vault
Autenticación con Key Vault

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Inicio rápido: Creación de una función
en Azure con Python mediante
Visual Studio Code
Artículo • 10/09/2024

En este artículo se usa Visual Studio Code para crear una función de Python que
responda a solicitudes HTTP. Después de probar el código localmente, se implementa
en el entorno sin servidor de Azure Functions.

En este artículo, se usa el modelo de programación de Python v2 para Azure Functions,


que proporciona un enfoque basado en decorador para crear funciones. Para obtener
más información sobre el modelo de programación de Python v2, consulte la Guía de
referencia para desarrolladores

Este inicio rápido supone un pequeño costo en su cuenta de Azure.

También hay una versión basada en la CLI de este artículo.

En este vídeo se muestra cómo crear una función de Python en Azure mediante Visual
Studio Code.
[Link]
da2b915c8fc2&locale=es-es&embedUrl=%2Fazure%2Fazure-functions%2Fcreate-first-
function-vs-code-python

Los pasos del vídeo también se describen en las secciones siguientes.

Configurar su entorno
Antes de comenzar, asegúrese de que cumple con los siguientes requisitos:

Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita .

Una versión de Python compatible con Azure Functions. Para obtener más
información, vea Instalación de Python .

Visual Studio Code en una de las plataformas admitidas .

La extensión de Python para Visual Studio Code

La extensión de Azure Functions para Visual Studio Code, versión 1.8.1 u otra
más reciente.
Emulador de almacenamiento local de laextensión Azurite V3 . Aunque también
puede usar una cuenta de Almacenamiento de Azure real, en este artículo se
supone que usa el emulador de Azurite.

Instalación o actualización de Core Tools


La extensión Azure Functions para Visual Studio Code se integra con Azure Functions
Core Tools para que pueda ejecutar y depurar las funciones localmente en Visual Studio
Code mediante el entorno de ejecución de Azure Functions. Antes de empezar, es
recomendable instalar Core Tools localmente o actualizar una instalación existente para
usar la versión más reciente.

En Visual Studio Code, seleccione F1 para abrir la paleta de comandos y, a continuación,


busque y ejecute el comando Azure Functions: Instalar o actualizar Core Tools.

Este comando intenta iniciar una instalación basada en paquetes de la versión más
reciente de Core Tools o bien actualizar una instalación basada en paquetes existente. Si
no tiene npm o Homebrew instalado en el equipo local, en su lugar debe instalar o
actualizar manualmente Core Tools.

Creación del proyecto local


En esta sección se usa Visual Studio Code para crear un proyecto local de Azure
Functions en Python. Más adelante en este artículo, publicará el código de función en
Azure.

1. En Visual Studio Code, presione F1 para abrir la paleta de comandos y busque y


ejecute el comando Azure Functions: Create New Project... .

2. Elija una ubicación de directorio para el área de trabajo del proyecto y, después,
seleccione el botón Seleccionar. Debe crear una nueva carpeta o elegir una
carpeta vacía en la que ubicar el área de trabajo del proyecto. No elija una carpeta
de proyecto que ya forme parte de un área de trabajo.

3. Escriba la siguiente información cuando se le indique:

ノ Expandir tabla

Prompt Número de selección

Selección de un idioma Elija Python (Programming Model V2) .


Prompt Número de selección

Seleccionar el intérprete de Elija el intérprete de Python que prefiera usar. Si no se


Python para crear un muestra una opción, escriba la ruta de acceso completa al
entorno virtual archivo binario de Python.

Seleccionar una plantilla Elija HTTP trigger .


para la primera función de
su proyecto

Nombre de la función que Escriba HttpExample .


desea crear

Nivel de autorización Elija el valor ANONYMOUS , que permitirá que cualquier cliente
llame al punto de conexión de la función. Para obtener más
información, consulte Nivel de autorización.

Seleccionar cómo desea que Elija Open in current window .


se abra el proyecto

4. Visual Studio Code generará un proyecto de Azure Functions con un


desencadenador HTTP a partir de la información que se proporciona. Los archivos
del proyecto locales se pueden ver en Explorer. El archivo del proyecto
function_app.py generado contiene las funciones.

5. En el archivo [Link], actualice la configuración AzureWebJobsStorage


como en el ejemplo siguiente:

JSON

"AzureWebJobsStorage": "UseDevelopmentStorage=true",

Esto indica al host de Functions local que use el emulador de almacenamiento


para la conexión de almacenamiento que requiere el modelo Python v2. Al
publicar el proyecto en Azure, esta configuración usa la cuenta de almacenamiento
predeterminada en su lugar. Si usa una cuenta de Azure Storage durante el
desarrollo local, establezca la cadena de conexión de la cuenta de almacenamiento
aquí.

Inicio del emulador


1. En Visual Studio Code, presione F1 para abrir la paleta de comandos. En la paleta
de comandos, busque y seleccione Azurite: Start .
2. Compruebe la barra inferior y compruebe que los servicios de emulación de
Azurite se están ejecutando. Si es así, ahora puede ejecutar la función localmente.

Ejecución local de la función


Visual Studio Code se integra con Azure Functions Core Tools para que pueda ejecutar
este proyecto en un equipo de desarrollo local antes de publicarlo en Azure.

1. Para iniciar la función localmente, presione F5 o el icono Ejecutar y depurar en la


barra de actividad del lado izquierdo. En el panel Terminal se mostrará la salida de
Core Tools. La aplicación se inicia en el panel Terminal. Puede ver el punto de
conexión de la dirección URL de la función desencadenada por HTTP que se
ejecuta localmente.

Si tiene problemas para ejecutarlo en Windows, asegúrese de que el terminal


predeterminado de Visual Studio Code no esté establecido en WSL Bash.

2. Mientras Core Tools todavía se ejecuta en el Terminal, elija el icono de Azure en la


barra de actividades. En el Área de trabajo, expanda el desplegable Proyecto
local>Funciones. Haga clic con el botón derecho (Windows) o Ctrl - clic (macOS)
en la nueva función y seleccione Ejecutar función ahora....
3. En Enter request body (Especificar el cuerpo de la solicitud) verá el valor del
cuerpo del mensaje de solicitud de { "name": "Azure" } . Presione Entrar para
enviar este mensaje de solicitud a la función.

4. Cuando la función se ejecuta localmente y devuelve una respuesta, se genera una


notificación en Visual Studio Code. La información sobre la ejecución de la función
se muestra en el panel Terminal.

5. Con el panel Terminal enfocado, presione Ctrl + C para detener Core Tools y
desconectar el depurador.

Después de comprobar que la función se ejecuta correctamente en su computadora


local, es el momento de utilizar Visual Studio Code para publicar el proyecto
directamente en Azure.

Inicio de sesión en Azure


Para poder crear recursos de Azure o publicar la aplicación, debe iniciar sesión en Azure.

1. Si aún no ha iniciado sesión, en la barra de actividad, seleccione el icono de Azure.


A continuación, en Recursos, seleccione Iniciar sesión en Azure.
Si ya ha iniciado sesión y puede ver las suscripciones existentes, vaya a la siguiente
sección. Si aún no tiene una cuenta de Azure, seleccione Crear una cuenta de
Azure. Los alumnos pueden seleccionar Crear una cuenta de Azure for Students.

2. Cuando se le solicite en el explorador, seleccione su cuenta de Azure e inicie sesión


con las credenciales de la cuenta de Azure. Si opta por crear una cuenta, podrá
iniciar sesión una vez que haya completado el proceso de creación.

3. Después de iniciar sesión correctamente, puede cerrar la nueva ventana del


explorador. Las suscripciones que pertenecen a su cuenta de Azure se muestran en
la barra lateral.

Cree la aplicación de funciones en Azure


Durante el transcurso de esta sección, podrá crear una aplicación de funciones y los
recursos relacionados con esta en la suscripción de Azure. Muchas de las decisiones de
creación de recursos se toman en función de los comportamientos predeterminados.
Para obtener más control sobre los recursos creados, en su lugar debe crear la
aplicación de funciones con opciones avanzadas.

1. En Visual Studio Code, seleccione F1 para abrir la paleta de comandos. En el


símbolo del sistema ( > ), escriba y seleccione Azure Functions: Crear aplicación de
funciones en Azure.

2. Escriba la siguiente información cuando se le indique:

ノ Expandir tabla

Prompt Action

Seleccionar suscripción Seleccione la suscripción de Azure que se va a usar. El


símbolo del sistema no aparece cuando solo tiene una
Prompt Action

suscripción visible en Recursos.

Escribir un nombre único Escriba un nombre válido en una ruta de acceso de


global para la aplicación de dirección URL. El nombre que escriba se valida para
funciones asegurarse de que es único en Azure Functions.

Seleccione una pila en Seleccione la versión de idioma que se ejecuta actualmente


tiempo de ejecución localmente.

Seleccionar una ubicación Seleccionar una región de Azure. Para mejorar el


para los nuevos recursos rendimiento, seleccione una región cerca de usted.

En el panel Azure: Registro de actividad, la extensión de Azure muestra el estado


de los recursos individuales a medida que se crean en Azure.

3. Cuando se crea la aplicación de funciones, se crean los siguientes recursos


relacionados en la suscripción de Azure. Los recursos se denominan en función del
nombre especificado para la aplicación de funciones.

Un grupo de recursos, que es un contenedor lógico de recursos relacionados.


Una cuenta de Azure Storage estándar, que mantiene información de estado
y de otro tipo sobre los proyectos.
Una aplicación de funciones, que proporciona el entorno para ejecutar el
código de función. Una aplicación de funciones permite agrupar funciones
como una unidad lógica para facilitar la administración, la implementación y
el uso compartido de recursos en el mismo plan de hospedaje.
Un plan de Azure App Service, que define el host subyacente para la
aplicación de funciones.
Una instancia de Application Insights conectada a la aplicación de funciones y
que realiza un seguimiento del uso de las funciones en la aplicación.

Una vez que se haya creado la aplicación de función se mostrará una notificación y
se aplicará el paquete de implementación.

 Sugerencia

De forma predeterminada, los recursos de Azure necesarios para la aplicación


de funciones se crean según el nombre que escriba para la aplicación de
funciones. De manera predeterminada, los recursos se crean con la aplicación
de funciones en el mismo grupo de recursos nuevo. Si desea personalizar los
nombres de los recursos asociados o reutilizar los recursos existentes,
publique el proyecto con opciones de creación avanzadas.

Implementar el proyecto en Azure

) Importante

Los procesos de implementación en aplicaciones de funciones existentes siempre


sobrescriben el contenido de esas aplicaciones en Azure.

1. En la paleta de comandos, escriba y seleccione Azure Functions: implementar la


aplicación de funciones.

2. Seleccione la aplicación de funciones que acaba de crear. Cuando se le solicite


sobrescribir las implementaciones anteriores, seleccione Implementar para
implementar el código de función en el nuevo recurso de aplicación de funciones.

3. Cuando se complete la implementación, seleccione Ver la salida para ver los


resultados de creación e implementación, incluidos los recursos de Azure que creó.
Si se pierde la notificación, seleccione el icono de campana en la esquina inferior
derecha para verlo de nuevo.

Ejecución de la función en Azure


1. Presione F1 para mostrar la paleta de comandos y, a continuación, busque y
ejecute el comando Azure Functions:Execute Function Now... . Si se le solicita,
seleccione la suscripción.

2. Seleccione el nuevo recurso de la aplicación de funciones y HttpExample como


función.
3. En Escriba el cuerpo de la solicitud escriba { "name": "Azure" } , y presione Entrar
para enviar este mensaje de solicitud a la función.

4. Cuando la función se ejecuta en Azure, la respuesta se muestra en el área de


notificación. Expanda la notificación para revisar la respuesta completa.

Limpieza de recursos
Si va al paso siguiente y agrega un enlace de cola de Azure Storage a una función,
tendrá que conservar todos los recursos intactos para basarse en lo que ya ha hecho.

De lo contrario, puede usar los pasos siguientes para eliminar la aplicación de funciones
y sus recursos relacionados para evitar incurrir en costos adicionales.

1. En Visual Studio Code, presione F1 para abrir la paleta de comandos. En la paleta


de comandos, busque y seleccione Azure: Open in portal .

2. Elija una aplicación de funciones y presione la tecla ENTRAR . La página de la


aplicación de funciones se abre en Azure Portal.

3. En la pestaña Información general, seleccione el vínculo con nombre junto a


Grupo de recursos.

4. En la página Grupo de recursos, revise la lista de recursos incluidos y compruebe


que estos sean los que desea eliminar.

5. Seleccione Eliminar grupo de recursos y siga las instrucciones.

El proceso de eliminación tardará un par de minutos. Cuando termine, aparece una


notificación durante unos segundos. También puede seleccionar el icono de
campana en la parte superior de la página para ver la notificación.
Para más información sobre los costos de Functions, consulte Estimación de los costos
según el plan de consumo.

Pasos siguientes
Ha creado y desplegado una aplicación de funciones con una función sencilla activada
por HTTP. En los próximos artículos, ampliará esa función conectándose a un servicio de
almacenamiento en Azure. Para más información sobre cómo conectarse a otros
servicios de Azure, consulte Incorporación de enlaces a una función existente de Azure
Functions.

Conexión a Azure Cosmos DB

Conexión a una cola de Azure Storage

¿Tiene problemas? Cuéntenoslo.

) Nota: El autor ha creado este artículo con ayuda de inteligencia artificial. Más información

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Inicio rápido: Creación de una función
de Python en Azure desde la línea de
comandos
Artículo • 10/03/2024

En este artículo se usan herramientas de línea de comandos para crear una función de
Python que responda a solicitudes HTTP. Después de probar el código localmente, se
implementa en el entorno sin servidor de Azure Functions.

En este artículo se usa el modelo de programación de Python v2 para Azure Functions,


que proporciona un enfoque basado en decorador para crear funciones. Para más
información sobre el modelo de programación de Python v2, vea la Guía de referencia
para desarrolladores

Este inicio rápido supone un pequeño costo en su cuenta de Azure.

También está disponible una de versión este artículo basada en Visual Studio Code.

Configuración del entorno local


Antes de comenzar, deberá asegurarse de que cumple con los siguientes requisitos:

Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita .

Una de las siguientes herramientas para crear recursos de Azure:

CLI de Azure, versión 2.4 o posterior.

El módulo Az de PowerShell, versión 5.9.0 o posterior.

Una versión de Python compatible con Azure Functions.

El emulador de almacenamiento Azurite. Aunque también puede usar una cuenta


real de Azure Storage, en el artículo se supone que usa este emulador.

Instalación de Azure Functions Core Tools


La manera recomendada de instalar Core Tools depende del sistema operativo del
equipo de desarrollo local.
Windows

En los pasos siguientes se utiliza Windows Installer (MSI) para instalar Core Tools
v4.x. Para más información sobre otros instaladores basados en paquetes, consulte
el archivo Léame de Core Tools .

Descargue y ejecute el instalador de Core Tools según su versión de Windows:

v4.x: Windows 64 bits (recomendado. La depuración de Visual Studio Code


requiere 64 bits).
v4.x: Windows de 32 bits

Si ha usado previamente Windows Installer (MSI) para instalar Core Tools en


Windows, debe desinstalar la versión anterior desde Agregar/Quitar programas
antes de instalar la versión más reciente.

Use el comando func --version para asegurarse de que la versión de Core Tools sea al
menos 4.0.5530 .

Creación y activación de un entorno virtual


En una carpeta adecuada, ejecute los comandos siguientes para crear y activar un
entorno virtual denominado .venv . Asegúrese de que está utilizando una versión de
Python compatible con Azure Functions.

bash

Bash

python -m venv .venv

Bash

source .venv/bin/activate

Si Python no instaló el paquete venv en la distribución de Linux, ejecute el siguiente


comando:

Bash
sudo apt-get install python3-venv

Ejecute todos los comandos siguientes en este entorno virtual activado.

Creación de una función local


En Azure Functions, un proyecto de función es un contenedor para una o varias
funciones individuales que responden a un desencadenador específico. Todas las
funciones de un proyecto comparten las mismas configuraciones locales y de
hospedaje.

En esta sección, creará un proyecto de función y agregará una función desencadenada


por HTTP.

1. Ejecute el comando func init de la manera siguiente para crear un proyecto de


funciones de Python v2 en el entorno virtual.

Consola

func init --python

El entorno contiene ahora varios archivos para el proyecto, incluidos los archivos
de configuración denominados [Link] y [Link]. Como
[Link] puede contener secretos descargados de Azure, el archivo se
excluye del control de código fuente de forma predeterminada en el archivo
.gitignore.

2. Agregue una función al proyecto mediante el comando siguiente, donde el


argumento --name es el nombre único de la función (HttpExample) y el argumento
--template especifica el desencadenador de esta (HTTP).

Consola

func new --name HttpExample --template "HTTP trigger" --authlevel


"anonymous"

Si se le solicita, elija la opción ANONYMOUS. func new agrega un punto de


conexión de desencadenador HTTP denominado HttpExample al archivo
function_app.py , al que se puede acceder sin autenticación.
Ejecución local de la función
1. Para ejecutar la función, inicie el host en tiempo de ejecución local de
Azure Functions desde la carpeta LocalFunctionProj.

Consola

func start

En la parte final de la salida, deberán aparecer las líneas siguientes:

7 Nota

Si HttpExample no aparece como se ha mostrado arriba, es probable que


haya iniciado el host desde fuera de la carpeta raíz del proyecto. En ese caso,
use Ctrl+C para detener el host, vaya a la carpeta raíz del proyecto y vuelva a
ejecutar el comando anterior.

2. Copie la URL de su función HTTP de esta salida a un navegador y agregue la


cadena de consulta ?name=<YOUR_NAME> , lo que hace que la URL completa sea como
[Link] . El explorador debe

mostrar un mensaje de respuesta que devuelve el valor de la cadena de consulta.


El terminal en el que inició el proyecto también muestra la salida del registro
cuando realiza solicitudes.

3. Cuando termine, presione Ctrl + C y escriba y para detener el host de


Azure Functions.

Creación de recursos auxiliares de Azure para la


función
Antes de poder implementar el código de la función en Azure, debe crear tres recursos:
Un grupo de recursos, que es un contenedor lógico de recursos relacionados.
Una cuenta de almacenamiento que mantenga la información acerca del estado,
entre otros parámetros, de los proyectos.
Una aplicación de funciones, que proporciona el entorno para ejecutar el código
de función. Una aplicación de funciones se asigna al proyecto de funciones y le
permite agrupar funciones como una unidad lógica para facilitar la administración,
la implementación y el uso compartido de recursos.

Utilice los comandos siguientes para crear los elementos. Se admiten las CLI de Azure y
de PowerShell.

1. Si es necesario, inicie sesión en Azure.

CLI de Azure

Azure CLI

az login

El comando az login inicia sesión en su cuenta de Azure.

2. Cree un grupo de recursos, denominado AzureFunctionsQuickstart-rg , en la


región que haya elegido.

CLI de Azure

Azure CLI

az group create --name AzureFunctionsQuickstart-rg --location


<REGION>

El comando az group create crea un grupo de recursos. En el comando


anterior, reemplace <REGION> por una región cercana mediante un código de
región disponible devuelto por el comando az account list-locations.

7 Nota

No se pueden hospedar aplicaciones de Windows y Linux en el mismo grupo


de recursos. Si tiene un grupo de recursos existente llamado
AzureFunctionsQuickstart-rg con una aplicación web o aplicación de función

de Windows, debe usar un grupo de recursos diferente.

3. Cree una cuenta de almacenamiento de uso general en el grupo de recursos y la


región.

CLI de Azure

Azure CLI

az storage account create --name <STORAGE_NAME> --location <REGION>


--resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS

El comando az storage account create crea la cuenta de almacenamiento.

En el ejemplo anterior, reemplace el valor <STORAGE_NAME> por el nombre que


considere, que deberá ser único en Azure Storage. Los nombres deben contener
entre 3 y 24 caracteres y solo letras minúsculas. El valor Standard_LRS especifica
que se trata de una cuenta de uso general y que Functions admite su uso.

Este inicio rápido solo le supondrá unos pequeños gastos a la cuenta de


almacenamiento.

4. Cree la aplicación de funciones en Azure.

CLI de Azure

Azure CLI

az functionapp create --resource-group AzureFunctionsQuickstart-rg


--consumption-plan-location westeurope --runtime python --runtime-
version <PYTHON_VERSION> --functions-version 4 --name <APP_NAME> --
os-type linux --storage-account <STORAGE_NAME>

El comando az functionapp create crea la aplicación de funciones en Azure.


Debe proporcionar --os-type linux porque las funciones de Python solo se
ejecutan en Linux.

En el ejemplo anterior, reemplace <APP_NAME> por un nombre único global que sea
adecuado. <APP_NAME> también es el subdominio predeterminado de la aplicación
de funciones. Asegúrese de que el valor establecido para <PYTHON_VERSION> es una
versión compatible con Functions y es la misma versión que usó durante el
desarrollo local.

Este comando crea una aplicación de funciones que se ejecuta en el entorno de


ejecución del lenguaje especificado en el plan de consumo de Azure Functions,
que es gratuito para la cantidad de uso que se realiza aquí. El comando también
crea una instancia asociada de Application Insights de Azure en el mismo grupo de
recursos con la que puede supervisar la aplicación de funciones y ver registros.
Para más información, consulte Supervisión de Azure Functions. La instancia no
incurrirá en ningún costo hasta que se active.

Implementación del proyecto de función en


Azure
Después de haber creado correctamente su aplicación de funciones en Azure, estará
listo para implementar el proyecto de funciones local mediante el comando func azure
functionapp publish.

En el ejemplo siguiente, reemplace <APP_NAME> por el nombre de su aplicación.

Consola

func azure functionapp publish <APP_NAME>

El comando de publicación muestra un resultado similar a lo que se muestra a


continuación (se ha truncado para que resulte más simple):

...

Getting site publishing info...


Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
HttpExample - [httpTrigger]
Invoke url: [Link]
[Link]/api/httpexample
Invocación de la función en Azure
Como la función usa un desencadenador HTTP, para invocarla es preciso realizar una
solicitud HTTP a su dirección URL en el explorador o con una herramienta como CURL.

Browser

Copie el valor completo de Invoke URL completa que se muestra en la salida del
comando publish en una barra de direcciones del explorador y anexe el parámetro
de consulta ?name=Functions . El explorador debe mostrar una salida similar a
cuando ejecutó la función localmente.

Limpieza de recursos
Si continúa con el paso siguiente y agrega un enlace de salida de la cola de Azure
Storage, conserve todos los recursos intactos, ya que va a crear a partir de lo que ya ha
hecho.

De lo contrario, use el siguiente comando para eliminar el grupo de recursos y todos los
recursos que contiene para evitar incurrir en costos adicionales.

CLI de Azure

Azure CLI

az group delete --name AzureFunctionsQuickstart-rg

Pasos siguientes
Conexión a Azure Cosmos DB

Conexión a una cola de Azure Storage

¿Tiene problemas con este artículo?

Solución de problemas de aplicaciones de funciones de Python en Azure Functions


Póngase en contacto con nosotros
Conexión de Azure Functions a Azure
Storage mediante Visual Studio Code
Artículo • 25/04/2024

Azure Functions le permite conectar servicios de Azure y otros recursos a funciones sin
tener que escribir su propio código de integración. Estos enlaces, que representan la
entrada y la salida, se declaran dentro de la definición de función. Los datos de los
enlaces se proporcionan a la función como parámetros. Un desencadenador es un tipo
especial de enlace de entrada. Si bien una función tiene un único desencadenador,
puede tener varios enlaces de entrada y salida. Para más información, consulte
Conceptos básicos sobre los enlaces y desencadenadores de Azure Functions.

En este artículo se muestra cómo usar Visual Studio Code para conectar el servicio
Azure Storage a la función que creó al completar el anterior artículo de inicio rápido. El
enlace de salida que se agrega a esta función escribe datos de la solicitud HTTP en un
mensaje de la cola de Azure Queue Storage.

La mayoría de los enlaces requieren una cadena de conexión almacenada que se usa en
Functions para acceder al servicio enlazado. Para que el proceso sea más fácil, usará la
cuenta de almacenamiento que creó junto con la aplicación de funciones. La conexión a
esta cuenta ya está almacenada en una configuración de aplicación llamada
AzureWebJobsStorage .

Configuración del entorno local


Antes de comenzar, deberá cumplir los siguientes requisitos:

Instale la extensión de Azure Storage para Visual Studio Code .

Instale el Explorador de Azure Storage . El Explorador de Storage es una


herramienta que utilizará para examinar los mensajes en cola que genere el enlace
de salida. El Explorador de Storage se admite en sistemas operativos basados en
Linux, Windows y macOS.

Complete los pasos de la parte 1 del inicio rápido de Visual Studio Code.

En este artículo se da por supuesto que ya inició sesión en la suscripción de Azure desde
Visual Studio Code. Puede iniciar sesión mediante la ejecución de Azure: Sign In desde
la paleta de comandos.
Descarga de la configuración de la aplicación
de función
En el artículo de inicio rápido anterior creó una aplicación de funciones en Azure junto
con la cuenta de almacenamiento que se requería para ello. La cadena de conexión de
esta cuenta se almacena de forma segura en la configuración de la aplicación en Azure.
En este artículo, escribirá mensajes en una cola de almacenamiento de la misma cuenta.
Si la función se ejecuta localmente, deberá descargar la configuración de la aplicación al
archivo [Link] para conectarse a la cuenta de almacenamiento.

1. Presione F1 para abrir la paleta de comandos y busque y ejecute el comando


Azure Functions: Download Remote Settings... .

2. Elija la aplicación de funciones que creó en el artículo anterior. Seleccione Sí a


todo para sobrescribir la configuración local existente.

) Importante

El archivo [Link] contiene secretos, así que este nunca se publica y,


además, se excluye de las características de control de código fuente.

3. Copie el valor AzureWebJobsStorage , que constituye la clave del valor de la cadena


de conexión de la cuenta de almacenamiento. Esta conexión se usa para
comprobar que el enlace de salida funciona según lo previsto.

Registro de extensiones de enlace


Dado que está utilizando un enlace de salida de Queue Storage, para poder ejecutar el
proyecto debe tener instalada la extensión de enlaces de Storage.

El proyecto se ha configurado para usar conjuntos de extensiones, que instalan


automáticamente un conjunto predefinido de paquetes de extensiones.

Los conjuntos de extensiones ya están habilitados en el archivo [Link] en la raíz del


proyecto, que tiene un aspecto similar al siguiente ejemplo:

JSON

{
"version": "2.0",
"extensionBundle": {
"id": "[Link]",
"version": "[3.*, 4.0.0)"
}
}

Ahora podrá agregar el enlace de salida de almacenamiento al proyecto.

Adición de un enlace de salida


Los atributos de enlace se definen mediante la decoración de código de función
específico en el archivo function_app.py. Use el decorador queue_output para agregar un
enlace de salida de Azure Queue Storage.

Al usar el decorador queue_output , la dirección de enlace es implícitamente "out" y el


tipo es Cola de Azure Storage. Agregue el siguiente decorador al código de función en
HttpExample\function_app.py:

Python

@app.queue_output(arg_name="msg", queue_name="outqueue",
connection="AzureWebJobsStorage")

En este código, arg_name identifica el parámetro de enlace al que se hace referencia en


el código, queue_name es el nombre de la cola en la que escribe el enlace y connection
es el nombre de una configuración de la aplicación que contiene la cadena de conexión
para la cuenta de Storage. En los inicios rápidos se usa la misma cuenta de
almacenamiento que la aplicación de funciones, que se encuentra en la configuración
AzureWebJobsStorage . Cuando no existe queue_name , el enlace lo crea durante el primer

uso.

Adición de código que utilice el enlace de


salida
Una vez definido el enlace, podrá usar el valor de name de este para acceder a él como
atributo en la firma de función. Con un enlace de salida, no tiene que usar el código del
SDK de Azure Storage para autenticarse, obtener una referencia de cola o escribir datos.
El sistema en tiempo de ejecución de Functions y el enlace de salida de cola realizan
esas tareas automáticamente.

Actualice HttpExample\function_app.py para que se ajuste al siguiente código y agregue


el parámetro msg a la definición de la función y [Link](name) en la instrucción if
name: :
Python

import [Link] as func


import logging

app = [Link](http_auth_level=[Link])

@[Link](route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue",
connection="AzureWebJobsStorage")
def HttpExample(req: [Link], msg: [Link] [[Link]]) ->
[Link]:
[Link]('Python HTTP trigger function processed a request.')

name = [Link]('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')

if name:
[Link](name)
return [Link](f"Hello, {name}. This HTTP triggered
function executed successfully.")
else:
return [Link](
"This HTTP triggered function executed successfully. Pass a
name in the query string or in the request body for a personalized
response.",
status_code=200
)

El parámetro msg es una instancia de [Link] class. El método set escribe


un mensaje de cadena en la cola. En este caso, es el name que pasa a la función en la
cadena de consulta de URL.

Ejecución local de la función


1. Como en el artículo anterior, presione F5 para iniciar el proyecto de aplicación de
función y Core Tools.

2. Mientras se ejecuta Core Tools, vaya al área Azure: Funciones. En Functions,


expanda Proyecto local>Functions. Haga clic con el botón derecho (Ctrl + clic en
Mac) en la función HttpExample y elija Ejecutar la función ahora...
3. En Especificar el cuerpo de la solicitud, verá el valor { "name": "Azure" } en el
cuerpo del mensaje de solicitud. Presione Entrar para enviar este mensaje de
solicitud a la función.

4. Una vez que se haya devuelto una respuesta, presione Ctrl + C para detener Core
Tools.

Dado que está usando la cadena de conexión de almacenamiento, la función se


conectará a la cuenta de almacenamiento de Azure durante la ejecución local. Cuando el
enlace de salida se usa por primera vez, el entorno de ejecución de Functions crea una
nueva cola denominada outqueue en la cuenta de almacenamiento. Usará el Explorador
de Storage para comprobar que se han creado la cola y un mensaje.

Conexión del Explorador de Storage con la cuenta


Omita esta sección si ya instaló el Explorador de Azure Storage y lo conectó a su cuenta
de Azure.

1. Ejecute la herramienta Explorador de Azure Storage , y seleccione el icono de


conexión de la izquierda y Agregar una cuenta.
2. En el cuadro de diálogo Conectar, seleccione Agregar una cuenta de Azure y, a
continuación, elija el entorno de Azure que quiera usar y seleccione Iniciar
sesión...
Después de iniciar sesión correctamente en su cuenta, verá todas las suscripciones de
Azure asociadas con ella. Elija la suscripción y selección Abrir Explorer.

Examen de la cola de salida


1. En Visual Studio Code, presione la tecla F1 para abrir la paleta de comandos y,
después, busque y ejecute el comando Azure Storage: Open in Storage Explorer
y elija el nombre de la cuenta de almacenamiento que quiere usar. En el menú de
la cuenta de almacenamiento, seleccione el Explorador de Azure Storage.

2. Expanda el nodo Colas y, después, seleccione la cola con el nombre outqueue.

La cola contiene el mensaje que creó el enlace de salida de la cola al ejecutar la


función desencadenada por HTTP. Si se invoca la función con el valor
predeterminado name de Azure, el mensaje de cola es Name passed to the function:
Azure (Nombre pasado a la función: Azure).
3. Vuelva a ejecutar la función y envíe otra solicitud. A continuación, verá que hay un
nuevo mensaje en la cola.

Ahora, es el momento de volver a publicar la aplicación de función actualizada en Azure.

Reimplementación y comprobación de la
aplicación actualizada
1. En Visual Studio Code, presione F1 para abrir la paleta de comandos. En la paleta
de comandos, busque y seleccione Azure Functions: Deploy to function app... .

2. Elija la aplicación de funciones que creó en el primer artículo. Dado que va a volver
a implementar el proyecto en la misma aplicación, seleccione Implementar para
descartar la advertencia sobre la sobrescritura de archivos.

3. Una vez que haya finalizado la implementación, podrá volver a usar la


característica Ejecutar la función ahora... para desencadenar la función en Azure.

4. Vuelva a consultar el mensaje de la cola de almacenamiento para comprobar que


el enlace de salida genera un nuevo mensaje en la cola.

Limpieza de recursos
En Azure, los recursos son aplicaciones de funciones, funciones o cuentas de
almacenamiento, entre otros. Se agrupan en grupos de recursos y se puede eliminar
todo el contenido de un grupo si este se elimina.

Para completar estas guías de inicio rápido, ha creado varios recursos. Se le pueden
facturar por estos recursos, dependiendo del estado de la cuentade los y precios de
los servicios . Si ya no necesita los recursos, aquí se indica cómo eliminarlos:

1. En Visual Studio Code, presione F1 para abrir la paleta de comandos. En la paleta


de comandos, busque y seleccione Azure: Open in portal .

2. Elija una aplicación de funciones y presione la tecla ENTRAR . La página de la


aplicación de funciones se abre en Azure Portal.

3. En la pestaña Información general, seleccione el vínculo con nombre junto a


Grupo de recursos.

4. En la página Grupo de recursos, revise la lista de recursos incluidos y compruebe


que estos sean los que desea eliminar.

5. Seleccione Eliminar grupo de recursos y siga las instrucciones.

El proceso de eliminación tardará un par de minutos. Cuando termine, aparece una


notificación durante unos segundos. También puede seleccionar el icono de
campana en la parte superior de la página para ver la notificación.

Pasos siguientes
Ha actualizado la función desencadenada por HTTP para escribir datos en una cola de
almacenamiento. Ahora, puede obtener más información sobre el desarrollo de
Functions mediante Visual Studio Code:
Desarrollo de Azure Functions mediante Visual Studio Code

Enlaces y desencadenadores de Azure Functions.

Ejemplos de proyectos de Function completos en Python.

Guía de Azure Functions para desarrolladores de Python


Conexión de Azure Functions a Azure
Storage mediante herramientas de línea
de comandos
Artículo • 28/04/2024

En este artículo, integrará una cola de Azure Storage con la función y la cuenta de
almacenamiento que creó en el artículo de inicio rápido anterior. Para lograr esta
integración se usa un enlace de salida que escribe los datos de una solicitud HTTP en un
mensaje de la cola. Completar este artículo no supone ningún costo adicional sobre el
pequeño importe del inicio rápido anterior. Para más información acerca de los enlaces,
consulte Conceptos básicos sobre los enlaces y desencadenadores de Azure Functions.

Configuración del entorno local


Antes de empezar, debe completar el artículo Inicio rápido: Creación de un proyecto de
Azure Functions desde la línea de comandos. Si ya ha limpiado los recursos al final de
ese artículo, vuelva a recorrer los pasos para crear de nuevo la aplicación de función y
los recursos relacionados en Azure.

Recuperación de la cadena de conexión de Azure Storage


Anteriormente, creó una cuenta de Azure Storage para el uso de la aplicación de
funciones. La cadena de conexión de esta cuenta se almacena de forma segura en la
configuración de la aplicación en Azure. Mediante la descarga de la configuración en el
archivo [Link], puede usar la conexión para escribir en una cola de Storage
de la misma cuenta cuando ejecute la función de forma local.

1. En la raíz del proyecto, ejecute el comando siguiente, reemplace <APP_NAME> por el


nombre de la aplicación de funciones del paso anterior. Este comando sobrescribe
los valores existentes en el archivo.

func azure functionapp fetch-app-settings <APP_NAME>

2. Abra el archivo [Link] y busque el valor denominado


AzureWebJobsStorage , que es la cadena de conexión de la cuenta de
almacenamiento. Usará el nombre AzureWebJobsStorage y la cadena de conexión
en otras secciones de este artículo.

) Importante

Como el archivo [Link] contiene secretos descargados de Azure, excluya


siempre este archivo del control de código fuente. El archivo .gitignore que se creó
con un proyecto de Functions local excluye el archivo de forma predeterminada.

Incorporación de una definición de enlace de


salida a la función
Aunque ninguna de las funciones puede tener más de un desencadenador, puede tener
varios enlaces de entrada y salida que le permiten conectarse a otros servicios y
recursos de Azure sin escribir código de integración personalizado.

Si se usa el modelo de programación de Python v2, los atributos de enlace se definen


directamente en el archivo function_app.py como decoradores. En el inicio rápido
anterior, el archivo function_app.py ya contiene un enlace basado en decorador:

Python

import [Link] as func


import logging

app = [Link]()

@app.function_name(name="HttpTrigger1")
@[Link](route="hello", auth_level=[Link])

El decorador route agrega el enlace HttpTrigger y HttpOutput a la función, lo que


permite que la función se desencadene cuando las solicitudes http alcancen la ruta
especificada.

Para escribir en una cola de Azure Storage desde esta función, agregue el decorador
queue_output al código de función:

Python

@app.queue_output(arg_name="msg", queue_name="outqueue",
connection="AzureWebJobsStorage")
En el decorador, arg_name identifica el parámetro de enlace al que se hace referencia en
el código, queue_name es el nombre de la cola en la que escribe el enlace y connection
es el nombre de una configuración de la aplicación que contiene la cadena de conexión
para la cuenta de Storage. En los inicios rápidos se usa la misma cuenta de
almacenamiento que la aplicación de funciones, que se encuentra en la configuración
AzureWebJobsStorage (desde el archivo [Link]). Cuando no existe queue_name ,

el enlace lo crea durante el primer uso.

Para más información sobre los enlaces, consulte Conceptos básicos sobre los enlaces y
desencadenadores de Azure Functions y configuración de la cola de salida.

Adición de código para usar el enlace de salida


Con el enlace de cola definido, ahora puede actualizar la función para que reciba el
parámetro de salida msg y escribir mensajes en la cola.

Actualice HttpExample\function_app.py para que se ajuste al siguiente código y agregue


el parámetro msg a la definición de la función y [Link](name) en la instrucción if
name: :

Python

import [Link] as func


import logging

app = [Link](http_auth_level=[Link])

@[Link](route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue",
connection="AzureWebJobsStorage")
def HttpExample(req: [Link], msg: [Link] [[Link]]) ->
[Link]:
[Link]('Python HTTP trigger function processed a request.')

name = [Link]('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')

if name:
[Link](name)
return [Link](f"Hello, {name}. This HTTP triggered
function executed successfully.")
else:
return [Link](
"This HTTP triggered function executed successfully. Pass a
name in the query string or in the request body for a personalized
response.",
status_code=200
)

El parámetro msg es una instancia de [Link] class. El método set escribe


un mensaje de cadena en la cola. En este caso, es el name que pasa a la función en la
cadena de consulta de URL.

Observe que no necesita escribir código para la autenticación, para obtener una
referencia de la cola ni para escribir datos. Todas estas tareas de integración se
administran de manera adecuada en el entorno de ejecución de Azure Functions y en el
enlace de salida de la cola.

Ejecución local de la función


1. Para ejecutar la función, inicie el host en tiempo de ejecución local de
Azure Functions desde la carpeta LocalFunctionProj.

Consola

func start

En la parte final de la salida, deberán aparecer las líneas siguientes:

7 Nota

Si HttpExample no aparece como se ha mostrado arriba, es probable que


haya iniciado el host desde fuera de la carpeta raíz del proyecto. En ese caso,
use Ctrl+C para detener el host, vaya a la carpeta raíz del proyecto y vuelva a
ejecutar el comando anterior.
2. Copie la URL de su función HTTP de esta salida a un navegador y agregue la
cadena de consulta ?name=<YOUR_NAME> , lo que hace que la URL completa sea como
[Link] . El explorador debe

mostrar un mensaje de respuesta que devuelve el valor de la cadena de consulta.


El terminal en el que inició el proyecto también muestra la salida del registro
cuando realiza solicitudes.

3. Cuando termine, presione Ctrl + C y escriba y para detener el host de


Azure Functions.

 Sugerencia

Durante el inicio, el host descarga e instala la extensión de enlace de Storage y


otras extensiones de enlace de Microsoft. Esta instalación se produce porque las
extensiones de enlace se habilitan de forma predeterminada en el archivo [Link]
con las siguientes propiedades:

JSON

{
"version": "2.0",
"extensionBundle": {
"id": "[Link]",
"version": "[1.*, 2.0.0)"
}
}

Si encuentra algún error relacionado con las extensiones de enlace, compruebe que
las propiedades anteriores están presentes en [Link].

Visualización del mensaje en la cola de Azure


Storage
La cola se puede ver en Azure Portal o en el Explorador de Microsoft Azure Storage .
También puede ver la cola en la CLI de Azure, como se describe en los pasos siguientes:

1. Abra el archivo [Link] del proyecto de Functions y copie el valor de la


cadena de conexión. En una ventana de terminal o de comandos, ejecute el
siguiente comando para crear una variable de entorno denominada
AZURE_STORAGE_CONNECTION_STRING y pegue la cadena de conexión concreta en

lugar de <MY_CONNECTION_STRING> . (Esta variable de entorno significa que no es


necesario proporcionar la cadena de conexión a cada comando posterior mediante
el argumento --connection-string ).

bash

Bash

export AZURE_STORAGE_CONNECTION_STRING="<MY_CONNECTION_STRING>"

2. (Opcional) Puede usar el comando az storage queue list para ver las colas de
Storage de la cuenta. La salida de este comando debe incluir una cola denominada
outqueue , la cual se creó cuando la función escribió su primer mensaje en esa cola.

Azure CLI

az storage queue list --output tsv

3. Use el comando az storage message get para leer el mensaje de esta cola, que
debería ser el valor que indicó al probar la función anteriormente. El comando lee
y quita el primer mensaje de la cola.

bash

Azure CLI

echo `echo $(az storage message get --queue-name outqueue -o tsv --


query '[].{Message:content}') | base64 --decode`

Dado que el cuerpo del mensaje se almacena codificado en Base64, el mensaje se


debe descodificar antes de visualizarse. Después de ejecutar az storage message
get , el mensaje se quita de la cola. Si solo había un mensaje en outqueue , no se

recuperará al ejecutar este comando una segunda vez y, en su lugar, recibirá un


error.

Nueva implementación del proyecto en Azure


Ahora que ha comprobado localmente que la función escribió un mensaje en la cola de
Azure Storage, puede volver a implementar el proyecto para actualizar el punto de
conexión que se ejecuta en Azure.
En la carpeta LocalFunctionsProj, use el comando func azure functionapp publish para
volver a implementar el proyecto y reemplace <APP_NAME> el nombre de la aplicación.

func azure functionapp publish <APP_NAME>

Comprobación en Azure
1. Como en el inicio rápido anterior, use un explorador o CURL para probar la función
que ha vuelto a implementar.

Browser

Copie la dirección URL de invocación completa que se muestra en la salida


del comando de publicación en una barra de direcciones del explorador, y
anexe el parámetro de consulta &name=Functions . El explorador debe mostrar
la misma salida a cuando ejecutó la función localmente.

2. Vuelva a examinar la cola de Storage, como se describe en la sección anterior, para


comprobar que contiene el nuevo mensaje escrito en la cola.

Limpieza de recursos
Cuando haya terminado, use el siguiente comando para eliminar el grupo de recursos y
todos los recursos que contiene para evitar incurrir en costos adicionales.

Azure CLI

az group delete --name AzureFunctionsQuickstart-rg

Pasos siguientes
Ha actualizado la función desencadenada por HTTP para escribir datos en una cola de
almacenamiento. Ahora puede aprender más sobre el desarrollo de Functions desde la
línea de comandos mediante Core Tools y la CLI de Azure:

Uso de Azure Functions Core Tools

Enlaces y desencadenadores de Azure Functions


Ejemplos de proyectos de Function completos en Python.

Guía de Azure Functions para desarrolladores de Python


Soluciones de datos para aplicaciones
de Python en Azure
Artículo • 16/03/2024

Azure ofrece una opción de bases de datos relacionales, NoSQL y en memoria


totalmente administradas, que abarcan motores propietarios y de código abierto,
además de servicios de almacenamiento para el almacenamiento de objetos, bloques y
archivos. Los artículos siguientes le ayudarán a empezar a trabajar con soluciones de
datos de Python en Azure.

Bases de datos
PostgreSQL: cree aplicaciones escalables, seguras y totalmente administradas para
la empresa en PostgreSQL de código abierto, escale horizontalmente PostgreSQL
de un solo nodo con un alto rendimiento o migre cargas de trabajo de PostgreSQL
y Oracle a la nube.
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for PostgreSQL: servidor flexible
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for PostgreSQL: servidor único
Implementación de una aplicación web de Python (Django o Flask) con
PostgreSQL en App de Azure Service

MySQL: cree aplicaciones que se escalen con una base de datos SQL administrada
e inteligente en la nube.
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for MySQL: servidor flexible
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for MySQL

Azure SQL: cree aplicaciones que se escalen con una base de datos SQL
administrada e inteligente en la nube.
Inicio rápido: Uso de Python para consultar una base de datos en Azure SQL
Database o Azure SQL Instancia administrada

NoSQL, blobs, tablas, archivos, grafos y


memorias caché
Cosmos DB: compile aplicaciones con baja latencia garantizada y alta
disponibilidad en cualquier lugar, a cualquier escala o migre Cassandra, MongoDB
y otras cargas de trabajo noSQL a la nube.
Inicio rápido: Biblioteca cliente de Azure Cosmos DB for NoSQL para Python
Inicio rápido: Azure Cosmos DB para MongoDB para Python con el controlador
de MongoDB
Inicio rápido: Compilación de una aplicación de Cassandra con el SDK de
Python y Azure Cosmos DB
Inicio rápido: Creación de una aplicación de API para Table con el SDK de
Python y Azure Cosmos DB
Inicio rápido: Biblioteca de Azure Cosmos DB for Apache Gremlin para Python

Blob Storage: almacenamiento de objetos escalable y seguro de forma masiva


para cargas de trabajo nativas de la nube, archivos, lagos de datos, informática de
alto rendimiento y aprendizaje automático.
Inicio rápido: Biblioteca cliente de Azure Blob Storage para Python
Ejemplos de Azure Storage con bibliotecas cliente de Python v12

Azure Data Lake Storage Gen2: lago de datos escalable y seguro de forma masiva
para las cargas de trabajo de análisis de alto rendimiento.
Uso de Python para administrar directorios y archivos en Azure Data Lake
Storage Gen2
Uso de Python para administrar listas de control de acceso (ACL) en Azure Data
Lake Storage Gen2

Almacenamiento de archivos: recursos compartidos de archivos en la nube


sencillos, seguros y sin servidor.
Desarrollo para Azure Files con Python

Redis Cache: aplicaciones escalables y rápidas de energía con un almacén de datos


en memoria compatible con código abierto.
Inicio rápido: Uso de Azure Cache for Redis con Python

Macrodatos y análisis
Análisis de Azure Data Lake: un servicio de análisis de pago por trabajo
totalmente administrado a petición con seguridad, auditoría y soporte técnico de
nivel empresarial.
Administración de Azure Data Lake Analytics con Python
Desarrollo de U-SQL con Python para Azure Data Lake Analytics en Visual
Studio Code
Azure Data Factory: un servicio de integración de datos para orquestar y
automatizar el movimiento y la transformación de datos.
Inicio rápido: Creación de una factoría de datos y una canalización con Python
Transformación de datos mediante la ejecución de una actividad de Python en
Azure Databricks

Azure Event Hubs: un servicio de ingesta de telemetría de hiperescale que


recopila, transforma y almacena millones de eventos.
Envío o recepción de eventos desde Event Hubs mediante Python
Capturar datos de Event Hubs en Azure Storage y leerlos mediante Python
(azure-eventhub)

HDInsight: un servicio spark y Hadoop en la nube totalmente administrado


respaldado por un Acuerdo de Nivel de Servicio del 99,9 % para su empresa
Usar las herramientas Spark y Hive para Visual Studio Code

Azure Databricks: una plataforma de análisis basada en Apache® Spark™


totalmente administrada, rápida, sencilla y colaborativa optimizada para Azure.
Conectarse a Azure Databricks desde Excel, Python o R
Introducción a Azure Databricks
Tutorial: Azure Data Lake Storage Gen2, Azure Databricks y Spark

Azure Synapse Analytics: un servicio de análisis ilimitado que reúne el


almacenamiento de datos empresariales y el análisis de macrodatos.
Inicio rápido: Uso de Python para consultar una base de datos en Azure SQL
Database o Azure SQL Instancia administrada (incluye Azure Synapse Analytics)
Aprendizaje automático para
aplicaciones de Python en Azure
Artículo • 16/03/2024

Los artículos siguientes le ayudarán a empezar a trabajar con Azure Machine Learning.
Las API REST de Azure Machine Learning v2, la extensión de la CLI de Azure y el SDK de
Python aceleran el ciclo de vida de aprendizaje automático de producción. Los vínculos
de este artículo tienen como destino la versión 2, que se recomienda si va a iniciar un
nuevo proyecto de aprendizaje automático.

Introducción
El área de trabajo es el recurso de nivel superior para Azure Machine Learning, que
proporciona un lugar centralizado para trabajar con todos los artefactos que crea al usar
Azure Machine Learning.

Inicio rápido: Introducción a Azure Machine Learning


Administración de áreas de trabajo de Azure Machine Learning en el portal o con
el SDK de Python (v2)
Ejecución de cuadernos de Jupyter en el área de trabajo
Tutorial: Desarrollo de modelos en una estación de trabajo en la nube

Implementación de modelos
Implemente modelos de Machine Learning para la inferencia en tiempo real.

Tutorial: Diseñador: Implementación de un modelo de Machine Learning


Implementación y puntuación de un modelo de aprendizaje automático mediante
un punto de conexión en línea

Automated Machine Learning


El aprendizaje automático automatizado, también denominado ML automatizado o
AutoML, es el proceso de automatizar las tareas lentas e iterativas del desarrollo de
modelos de Machine Learning.

Entrenamiento de un modelo de regresión con AutoML y Python (SDK v1)


Configuración del entrenamiento de AutoML para datos tabulares con la CLI de
Azure Machine Learning y el SDK de Python (v2)
Acceso a datos
Con Azure Machine Learning puede traer datos de una máquina local o de un
almacenamiento basado en la nube existente.

Creación y administración de recursos de datos


Tutorial: Carga, acceso y exploración de los datos en Azure Machine Learning
Acceso a datos en un trabajo

Canalizaciones de aprendizaje automático


Use canalizaciones de aprendizaje automático para crear un flujo de trabajo que une
varias fases de APRENDIZAJE automático.

Uso de Azure Pipelines con Azure Machine Learning


Creación y ejecución de canalizaciones de aprendizaje automático mediante
componentes con el SDK de Azure Machine Learning v2
Tutorial: Creación de canalizaciones de ML de producción con el SDK v2 de Python
en un cuaderno de Jupyter Notebook
Introducción a python Container Apps
en Azure
Artículo • 12/01/2024

En este artículo se describe cómo pasar del código del proyecto de Python (por
ejemplo, una aplicación web) a un contenedor de Docker implementado en Azure. Se
trata del proceso general de contenedorización, opciones de implementación para
contenedores en Azure y configuración específica de Python de contenedores en Azure.

La naturaleza de los contenedores de Docker es que crear una imagen de Docker a


partir del código e implementar esa imagen en un contenedor de Azure es similar en
todos los lenguajes de programación. Las consideraciones específicas del lenguaje (
Python en este caso) se encuentran en la configuración durante el proceso de
contenedorización en Azure, en particular la estructura de Dockerfile y la configuración
que admiten marcos web de Python, como Django , Flask y FastAPI .

Escenarios de flujo de trabajo de contenedor


Para el desarrollo de contenedores de Python, algunos flujos de trabajo típicos para
pasar de código a contenedor son:

ノ Expandir tabla

Escenario Descripción Flujo de trabajo

Dev Compile imágenes de Docker de Código: código de clonación de Git en el


Python en el entorno de entorno de desarrollo (con Docker instalado).
desarrollo.
Compilación: use la CLI de Docker, VS Code
(con extensiones), PyCharm (con complemento).
Se describe en la sección Trabajar con imágenes
y contenedores de Docker de Python.

Prueba: en el entorno de desarrollo de un


contenedor de Docker.

Inserción: en un registro como Azure Container


Registry, Docker Hub o en un registro privado.

Implementación: en el servicio de Azure desde


el registro.
Escenario Descripción Flujo de trabajo

Híbrido Desde el entorno de desarrollo, Código: código de clonación de Git en el


compile imágenes de Docker de entorno de desarrollo (no es necesario para
Python en Azure. instalar Docker).

Compilación: VS Code (con extensiones), CLI de


Azure.

Inserción: en Azure Container Registry

Implementación: en el servicio de Azure desde


el registro.

Azure Todo en la nube; use Azure Cloud Código: git clone repositorio de GitHub en
Shell para compilar código de Azure Cloud Shell.
imágenes de Docker de Python
desde el repositorio de GitHub. Compilación: en Azure Cloud Shell, use la CLI de
Azure o la CLI de Docker.

Inserción: para el registro como Azure


Container Registry, Docker Hub o registro
privado.

Implementación: en el servicio de Azure desde


el registro.

El objetivo final de estos flujos de trabajo es tener un contenedor que se ejecute en uno
de los recursos de Azure que admiten contenedores de Docker, como se muestra en la
sección siguiente.

Un entorno de desarrollo puede ser la estación de trabajo local con Visual Studio Code
o PyCharm, Codespaces (un entorno de desarrollo hospedado en la nube) o
Contenedores de desarrollo de Visual Studio (un contenedor como entorno de
desarrollo).

Opciones de contenedor de implementación en


Azure
Las aplicaciones de contenedor de Python se admiten en los siguientes servicios.

ノ Expandir tabla
Servicio Descripción

Web App for Un servicio de hospedaje totalmente administrado para aplicaciones web en
Containers contenedores, incluidos sitios web y API web. Las aplicaciones web en
contenedores en Azure App Service pueden escalar según sea necesario y usar
flujos de trabajo de CI/CD optimizados con Docker Hub, Azure Container
Registry y GitHub. Ideal como una fácil rampa para que los desarrolladores
aprovechen la plataforma de servicio de App de Azure totalmente administrada,
pero que también quieren un único artefacto implementable que contenga una
aplicación y todas sus dependencias.

Ejemplo: Implemente una aplicación web de Flask o FastPI en App de Azure


Service.

Azure Un servicio de contenedor sin servidor totalmente administrado con tecnología


Container de Kubernetes y tecnologías de código abierto como Dapr, KEDA y
Apps (ACA) envoy . En función de los procedimientos recomendados y optimizados para
contenedores de uso general. La infraestructura del clúster se administra
mediante ACA y no se admite el acceso directo a la API de Kubernetes.
Proporciona muchos conceptos específicos de la aplicación sobre contenedores,
incluidos certificados, revisiones, escalado y entornos. Ideal para equipos que
quieran empezar a crear microservicios de contenedor sin tener que administrar
la complejidad subyacente de Kubernetes.

Ejemplo: Implementación de una aplicación web de Flask o FastPI en Azure


Container Apps.

Azure Una oferta sin servidor que proporciona un único pod de contenedores aislados
Container de Hyper-V a petición. Facturado por consumo en lugar de recursos
Instances (ACI) aprovisionados. Los conceptos como la escala, el equilibrio de carga y los
certificados no se proporcionan con los contenedores de ACI. Los usuarios
suelen interactuar con ACI a través de otros servicios; por ejemplo, AKS para
orquestación. Ideal si necesita un bloque de creación menos "con opinión" que
no se alinee con los escenarios para los que Azure Container Apps está
optimizando.

Ejemplo: Creación de una imagen de contenedor para la implementación en


Azure Container Instances. (El tutorial no es específico de Python, pero los
conceptos que se muestran se aplican a todos los lenguajes).

Azure Una opción de Kubernetes totalmente administrada en Azure. Admite el acceso


Kubernetes directo a la API de Kubernetes y ejecuta cualquier carga de trabajo de
Service (AKS) Kubernetes. El clúster completo reside en su suscripción, con las configuraciones
y las operaciones del clúster bajo su control y responsabilidad. Ideal para los
equipos que buscan una versión totalmente administrada de Kubernetes en
Azure.

Ejemplo: Implementación de un clúster de Azure Kubernetes Service mediante la


CLI de Azure.
Servicio Descripción

Funciones de Una solución de funciones como servicio (FAAS) controlada por eventos y sin
Azure servidor. Comparte muchas características con Azure Container Apps en torno a
la escala y la integración con eventos, pero está optimizada para funciones
efímeras implementadas como código o contenedores. Ideal para los equipos
que buscan desencadenar la ejecución de funciones en eventos; por ejemplo,
para enlazar a otros orígenes de datos.

Ejemplo: Creación de una función en Linux mediante un contenedor


personalizado.

Para obtener una comparación más detallada de estos servicios, consulte Comparación
de aplicaciones de contenedor con otras opciones de contenedor de Azure.

Entornos virtuales y contenedores


Cuando se ejecuta un proyecto de Python en un entorno de desarrollo, el uso de un
entorno virtual es una forma común de administrar las dependencias y garantizar la
reproducibilidad de la configuración del proyecto. Un entorno virtual tiene un
intérprete, bibliotecas y scripts de Python instalados que requiere el código del proyecto
que se ejecuta en ese entorno. Las dependencias de los proyectos de Python se
administran mediante el archivo [Link] .

 Sugerencia

Con los contenedores, los entornos virtuales no son necesarios a menos que los
use por motivos de prueba u otros motivos. Si usa entornos virtuales, no los copie
en la imagen de Docker. Use el archivo .dockerignore para excluirlos.

Puede pensar en contenedores de Docker como proporcionar funcionalidades similares


a los entornos virtuales, pero con ventajas adicionales en la reproducibilidad y
portabilidad. El contenedor de Docker se puede ejecutar en cualquier lugar donde se
puedan ejecutar contenedores, independientemente del sistema operativo.

Un contenedor de Docker contiene el código del proyecto de Python y todo lo que el


código necesita ejecutar. Para llegar a ese punto, debe compilar el código del proyecto
de Python en una imagen de Docker y, a continuación, crear un contenedor, una
instancia ejecutable de esa imagen.

Para incluir en contenedores proyectos de Python, los archivos de clave son:


ノ Expandir tabla

Archivo del Descripción


proyecto

[Link] Se usa durante la compilación de la imagen de Docker para obtener las


dependencias correctas en la imagen.

Dockerfile Se usa para especificar cómo compilar la imagen de Docker de Python. Para
obtener más información, consulte la sección Instrucciones de Dockerfile para
Python.

.dockerignore Los archivos y directorios de .dockerignore no se copian en la imagen de


Docker con el COPY comando en el Dockerfile. El archivo .dockerignore admite
patrones de exclusión similares a los archivos .gitignore . Para obtener más
información, vea archivo .dockerignore .

La exclusión de archivos ayuda al rendimiento de la compilación de imágenes,


pero también debe usarse para evitar agregar información confidencial a la
imagen donde se puede inspeccionar. Por ejemplo, .dockerignore debe
contener líneas para omitir .env y .venv (entornos virtuales).

Configuración de contenedor para marcos web


Los marcos web tienen puertos predeterminados en los que escuchan las solicitudes
web. Al trabajar con algunas soluciones de contenedor de Azure, debe especificar el
puerto en el que escucha el contenedor que recibirá tráfico.

ノ Expandir tabla

Marco de trabajo web Port

Django 8000

Flask 5000 o 5002

FastAPI (uvicorn ) 8000 o 80

En la tabla siguiente se muestra cómo establecer el puerto para las soluciones de


contenedor de Azure diferentes.

ノ Expandir tabla
Solución de Cómo establecer el puerto de la aplicación web
contenedor de
Azure

Web App for De forma predeterminada, el servicio App Service da por hecho que el
Containers contenedor personalizado escucha en los puertos 80 u 8080. Si el contenedor
escucha un puerto diferente, establezca la configuración de la aplicación
WEBSITES_PORT en la aplicación de App Service. Para obtener más
información, consulte Configuración de un contenedor personalizado para
App de Azure Service.

Aplicaciones de Azure Container Apps permite exponer la aplicación contenedora a la web


contenedores de pública, a la VNET o a otras aplicaciones contenedoras dentro de su entorno
Azure si habilita la entrada. Establezca la entrada targetPort en el puerto en el que
escucha el contenedor para las solicitudes entrantes. El punto de conexión de
entrada de la aplicación siempre se expone en el puerto 443. Para más
información, consulte Configuración de la entrada HTTPS o TCP en Azure
Container Apps.

Azure Container Establezca el puerto durante la creación de un contenedor. Debe asegurarse


Instances, Azure de que la solución tiene un marco web, un servidor de aplicaciones (por
Kubernetes ejemplo, gunicorn, uvicorn) y un servidor web (por ejemplo, nginx). Por
ejemplo, puede crear dos contenedores, un contenedor con un marco web y
un servidor de aplicaciones, y otro marco con un servidor web. Los dos
contenedores se comunican en un puerto y el contenedor del servidor web
expone el 80/443 para las solicitudes externas.

Python Dockerfile
Un Dockerfile es un archivo de texto que contiene instrucciones para compilar una
imagen de Docker. La primera línea indica la imagen base con la que empezar. Esta línea
va seguida de instrucciones para instalar programas necesarios, copiar archivos y otras
instrucciones para crear un entorno de trabajo. Por ejemplo, algunos ejemplos
específicos de Python para las instrucciones clave de Dockerfile de Python se muestran
en la tabla siguiente.

ノ Expandir tabla

Instrucción Fin Ejemplo

FROM Establece la imagen base para obtener instrucciones FROM python:3.8-slim


posteriores.

EXPONER Indica a Docker que el contenedor escucha en los EXPOSE 5000


puertos de red especificados en tiempo de
ejecución.
Instrucción Fin Ejemplo

COPY Copia archivos o directorios del origen especificado COPY . /app


y los agrega al sistema de archivos del contenedor
en la ruta de acceso de destino especificada.

EJECUTAR Ejecuta un comando dentro de la imagen de RUN python -m pip install


Docker. Por ejemplo, extraiga dependencias. El -r [Link]
comando se ejecuta una vez en tiempo de
compilación.

CMD El comando proporciona el valor predeterminado CMD ["gunicorn", "--bind",


para ejecutar un contenedor. Solo puede haber una "[Link]:5000",
instrucción CMD. "wsgi:app"]

El comando docker build compila imágenes de Docker a partir de un Dockerfile y un


contexto. El contexto de una compilación es el conjunto de archivos ubicados en la ruta
de acceso o dirección URL especificadas. Normalmente, creará una imagen a partir de la
raíz del proyecto de Python y la ruta de acceso para el comando de compilación es "."
como se muestra en el ejemplo siguiente.

Bash

docker build --rm --pull --file "Dockerfile" --tag "mywebapp:latest" .

El proceso de compilación puede hacer referencia a cualquiera de los archivos del


contexto. Por ejemplo, la compilación puede usar una instrucción COPY para hacer
referencia a un archivo en el contexto. Este es un ejemplo de un Dockerfile para un
proyecto de Python mediante el marco de Flask :

Dockerfile

FROM python:3.8-slim

EXPOSE 5000

# Keeps Python from generating .pyc files in the container.


ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging


ENV PYTHONUNBUFFERED=1

# Install pip requirements.


COPY [Link] .
RUN python -m pip install -r [Link]

WORKDIR /app
COPY . /app
# Creates a non-root user with an explicit UID and adds permission to access
the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R
appuser /app
USER appuser

# Provides defaults for an executing container; can be overridden with


Docker CLI.
CMD ["gunicorn", "--bind", "[Link]:5000", "wsgi:app"]

Puede crear un Dockerfile manualmente o crearlo automáticamente con VS Code y la


extensión de Docker. Para obtener más información, consulte Generación de archivos
de Docker.

El comando docker build forma parte de la CLI de Docker. Cuando se usan IDE como VS
Code o PyCharm, los comandos de interfaz de usuario para trabajar con imágenes de
Docker llaman al comando de compilación automáticamente y automatizan la
especificación de opciones.

Trabajar con contenedores e imágenes de


Docker de Python

VS Code y PyCharm
No es necesario trabajar en un entorno de desarrollo integrado (IDE) para el desarrollo
de contenedores de Python, pero puede simplificar muchas tareas relacionadas con
contenedores. Estas son algunas de las cosas que puede hacer con VS Code y PyCharm.

Descargue y compile imágenes de Docker.


Cree imágenes en el entorno de desarrollo.
Compile imágenes de Docker en Azure sin Docker instaladas en el entorno de
desarrollo. (Para PyCharm, use la CLI de Azure para compilar imágenes en
Azure).

Cree y ejecute contenedores de Docker desde una imagen existente, una imagen
extraída o directamente desde un Dockerfile.

Ejecute aplicaciones multicontenedor con Docker Compose.

Conectar y trabajar con registros de contenedor como Docker Hub, GitLab,


JetBrains Space, Docker V2 y otros registros de Docker autohospedados.
(Solo VS Code) Agregue un dockerfile y archivos de Docker compose que se
adapten al proyecto de Python.

Para configurar VS Code y PyCharm para ejecutar contenedores de Docker en el entorno


de desarrollo, siga estos pasos.

VS Code

Si aún no lo ha hecho, instale Azure Tools para VS Code .

ノ Expandir tabla

Instrucciones Instantánea

Paso 1: Use MAYÚS + ALT + A para abrir la extensión de


Azure y confirmar que está conectado a Azure.

También puede seleccionar el icono de Azure en la barra de



extensiones de VS Code.

Si no ha iniciado sesión, seleccione Iniciar sesión en Azure y


siga las indicaciones.

Si tiene problemas para acceder a la suscripción de Azure,
puede deberse a que está detrás de un proxy. Para resolver
problemas de conexión, consulte Red Conectar ions en
Visual Studio Code .

Paso 2: Use CTRL + MAYÚS + X para abrir Extensiones,


busque la extensión de Docker e instale la extensión.

También puede seleccionar el icono Extensiones en la barra 


de extensiones de VS Code.

Paso 3: Seleccione el icono de Docker en la barra de


extensiones, expanda imágenes y haga clic con el botón
derecho en una imagen que la ejecute como contenedor.

Paso 4: Supervisar la salida de ejecución de Docker en la


ventana Terminal .

CLI de Azure y CLI de Docker
También puede trabajar con imágenes y contenedores de Docker de Python mediante la
CLI de Azure y la CLI de Docker. VS Code y PyCharm tienen terminales donde puede
ejecutar estas CLIs.

Use una CLI cuando desee un control más preciso sobre los argumentos de compilación
y ejecución, y para la automatización. Por ejemplo, el siguiente comando muestra cómo
usar la CLI de Azure az acr build para especificar el nombre de la imagen de Docker.

Bash

az acr build --registry <registry-name> \


--resource-group <resource-group> \
--target pythoncontainerwebapp:latest .

Como otro ejemplo, considere el siguiente comando que muestra cómo usar el
comando run de la CLI de Docker. En el ejemplo se muestra cómo ejecutar un
contenedor de Docker que se comunica con una instancia de MongoDB en el entorno
de desarrollo, fuera del contenedor. Los distintos valores para completar el comando
son más fáciles de automatizar cuando se especifican en una línea de comandos.

Bash

docker run --rm -it \


--publish <port>:<port> --publish 27017:27017 \
--add-host mongoservice:<your-server-IP-address> \
--env CONNECTION_STRING=mongodb://mongoservice:27017 \
--env DB_NAME=<database-name> \
--env COLLECTION_NAME=<collection-name> \
containermongo:latest

Para obtener más información sobre este escenario, consulte Compilación y prueba de
una aplicación web de Python en contenedores localmente.

Variables de entorno en contenedores


Los proyectos de Python suelen usar variables de entorno para pasar datos al código.
Por ejemplo, puede especificar información de conexión de base de datos en una
variable de entorno para que se pueda cambiar fácilmente durante las pruebas. O bien,
al implementar el proyecto en producción, la conexión de base de datos se puede
cambiar para hacer referencia a una instancia de base de datos de producción.
Los paquetes como python-dotenv se usan a menudo para leer pares clave-valor de
un archivo .env y establecerlos como variables de entorno. Un archivo .env es útil
cuando se ejecuta en un entorno virtual, pero no se recomienda al trabajar con
contenedores. No copie el archivo .env en la imagen de Docker, especialmente si
contiene información confidencial y el contenedor se hará público. Use el archivo
.dockerignore para excluir que los archivos se copien en la imagen de Docker. Para
obtener más información, consulte la sección Entornos virtuales y contenedores de este
artículo.

Puede pasar variables de entorno a contenedores de varias maneras:

1. Se define en el Dockerfile como instrucciones enV .


2. Se pasa como --build-arg argumentos con el comando de compilación de
Docker .
3. Se pasa como --secret argumentos con el comando de compilación de Docker y
el back-end buildKit .
4. Se pasa como --env argumentos o --env-file con el comando Docker run .

Las dos primeras opciones tienen el mismo inconveniente que se indicó anteriormente
con archivos .env , es decir, que está codificando información potencialmente
confidencial en una imagen de Docker. Puede inspeccionar una imagen de Docker y ver
las variables de entorno, por ejemplo, con el comando docker image inspect .

La tercera opción con BuildKit permite pasar información secreta que se usará en el
Dockerfile para compilar imágenes de Docker de una manera segura que no termine
almacenada en la imagen final.

La cuarta opción de pasar variables de entorno con el comando Docker run significa que
la imagen de Docker no contiene las variables. Sin embargo, las variables siguen siendo
visibles inspeccionando la instancia de contenedor (por ejemplo, con la inspección del
contenedor de Docker). Esta opción puede ser aceptable cuando el acceso a la instancia
de contenedor se controla o en escenarios de pruebas o desarrollo.

Este es un ejemplo de cómo pasar variables de entorno mediante el comando run de la


CLI de Docker y mediante el --env argumento .

Bash

# PORT=8000 for Django and 5000 for Flask


export PORT=<port-number>

docker run --rm -it \


--publish $PORT:$PORT \
--env CONNECTION_STRING=<connection-info> \
--env DB_NAME=<database-name> \
<dockerimagename:tag>

Si usa VS Code o PyCharm, las opciones de interfaz de usuario para trabajar con
imágenes y contenedores usan en última instancia comandos de la CLI de Docker como
el que se muestra anteriormente.

Por último, especificar variables de entorno al implementar un contenedor en Azure es


diferente de usar variables de entorno en el entorno de desarrollo. Por ejemplo:

En el caso de Web App for Containers, se configuran las opciones de la aplicación


durante la configuración de App Service. Esta configuración está disponible para el
código de la aplicación como variables de entorno y se puede acceder a ella
mediante el patrón estándar [Link] . Puede cambiar los valores después de la
implementación inicial cuando sea necesario. Para obtener más información,
consulte Access app settings as environment variables (Configuración de la
aplicación de Access como variables de entorno).

Para Azure Container Apps, puede configurar variables de entorno durante la


configuración inicial de la aplicación contenedora. La modificación posterior de las
variables de entorno crea una revisión del contenedor. Además, Azure Container
Apps permite definir secretos en el nivel de aplicación y, a continuación, hacer
referencia a ellos en variables de entorno. Para más información, consulte
Administración de secretos en Azure Container Apps.

Como otra opción, puede usar Service Conectar or para ayudarle a conectar los servicios
de proceso de Azure a otros servicios de respaldo. Este servicio establece la
configuración de red y la información de conexión (por ejemplo, la generación de
variables de entorno) entre los servicios de proceso y los servicios de respaldo de
destino en el plano de administración.

Visualización de los registros de contenedores


Vea los registros de instancia de contenedor para ver la salida de mensajes de
diagnóstico del código y solucionar problemas en el código del contenedor. Estas son
varias maneras de ver los registros al ejecutar un contenedor en el entorno de
desarrollo:

Al ejecutar un contenedor con VS Code o PyCharm, como se muestra en la sección


VS Code y PyCharm, puede ver los registros en las ventanas de terminal abiertas
cuando se ejecuta Docker.
Si usa el comando run de la CLI de Docker con la marca -it interactiva , verá la
salida siguiendo el comando .

En Docker Desktop , también puede ver los registros de un contenedor en


ejecución.

Al implementar un contenedor en Azure, también tiene acceso a los registros de


contenedor. Estos son varios servicios de Azure y cómo acceder a los registros de
contenedor en Azure Portal.

ノ Expandir tabla

Servicio de Acceso a los registros en Azure Portal


Azure

Web App for Vaya al recurso Diagnosticar y resolver problemas para ver los registros. El
Containers diagnóstico es una experiencia inteligente e interactiva para ayudarle a solucionar
problemas de la aplicación sin que se requiera ninguna configuración. Para
obtener una vista en tiempo real de los registros, vaya al flujo de registro de
supervisión - . Para obtener consultas y configuraciones de registros más
detalladas, consulte los demás recursos en Supervisión.

Azure Vaya al recurso de entorno Diagnóstico y solución de problemas para solucionar


Container problemas de entorno. Con más frecuencia, querrá ver los registros de
Apps contenedor. En el recurso de contenedor, en Administración - de revisiones de
aplicaciones, seleccione la revisión y, desde allí, puede ver los registros del sistema
y de la consola. Para obtener consultas de registro y configuración más detalladas,
consulte los recursos en Supervisión.

Azure Vaya al recurso Contenedores y seleccione Registros.


Container
Instances

Para los mismos servicios enumerados anteriormente, estos son los comandos de la CLI
de Azure para acceder a los registros.

ノ Expandir tabla

Servicio de Azure Comando de la CLI de Azure para acceder a los registros

Web App for Containers az webapp log

Azure Container Apps az containerapps logs

Azure Container Instances az container logs


También se admite la visualización de registros en VS Code. Debe tener instaladas las
herramientas de Azure para VS Code . A continuación se muestra un ejemplo de
visualización de registros de Web Apps for Containers (App Service) en VS Code.

Pasos siguientes
Aplicación web de Python en contenedor en Azure con MongoDB
Implementación de una aplicación web de Python en Azure Container Apps con
PostgreSQL
Implementar una aplicación web de
Flask o FastPI contenedorizada en Azure
App Service
Artículo • 15/10/2024

En este tutorial se muestra cómo implementar una aplicación web Flask o FastAPI
de Python en Azure App Service mediante la característica Web App for Containers .
Web App for Containers proporciona una rampa simple para que los desarrolladores
aprovechen una plataforma de Azure App Service totalmente administrada, pero que
también quieren un único artefacto que se pueda implementar y que contenga una
aplicación, así como todas sus dependencias. Para obtener más información sobre el
uso de contenedores en Azure, consulte Comparación de las opciones de contenedor
de Azure.

En este tutorial, usará la CLI de Docker y Docker para crear una imagen de Docker y
probarla localmente. La CLI de Azure se usa para crear una imagen de Docker en Una
instancia de Azure Container Registry e implementarla en Azure App Service. La
aplicación web se configura con su identidad administrada asignada por el sistema
(conexiones sin contraseña) y el acceso basado en roles de Azure para extraer la imagen
de Docker de Azure Container Registry durante la implementación. También puede
implementar con Visual Studio Code con la extensión de Azure Tools instalada.

Para obtener un ejemplo de cómo compilar y crear una imagen de Docker para
ejecutarse en Azure Container Apps, consulte Implementación de una aplicación web
Flask o FastPI en Azure Container Apps.

7 Nota

En este tutorial se muestra cómo crear una imagen de Docker que luego se puede
ejecutar en App Service. Esto no es necesario para usar App Service. Puede
implementar código directamente desde un área de trabajo local en App Service
sin crear una imagen de Docker. Para ver ejemplo, consulte Inicio rápido:
implementación de una aplicación web de Python (Django o Flask) en Azure App
Service.

Requisitos previos
Para completar este tutorial, necesita:
Una cuenta de Azure donde pueda implementar una aplicación web en Azure App
Service y Azure Container Registry. Si no tiene una suscripción a Azure, cree una
cuenta gratuita antes de empezar.

CLI de Azure para crear una imagen de Docker e implementarla en App Service. Y,
opcionalmente, Docker y la CLI de Docker para crear un Docker y probarlo en
el entorno local.

Obtención del código de ejemplo


En el entorno local, obtenga el código.

Flask

Bash

git clone [Link]


[Link]
cd msdocs-python-flask-webapp-quickstart

Adición de archivos Dockerfile y .dockerignore


Agregue un Dockerfile para indicar a Docker cómo compilar la imagen. El Dockerfile
especifica el uso de Gunicorn , un servidor web de nivel de producción que reenvía las
solicitudes web a los marcos Flask y FastAPI. Los comandos ENTRYPOINT y CMD indican
a Gunicorn que controle las solicitudes del objeto de aplicación.

Flask

Dockerfile

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY [Link] .

RUN pip3 install -r [Link]

COPY . .
EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 se usa para el puerto de contenedor (interno) en este ejemplo, pero puede

usar cualquier puerto libre.

Compruebe el archivo [Link] para asegurarse de que contiene gunicorn .

Python

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Agregue un archivo .dockerignore para excluir archivos innecesarios de la imagen.

dockerignore

.git*
**/*.pyc
.venv/

Configuración de gunicorn
Gunicorn se puede configurar con un archivo [Link]. Cuando el archivo
[Link] se encuentra en el mismo directorio donde se ejecuta gunicorn, no es
necesario especificar su ubicación en el Dockerfile. Para obtener más información sobre
cómo especificar el archivo de configuración, consulte Configuración de Gunicorn .

En este tutorial, el archivo de configuración sugerido configura gunicorn para aumentar


su número de trabajos en función del número de núcleos de CPU disponibles. Para
obtener más información sobre la configuración de archivos [Link], consulte
Configuración de Gunicorn .

Flask

text

# Gunicorn configuration file


import multiprocessing

max_requests = 1000
max_requests_jitter = 50
log_file = "-"

bind = "[Link]:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

Compilación y ejecución local de la imagen


Compile la imagen localmente.

Flask

Bash

docker build --tag flask-demo .

7 Nota

Si el comando docker build devuelve un error, asegúrese de que se está


ejecutando el demonio del docker. En Windows, asegúrese de que Docker Desktop
se esté ejecutando.

Ejecute la imagen localmente en un contenedor de Docker.

Flask

Bash

docker run --detach --publish 5000:50505 flask-demo

Abra la URL [Link] en el explorador para ver la aplicación web que


se ejecuta localmente.

La opción --detach ejecuta el contenedor en segundo plano. La opción --publish


asigna el puerto de contenedor a un puerto en el host. El puerto host (externo) es
primero en el par y el puerto de contenedor (interno) es el segundo. Para más
información, consulte Referencia de ejecución de Docker .

Creación de un grupo de recursos y una


instancia de Azure Container Registry
1. Ejecute el comando az login para iniciar sesión en Azure.

Azure CLI

az login

2. Ejecute el comando az upgrade para asegurarse de que la versión de la CLI de


Azure está actualizada.

Azure CLI

az upgrade

3. Cree un grupo con el comando az group create.

Azure CLI

az group create --name web-app-simple-rg --location eastus

Un grupo de recursos de Azure es un contenedor lógico en el que se implementan


y se administran los recursos de Azure. Al crear un grupo de recursos, se especifica
una ubicación, como eastus.

4. Cree una instancia de Azure Container Registry con el comando az acr create.

Azure CLI

az acr create --resource-group web-app-simple-rg \


--name webappacr123 --sku Basic

7 Nota

El nombre del registro debe ser único en Azure. Si recibe un error, pruebe con
un nombre diferente. Los nombres de registro pueden tener de 5 a 50
caracteres alfanuméricos. No se permiten guiones ni caracteres de subrayado.
Para obtener más información, consulte Reglas de nombres de instancias de
Azure Container Registry. Si usa un nombre diferente, asegúrese de usar su
nombre en lugar de webappacr123 en los comandos que hacen referencia al
registro y a los artefactos del registro en las secciones siguientes.

Azure Container Registry es un registro privado de Docker que almacena imágenes


para su uso en Azure Container Instances, Azure App Service, Azure Kubernetes
Service y otros servicios. Al crear un registro, especifique un nombre, una SKU y un
grupo de recursos.

Compilación de la imagen en Azure Container


Registry
Compile la imagen de Docker en Azure con el comando az acr build. El comando usa el
Dockerfile en el directorio actual e inserta la imagen en el registro.

Azure CLI

az acr build \
--resource-group web-app-simple-rg \
--registry webappacr123 \
--image webappsimple:latest .

La opción --registry especifica el nombre del registro y la opción --image especifica el


nombre de la imagen. El nombre de la imagen está en el formato
[Link]/repository:tag .

Implementación de la aplicación web en Azure


1. Cree un plan de App Service con el comando az appservice plan.

Azure CLI

az appservice plan create \


--name webplan \
--resource-group web-app-simple-rg \
--sku B1 \
--is-linux

2. Establezca una variable de entorno para el ID suscripción. Se usa en el parámetro -


-scope en el comando siguiente.

Azure CLI
SUBSCRIPTION_ID=$(az account show --query id --output tsv)

El comando para crear la variable de entorno se muestra para el shell de Bash.


Cambie la sintaxis según corresponda para otros entornos.

3. Cree la aplicación web con el comando az webapp create.

Azure CLI

az webapp create \
--resource-group web-app-simple-rg \
--plan webplan --name webappsimple123 \
--assign-identity [system] \
--role AcrPull \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/web-app-simple-
rg \
--acr-use-identity --acr-identity [system] \
--container-image-name [Link]/webappsimple:latest

Notas:

El nombre de la aplicación web debe ser único en Azure. Si recibe un error,


pruebe con un nombre diferente. El nombre puede constar de caracteres
alfanuméricos y guiones, pero no puede empezar ni terminar con un guion.
Para obtener más información, consulte Reglas de nombres de
[Link].

Si usa un nombre diferente de webappacr123 para su instancia de Azure


Container Registry, asegúrese de actualizar el parámetro --container-image-
name correctamente.

Los parámetros --assign-identity , --role y --scope habilitan la identidad


administrada asignada por el sistema en la aplicación web y le asignan el rol
de AcrPull en el grupo de recursos. Esto proporciona permiso de identidad
administrada para extraer imágenes de cualquier instancia de Azure
Container Registry en el grupo de recursos.

Los parámetros --acr-use-identity y --acr-identity configuran la


aplicación web para que use su identidad administrada asignada por el
sistema para extraer imágenes de Azure Container Registry.

La creación de la aplicación web puede tardar unos minutos. Puede


comprobar los registros de implementación con el comando az webapp log
tail. Por ejemplo, az webapp log tail --resource-group web-app-simple-rg --
name webappsimple123 . Si ve entradas con "warmup", significa que el

contenedor se está implementando.

La URL de la aplicación web es <web-app-name>.[Link] , por


ejemplo, [Link] .

Actualizaciones y nuevas implementaciones


Después de realizar cambios en el código, puede volver a implementar en App Service
con los comandos az acr build y az webapp update.

Limpiar
Todos los recursos de Azure creados en este tutorial están en el mismo grupo de
recursos. Al quitar el grupo de recursos se quitan todos los recursos que haya dentro; es
la manera más rápida de quitar todos los recursos de Azure usados para la aplicación.

Para quitar recursos, use el comando az group delete.

Azure CLI

az group delete --name web-app-simple-rg

También puede quitar el grupo en Azure Portal o en Visual Studio Code y la


extensión de Azure Tools .

Pasos siguientes
Para obtener más información, consulte los siguientes recursos:

Implementación de una aplicación web de Python en Azure Container Apps


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

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Información general: Aplicación web de
Python en contenedor en Azure con
MongoDB
Artículo • 23/10/2023

En este tutorial se muestra cómo incluir en contenedores una aplicación web de Python
e implementarla en Azure. La aplicación web de contenedor único se hospeda en App
de Azure Service y usa MongoDB para Azure Cosmos DB para almacenar datos. App
Service Web App for Containers le permite centrarse en la redacción de los
contenedores sin preocuparse de administrar y mantener un orquestador de
contenedores subyacente. Al compilar aplicaciones web, App de Azure Service es una
buena opción para realizar los primeros pasos con los contenedores. Para más
información sobre el uso de contenedores en Azure, consulte Comparación de las
opciones de contenedor de Azure.

En este tutorial, aprenderá lo siguiente:

Compile y ejecute un contenedor de Docker localmente. Este paso es opcional.

Compile una imagen de contenedor de Docker directamente en Azure.

Configure una instancia de App Service para crear una aplicación web basada en la
imagen de contenedor de Docker.

Después de este tutorial, tendrá la base para la integración continua (CI) y la


implementación continua (CD) de una aplicación web de Python en Azure.

Información general sobre el servicio


El diagrama de servicio que admite este tutorial muestra dos entornos (entorno de
desarrollador y Azure) y los distintos servicios de Azure que se usan en el tutorial.

Los componentes que admiten este tutorial y se muestran en el diagrama anterior son:

Azure App Service

La funcionalidad subyacente de App Service que habilita la contenedorización


es Web App for Containers. App de Azure Service usa el Tecnología de
contenedor de Docker para hospedar imágenes integradas e imágenes
personalizadas. En este tutorial, creará una imagen a partir del código de
Python e la implementará en Web App for Containers.

Web App for Containers usa un webhook en el registro para recibir


notificaciones de nuevas imágenes. Una inserción de una nueva imagen en el
repositorio desencadena App Service para extraer la imagen y reiniciarla.

Azure Container Registry

Azure Container Registry permite trabajar con imágenes de Docker y sus


componentes en Azure. Proporciona un registro que está cerca de las
implementaciones en Azure y que proporciona control sobre el acceso, lo que
permite usar los grupos y permisos de Azure Active Directory.

En este tutorial, el origen del registro es Azure Container Registry, pero también
puede usar Docker Hub o un registro privado con modificaciones menores.

Azure Cosmos DB for MongoDB

Azure Cosmos DB para MongoDB es una base de datos NoSQL que se usa en
este tutorial para almacenar datos.
El acceso al recurso de Azure Cosmos DB se realiza a través de una cadena de
conexión, que se pasa como una variable de entorno a la aplicación en
contenedor.

Autenticación
En este tutorial, creará una imagen de Docker (local o directamente en Azure) e la
implementará en App de Azure Service. App Service extrae la imagen de contenedor de
un repositorio de Azure Container Registry.

App Service usa la identidad administrada para extraer imágenes de Azure Container
Registry. La identidad administrada permite conceder permisos a la aplicación web para
que pueda acceder a otros recursos de Azure sin necesidad de especificar credenciales.
En concreto, en este tutorial se usa una identidad administrada asignada por el sistema.
La identidad administrada se configura durante la instalación de App Service para usar
una imagen de contenedor del registro.

La aplicación web de ejemplo del tutorial usa MongoDB para almacenar datos. El código
de ejemplo se conecta a Azure Cosmos DB a través de un cadena de conexión.

Requisitos previos
Para completar este tutorial, necesita:

Una cuenta de Azure donde puede crear:


Azure Container Registry
Azure App Service
Azure Cosmos DB para MongoDB (o acceso a un equivalente). Para crear una
base de datos de Azure Cosmos DB para MongoDB, se recomienda seguir los
pasos descritos en la parte 2 de este tutorial.

Visual Studio Code o la CLI de Azure, en función de la herramienta que usará.


Para Visual Studio Code, necesitará la extensión de Docker y la extensión
App de Azure Service.

Paquetes de Python:
PyMongo para conectarse a MongoDB.
Flask o Django como marco web.

Docker se instala localmente si desea ejecutar el contenedor localmente.


Aplicación de ejemplo
La aplicación de ejemplo de Python es una aplicación de revisión de restaurantes que
guarda el restaurante y revisa los datos en MongoDB. Para ver un ejemplo de una
aplicación web mediante PostgreSQL, consulte Creación e implementación de una
aplicación web de Flask en Azure con una identidad administrada.

Al final del tutorial, tendrá una aplicación de revisión de restaurante implementada y en


ejecución en Azure que tiene un aspecto similar a la captura de pantalla siguiente.

Paso siguiente
Compilar y probar localmente
Compilación y ejecución de una
aplicación web de Python en
contenedores localmente con MongoDB
Artículo • 30/12/2023

Este artículo forma parte de un tutorial sobre cómo incluir e implementar una aplicación
web de Python en contenedor en App de Azure Service. App Service le permite ejecutar
aplicaciones web en contenedor e implementarlas mediante funcionalidades de
integración continua e implementación continua (CI/CD) con Docker Hub, Azure
Container Registry y Visual Studio Team Services. En esta parte del tutorial, aprenderá a
compilar y ejecutar la aplicación web de Python en contenedores localmente. Este paso
es opcional y no es necesario para implementar la aplicación de ejemplo en Azure.

La ejecución de una imagen de Docker localmente en el entorno de desarrollo requiere


la instalación más allá de la implementación en Azure. Piense en ella como una inversión
que pueda facilitar los ciclos de desarrollo futuros, especialmente cuando se mueve más
allá de las aplicaciones de ejemplo y se empieza a crear sus propias aplicaciones web.
Para implementar las aplicaciones de ejemplo para Django y Flask , puede omitir
este paso y ir al siguiente paso de este tutorial. Siempre puede volver después de
implementar en Azure y trabajar con estos pasos.

En el diagrama de servicio siguiente se resaltan los componentes descritos en este


artículo.


1. Clonar o descargar la aplicación de ejemplo
Clonación de Git

Clone el repositorio:

terminal

# Django
git clone [Link]
[Link]

# Flask
git clone [Link]
[Link]

Después, vaya a esa carpeta:

terminal

# Django
cd msdocs-python-django-container-web-app

# Flask
cd msdocs-python-flask-container-web-app

2. Compilación de una imagen de Docker


Si usa una de las aplicaciones de ejemplo de marco disponibles para Django y Flask ,
está configurado para ir. Si está trabajando con su propia aplicación de ejemplo, eche
un vistazo a cómo se configuran las aplicaciones de ejemplo, en particular el Dockerfile
en el directorio raíz.

VS Code

Estas instrucciones requieren Visual Studio Code y la extensión de Docker. Vaya


a la carpeta de ejemplo que ha clonado o descargado y abra VS Code con el
comando code . .

7 Nota
Los pasos de esta sección requieren que se ejecute el demonio de Docker. En
algunas instalaciones, por ejemplo, en Windows, debe abrir Docker Desktop ,
que inicia el demonio, antes de continuar.

ノ Expandir tabla

Instrucciones Instantánea

Abra la extensión de Docker.



Si la extensión de Docker notifica un error "No se pudo conectar",
asegúrese de que Docker está instalado y en ejecución. Si esta es la
primera vez que trabaja con Docker, probablemente no tendrá ningún
contenedor, imágenes ni registros conectados.

Compile la imagen.
En el Explorador de proyectos que muestra los archivos del
proyecto, haga clic con el botón derecho en dockerfile y seleccione
Compilar imagen....
Como alternativa, puede usar la paleta de comandos (F1 o
Ctrl+Mayús+P) y escribir "Docker Images: Build Images" para
invocar el comando.

Para obtener más información sobre la sintaxis de Dockerfile, consulte la


referencia de Dockerfile.

Confirme que se ha compilado la imagen.


Vaya a la sección IMAGES de la extensión de Docker.
Busque la imagen compilada recientemente. El nombre de la

imagen de contenedor es "msdocspythoncontainerwebapp", que
se establece en el archivo .vscode/[Link] .

En este punto, ha creado una imagen localmente. La imagen que creó tiene el nombre
"msdocspythoncontainerwebapp" y etiqueta "latest". Las etiquetas son una manera de
definir información de versión, uso previsto, estabilidad u otra información. Para más
información, consulte Recomendaciones para el etiquetado y control de versiones de las
imágenes de contenedor.

Las imágenes compiladas a partir de VS Code o desde el uso de la CLI de Docker


directamente también se pueden ver con la aplicación Docker Desktop .

3. Configuración de MongoDB
Para este tutorial, necesita una base de datos de MongoDB denominada
restaurants_reviews y una colección denominada restaurants_reviews. Los pasos de esta
sección muestran cómo usar una instalación local de MongoDB o Azure Cosmos DB
para MongoDB para crear y acceder a la base de datos y la colección.

) Importante

No use una base de datos de MongoDB que usará en producción. En este tutorial,
almacenará el cadena de conexión de MongoDB en una variable de entorno. Esto
hace que sea observable por cualquier persona capaz de inspeccionar el
contenedor (por ejemplo, mediante docker inspect ).

Local MongoDB

Paso 1: Instale MongoDB si aún no lo está.

Puede comprobar la instalación de MongoDB mediante el Shell de MongoDB


(mongosh).

El siguiente comando escribe el shell y proporciona la versión del servidor


mongosh y mongoDB instalado en el sistema:

terminal

mongosh

El siguiente comando proporciona solo la versión del servidor de MongoDB


instalado en el sistema:

terminal

mongosh --quiet --exec '[Link]()'

Si estos comandos no funcionan, es posible que tenga que instalar explícitamente


mongosh o conectar mongosh al servidor de MongoDB.

Una alternativa en algunas instalaciones es invocar directamente el demonio de


Mongo.

terminal

mongod --version
Paso 2: Edite el archivo [Link] para agregar la dirección IP del equipo.

El archivo de configuración mongod tiene una bindIp clave que define los
nombres de host y las direcciones IP que MongoDB escucha para las conexiones de
cliente. Agregue la dirección IP actual del equipo de desarrollo local. La aplicación
de ejemplo que se ejecuta localmente en un contenedor de Docker se comunicará
con la máquina host con esta dirección.

Por ejemplo, parte del archivo de configuración debe tener este aspecto:

yml

net:
port: 27017
bindIp: [Link],<local-ip-address>

Reinicie MongoDB para recoger los cambios en el archivo de configuración.

Paso 3: Crear una base de datos y una colección en la base de datos local de
MongoDB.

Establezca el nombre de la base de datos en "restaurants_reviews" y el nombre de


la colección en "restaurants_reviews". Puede crear una base de datos y una
colección con la extensión mongoDB de VS Code , el shell de MongoDB
(mongosh) o cualquier otra herramienta compatible con MondoDB.

Para el shell de MongoDB, estos son comandos de ejemplo para crear la base de
datos y la colección:

mongosh

> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit

En este momento, el cadena de conexión local de MongoDB es


"mongodb://[Link]:27017/", el nombre de la base de datos es
"restaurants_reviews" y el nombre de la colección es "restaurants_reviews".

4. Ejecutar la imagen localmente en un


contenedor
Con información sobre cómo conectarse a mongoDB, está listo para ejecutar el
contenedor localmente. La aplicación de ejemplo espera que la información de conexión
de MongoDB se pase en variables de entorno. Hay varias maneras de obtener las
variables de entorno que se pasan al contenedor localmente. Cada uno tiene ventajas y
desventajas en términos de seguridad. Debe evitar la comprobación de cualquier
información confidencial o dejar información confidencial en el código del contenedor.

7 Nota

Cuando se implementa en Azure, la aplicación web obtendrá información de


conexión de los valores de entorno establecidos como opciones de configuración
de App Service y ninguna de las modificaciones del escenario del entorno de
desarrollo local se aplica.

VS Code

ノ Expandir tabla

Instrucciones Instantánea

En la carpeta .vscode de la aplicación de ejemplo, el archivo [Link] 


define lo que sucede cuando se usa la extensión de Docker y se selecciona
Ejecutar o Ejecutar interactivo en el menú contextual de una etiqueta. El
archivo [Link] contiene dos plantillas para los (MongoDB local)
escenarios y (MongoDB Azure) .

Si usa una base de datos local de MongoDB:

Reemplace ambas instancias de <YOUR_IP_ADDRESS> por la dirección


IP.
Reemplace ambas instancias de por el cadena de conexión de la base
de <CONNECTION_STRING> datos de MongoDB.

Si usa una base de datos de Azure Cosmos DB para MongoDB:

Reemplace ambas instancias de <CONNECTION_STRING> por el cadena


de conexión de Azure Cosmos DB para MongoDB.

Establezca la [Link] configuración usada por las plantillas. Para


establecer [Link] , abra la paleta de comandos de VS Code
(Ctrl+Mayús+P), escriba "Preferencias: Abrir área de trabajo
Configuración", escriba "[Link]" en el cuadro Configuración de
búsqueda. Escriba "docker" (sin las comillas) para el valor de la
configuración.
Instrucciones Instantánea

7 Nota

Se supone que tanto el nombre de la base de datos como el


nombre de la colección son restaurants_reviews .

Ejecute la imagen.
En la sección IMAGES de la extensión docker, busque la imagen

compilada.
Expanda la imagen para buscar la etiqueta más reciente, haga clic
con el botón derecho y seleccione Ejecutar interactiva.
Se le pedirá que seleccione la tarea adecuada para su escenario, ya
sea "Configuración de ejecución interactiva (local de MongoDB)" o
"Configuración de ejecución interactiva (Azure de MongoDB)".

Con la ejecución interactiva, verá las instrucciones de impresión en el


código, lo que puede resultar útil para la depuración. También puede
seleccionar Ejecutar que no es interactivo y no mantiene abierta la entrada
estándar.

) Importante

Este paso produce un error si el perfil de terminal


predeterminado está establecido en (Windows) Símbolo del
sistema. Para cambiar el perfil predeterminado, abra la paleta
de comandos de VS Code (Ctrl+Mayús+P), escriba
"Terminal: Seleccionar perfil predeterminado" y, a
continuación, seleccione otro perfil en el menú desplegable;
por ejemplo, Git Bash o PowerShell.

Confirme que el contenedor se está ejecutando.


En la sección CONTENEDORES de la extensión de Docker, busque el

contenedor.
Expanda el nodo Contenedores individuales y confirme que se está
ejecutando "msdocspythoncontainerwebapp". Debería ver un
símbolo de triángulo verde junto al nombre del contenedor si se está
ejecutando.

Pruebe la aplicación web haciendo clic con el botón derecho en el nombre


del contenedor y seleccionando Abrir en el explorador.

El explorador se abrirá en el explorador predeterminado como
"[Link] para Django o "[Link] para Flask.
Instrucciones Instantánea

Detención del contenedor .


En la sección CONTENEDORES de la extensión de Docker, busque el 
contenedor en ejecución.
Haga clic con el botón derecho en el contenedor y seleccione
Detener.

 Sugerencia

También puede ejecutar el contenedor seleccionando una configuración de


ejecución o depuración. Se llama a las tareas de extensión de Docker en
[Link] al ejecutar o depurar. La tarea a la que se llama depende de la
configuración de inicio que seleccione. Para la tarea "Docker: Python
(mongoDB local)", especifique <YOUR-IP-ADDRESS>. Para la tarea "Docker:
Python (MongoDB Azure)", especifique <CONNECTION-STRING>.

También puede iniciar un contenedor desde una imagen y detenerlo con la aplicación
Docker Desktop .

Paso siguiente
Creación de una imagen de contenedor en Azure
Compilación de una aplicación web de
Python en contenedor en la nube
Artículo • 23/10/2023

Este artículo forma parte de un tutorial sobre cómo incluir e implementar una aplicación
web de Python en App de Azure Service. App Service le permite ejecutar aplicaciones
web en contenedor e implementarlas mediante funcionalidades de integración continua
e implementación continua (CI/CD) con Docker Hub, Azure Container Registry y Visual
Studio Team Services. En esta parte del tutorial, aprenderá a compilar la aplicación web
de Python en contenedores en la nube.

En la parte opcional anterior de este tutorial, se creó una imagen de contenedor y se


ejecutó localmente. En cambio, en esta parte del tutorial, compilará (en contenedores)
una aplicación web de Python en una imagen de Docker directamente en Azure
Container Registry. La creación de la imagen en Azure suele ser más rápida y sencilla
que compilar localmente y, a continuación, insertar la imagen en un registro. Además, la
compilación en la nube no requiere que Docker se ejecute en el entorno de desarrollo.

Una vez que la imagen de Docker está en Azure Container Registry, se puede
implementar en App de Azure servicio.

En el diagrama de servicio que se muestra a continuación se resaltan los componentes


descritos en este artículo.


1. Creación de una instancia de Azure Container
Registry
Si ya tiene una instancia de Azure Container Registry que puede usar, vaya al paso
siguiente. Si no lo hace, cree uno.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo que tenga la CLI de Azure instalada. Al ejecutar en Cloud
Shell, omita el paso 3.

Paso 1. Cree un grupo de recursos si es necesario con el comando az group create .


Si ya ha configurado una cuenta de Azure Cosmos DB para MongoDB en la parte 2.
Compile y pruebe el contenedor localmente de este tutorial, establezca
RESOURCE_GROUP_NAME en el nombre del grupo de recursos que usó para esa
cuenta y vaya al paso 2.

Azure CLI

RESOURCE_GROUP_NAME='msdocs-web-app-rg'
LOCATION='eastus'

az group create -n $RESOURCE_GROUP_NAME -l $LOCATION

LOCATION debe ser un valor de ubicación de Azure. Elija una ubicación cercana.
Puede enumerar los valores de ubicación de Azure con el siguiente comando: az
account list-locations -o table .

Paso 2. Cree un registro de contenedor con el comando az acr create .

Azure CLI

REGISTRY_NAME='<your Azure Container Registry name>'

az acr create -g $RESOURCE_GROUP_NAME -n $REGISTRY_NAME --sku Basic

REGISTRY_NAME deben ser únicos en Azure y contener 5-50 caracteres


alfanuméricos.

En la salida JSON del comando, busque el loginServer valor , que es el nombre


completo del Registro (todo en minúsculas) y que debe incluir el nombre del
Registro que especificó.
Paso 3. Si ejecuta la CLI de Azure localmente, inicie sesión en el registro mediante el
comando az acr login .

Azure CLI

az acr login -n $REGISTRY_NAME

El comando agrega "[Link]" al nombre para crear el nombre completo del


Registro. Si se ejecuta correctamente, verá el mensaje "Login Succeeded".

7 Nota

El az acr login comando no es necesario ni se admite en Cloud Shell.

2. Creación de una imagen en Azure Container


Registry
Puede compilar la imagen de contenedor directamente en Azure de varias maneras. En
primer lugar, puede usar Azure Cloud Shell, que compila la imagen sin usar el entorno
local. También puede compilar la imagen de contenedor en Azure desde el entorno local
mediante VS Code o la CLI de Azure. La creación de la imagen en la nube no requiere
que Docker se ejecute en el entorno local. Si lo necesita, puede seguir las instrucciones
de Clonar o descargar la aplicación de ejemplo en la parte 2 de este tutorial para
obtener la aplicación web flask o Django de ejemplo.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en una estación de trabajo


con la CLI de Azure instalada o en Azure Cloud Shell . Al ejecutar en Cloud Shell,
omita el paso 1.

Paso 1. Si ejecuta la CLI de Azure localmente, inicie sesión en el registro si aún no lo


ha hecho con el comando az acr login .

Azure CLI

az acr login -n $REGISTRY_NAME

Si va a acceder al registro desde una suscripción diferente de la que se creó, use el


--suffix modificador .
7 Nota

El az acr login comando no es necesario ni se admite en Cloud Shell.

Paso 2. Compile la imagen con el comando az acr build .

Azure CLI

az acr build -r $REGISTRY_NAME -g $RESOURCE_GROUP_NAME -t


msdocspythoncontainerwebapp:latest .

En este comando:

El punto (".") al final del comando indica la ubicación del código fuente que se
va a compilar. Si no ejecuta este comando en el directorio raíz de la aplicación
de ejemplo, especifique la ruta de acceso al código.

En lugar de una ruta de acceso al código del entorno, puede, opcionalmente,


especificar una ruta de acceso al repositorio de GitHub de ejemplo:
[Link]
app o [Link]
web-app .

Si deja fuera la -t opción (igual --image que ) , el comando pone en cola una
compilación de contexto local sin insertarla en el registro. Compilar sin
insertar puede ser útil para comprobar que la imagen se compila.

Paso 3. Confirme que se creó la imagen de contenedor con el comando az acr


repository list .

Azure CLI

az acr repository list -n $REGISTRY_NAME

Paso siguiente
Implementación de una aplicación web
Implementación de una aplicación de
Python en contenedor en App Service
Artículo • 23/10/2023

Este artículo forma parte de un tutorial sobre cómo incluir e implementar una aplicación
web de Python en App de Azure Service. App Service le permite ejecutar aplicaciones
web en contenedor e implementarlas mediante funcionalidades de integración continua
e implementación continua (CI/CD) con Docker Hub, Azure Container Registry y Visual
Studio Team Services.

En esta parte del tutorial, aprenderá a implementar la aplicación web de Python en


contenedores en App Service mediante App Service Web App for Containers . Web
App for Containers permite centrarse en la composición de los contenedores sin tener
que preocuparse de administrar y mantener un orquestador de contenedores
subyacente.

Siguiendo estos pasos, terminará con un sitio web de App Service mediante una imagen
de contenedor de Docker. App Service extrae la imagen inicial de Azure Container
Registry mediante la identidad administrada para la autenticación.

En el diagrama de servicio que se muestra a continuación se resaltan los componentes


descritos en este artículo.

1. Creación de la aplicación web


CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo que tenga la CLI de Azure instalada.

Paso 1. Obtenga el identificador de recurso del grupo que contiene Azure Container
Registry con el comando az group show .

Azure CLI

# RESOURCE_GROUP_NAME='msdocs-web-app-rg'

RESOURCE_ID=$(az group show \


--resource-group $RESOURCE_GROUP_NAME \
--query id \
--output tsv)
echo $RESOURCE_ID

En el comando anterior, RESOURCE_GROUP_NAME debe establecerse en el entorno


en el nombre del grupo de recursos que usó en la parte 3. Cree un contenedor en
Azure de este tutorial. Si no es así, quite la marca de comentario de la primera línea
y asegúrese de que se establece en el nombre que usó.

Paso 2. Cree un plan de App Service con el comando az appservice plan create.

Azure CLI

APP_SERVICE_PLAN_NAME='msdocs-web-app-plan'

az appservice plan create \


--name $APP_SERVICE_PLAN_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--sku B1 \
--is-linux

Paso 3. Cree una aplicación web con el comando az webapp create .

El siguiente comando también habilita la identidad administrada asignada por el


sistema para la aplicación web y la asigna al AcrPull rol en el recurso especificado;
en este caso, el grupo de recursos que contiene Azure Container Registry. Esto
concede a la identidad administrada asignada por el sistema privilegios de
extracción en cualquier instancia de Azure Container Registry del grupo de
recursos.

Azure CLI
APP_SERVICE_NAME='<website-name>'
# REGISTRY_NAME='<your Azure Container Registry name>'
CONTAINER_NAME=$REGISTRY_NAME'.[Link]/msdocspythoncontainerwebapp:la
test'

az webapp create \
--resource-group $RESOURCE_GROUP_NAME \
--plan $APP_SERVICE_PLAN_NAME \
--name $APP_SERVICE_NAME \
--assign-identity '[system]' \
--scope $RESOURCE_ID \
--role acrpull \
--deployment-container-image-name $CONTAINER_NAME

En el comando anterior:

APP_SERVICE_NAME debe ser único globalmente, ya que se convierte en el


nombre del sitio web en la dirección URL [Link]
name>.[Link] .

CONTAINER_NAME es de la forma
"[Link]/repo_name:tag".
REGISTRY_NAME todavía debe establecerse en el entorno en el nombre del
Registro que usó en la parte 3. Cree un contenedor en Azure de este tutorial.
Si no es así, quite la marca de comentario de la línea donde está establecida
anteriormente y asegúrese de que está establecida en el nombre que usó.

7 Nota

Es posible que vea un error similar al siguiente al ejecutar el comando:

Resultados

No credential was provided to access Azure Container Registry.


Trying to look up...
Retrieving credentials failed with an exception:'No resource or
more than one were found with name ...'

Este error se produce porque la aplicación web usa de forma predeterminada


las credenciales de administrador de Azure Container Registry para
autenticarse con el registro y las credenciales de administrador no se han
habilitado en el registro. Puede omitir este error de forma segura porque
establecerá la aplicación web para que use la identidad administrada asignada
por el sistema para la autenticación en el siguiente comando.
2. Configuración de la identidad administrada y
el webhook
CLI de Azure

Paso 1. Configure la aplicación web para usar identidades administradas para


extraer de Azure Container Registry con el comando az webapp config set .

Azure CLI

az webapp config set \


--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--generic-configurations '{"acrUseManagedIdentityCreds": true}'

Dado que ha habilitado la identidad administrada asignada por el sistema al crear


la aplicación web, será la identidad administrada que se usa para extraer de Azure
Container Registry.

Paso 2. Obtenga la credencial de ámbito de aplicación con el comando az webapp


deployment list-publishing-credentials .

Azure CLI

CREDENTIAL=$(az webapp deployment list-publishing-credentials \


--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--query publishingPassword \
--output tsv)
echo $CREDENTIAL

Paso 3. Use la credencial de ámbito de aplicación para crear un webhook con el


comando az acr webhook create .

Azure CLI

SERVICE_URI='[Link]
ME'.[Link]/api/registry/webhook'

az acr webhook create \


--name webhookforwebapp \
--registry $REGISTRY_NAME \
--scope msdocspythoncontainerwebapp:* \
--uri $SERVICE_URI \
--actions push
De forma predeterminada, este comando crea el webhook en el mismo grupo de
recursos y ubicación que el registro de contenedor de Azure especificado. Si lo
desea, puede usar los --resource-group parámetros y --location para invalidar
este comportamiento.

3. Configuración de la conexión a MongoDB


En este paso, especificará las variables de entorno necesarias para conectarse a
MongoDB.

Si necesita crear una instancia de Azure Cosmos DB para MongoDB, se recomienda


seguir los pasos para configurar Cosmos DB para MangoDB en la parte 2. Compile y
pruebe el contenedor localmente de este tutorial. Cuando haya terminado, debe tener
una instancia de Azure Cosmos DB para MongoDB cadena de conexión del formulario
mongodb://<server-name>:<password>@<server-name>.[Link]/?

ssl=true&<other-parameters> .

Necesitará la información cadena de conexión de MongoDB para seguir los pasos que
se indican a continuación.

CLI de Azure

Para establecer variables de entorno en App Service, cree valores de aplicación


mediante el comando az webapp config appsettings set siguiente.

Azure CLI

MONGO_CONNECTION_STRING='your Mongo DB connection string in single


quotes'
MONGO_DB_NAME=restaurants_reviews
MONGO_COLLECTION_NAME=restaurants_reviews

az webapp config appsettings set \


--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings CONNECTION_STRING=$MONGO_CONNECTION_STRING \
DB_NAME=$MONGO_DB_NAME \
COLLECTION_NAME=$MONGO_COLLECTION_NAME

CONNECTION_STRING: un cadena de conexión que comienza por


"mongodb://".
DB_NAME: use "restaurants_reviews".
COLLECTION_NAME: use "restaurants_reviews".

4. Examinar el sitio
Para comprobar que el sitio se está ejecutando, vaya a [Link]
name>.[Link] ; donde el nombre del sitio web es el nombre del servicio de

aplicaciones. Si se ejecuta correctamente, debería ver la aplicación de ejemplo de


revisión del restaurante. El sitio puede tardar unos instantes en iniciarse por primera vez.
Cuando aparezca el sitio, agregue un restaurante y una revisión para ese restaurante
para confirmar que la aplicación de ejemplo funciona.

CLI de Azure

Si ejecuta la CLI de Azure localmente, puede usar el comando az webapp browse


para ir al sitio web. Si usa Cloud Shell, abra una ventana del explorador y vaya a la
dirección URL del sitio web.

Azure CLI

az webapp browse --name $APP_SERVICE_NAME --resource-group


$RESOURCE_GROUP_NAME

7 Nota

El az webapp browse comando no se admite en Cloud Shell. Abra una ventana


del explorador y vaya a la dirección URL del sitio web en su lugar.

5. Solución de problemas de implementación


Si no ve la aplicación de ejemplo, pruebe los pasos siguientes.

Con la implementación de contenedores y App Service, compruebe siempre la


página Registros del Centro / de implementación en Azure Portal. Confirme que el
contenedor se ha extraído y se está ejecutando. La extracción inicial y la ejecución
del contenedor pueden tardar unos instantes.
Intente reiniciar App Service y compruebe si se resuelve el problema.
Si hay errores de programación, estos errores se mostrarán en los registros de la
aplicación. En la página de Azure Portal de App Service, seleccione Diagnosticar y
resolver problemas/Registros de aplicaciones.
La aplicación de ejemplo se basa en una conexión a MongoDB. Confirme que App
Service tiene la configuración de la aplicación con la información de conexión
correcta.
Confirme que la identidad administrada está habilitada para App Service y se usa
en el Centro de implementación. En la página de Azure Portal de App Service, vaya
al recurso del Centro de implementación de App Service y confirme que la
autenticación está establecida en Identidad administrada.
Compruebe que el webhook está definido en Azure Container Registry. El
webhook permite que App Service extraiga la imagen del contenedor. En concreto,
compruebe que el URI del servicio termina con "/api/registry/webhook".
Las distintas sku de Azure Container Registry tienen características diferentes,
incluido el número de webhooks. Si va a reutilizar un registro existente, puede ver
el mensaje: "Cuota superada para webhooks de tipo de recurso para la SKU del
Registro Básico. Obtenga más información sobre las diferentes cuotas de SKU y el
proceso de actualización: [Link] . Si ve este mensaje, use un
nuevo registro o reduzca el número de webhooks del Registro en uso.

Paso siguiente
Limpieza de recursos
Limpieza del tutorial en contenedores y
pasos siguientes
Artículo • 23/10/2023

Este artículo forma parte de un tutorial sobre cómo incluir e implementar una aplicación
web de Python en App de Azure Service. En este artículo, limpiará los recursos que se
usan en Azure para que no incurra en otros cargos y ayude a mantener la suscripción de
Azure desordenada. Puede dejar los recursos de Azure en ejecución si quiere usarlos
para un trabajo de desarrollo adicional.

1. Limpieza de recursos
En este tutorial, todos los recursos de Azure se crearon en el mismo grupo de recursos.
Al quitar el grupo de recursos, se quitan todos los recursos del grupo de recursos y se
trata de la manera más rápida de quitar todos los recursos de Azure usados para la
aplicación.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo que tenga la CLI de Azure instalada.

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

bash

Azure CLI

az group delete \
--name $RESOURCE_GROUP_NAME

Opcionalmente, puede agregar el argumento --no-wait para permitir que el


comando devuelva antes de que se complete la operación.

2. Pasos siguientes
Después de completar este tutorial, estos son algunos pasos siguientes que puede
seguir para crear lo que ha aprendido y mover el código del tutorial y la
implementación más cerca de la producción lista:

Implementación de una aplicación web desde una instancia de Azure Container


Registry con replicación geográfica

Revisión de la seguridad en Azure Cosmos DB

Asignación de un nombre DNS personalizado a la aplicación, consulte Tutorial:


Asignación de un nombre DNS personalizado a la aplicación.

Supervisión de App Service para ver la disponibilidad, el rendimiento y la


operación, consulte Supervisión de App Service y Configuración de Azure Monitor
para la aplicación python.

Habilite la implementación continua en App de Azure Service, consulte


Implementación continua en App de Azure Service, Uso de CI/CD para
implementar una aplicación web de Python en App de Azure Service en Linux y
Diseño de una canalización de CI/CD mediante Azure DevOps.

Cree una infraestructura reutilizable como código con la CLI para desarrolladores
de Azure (azd).

3. Módulos de Learn relacionados


A continuación se muestran algunos módulos de Learn que exploran las tecnologías y
los temas tratados en este tutorial:

Introducción a Python

Introducción a Django

Creación de vistas y plantillas en Django

Creación de sitios web controlados por datos mediante el marco de Python


Django

Implementación de una aplicación de Django en Azure mediante PostgreSQL

Introducción a la API de MongoDB en Azure Cosmos DB

Migración de bases de datos de MongoDB locales a Azure Cosmos DB

Compilación de una aplicación web en contenedores con Docker


Implementación de una aplicación web
de Flask o FastAPI en Azure Container
Apps
Artículo • 04/12/2023

En este tutorial se muestra cómo incluir en contenedores una aplicación web de Python
Flask o FastAPI e implementarla en Azure Container Apps. Azure Container Apps
usa la tecnología de contenedor de Docker para hospedar imágenes integradas e
imágenes personalizadas. Para más información sobre el uso de contenedores en Azure,
consulte Comparación de las opciones de contenedor de Azure.

En este tutorial, usará la CLI de Docker y la CLI de Azure para crear una imagen de
Docker e implementarla en Azure Container Apps. También puede implementar con
Visual Studio Code y la extensión de Herramientas de Azure.

Requisitos previos
Para completar este tutorial, necesita:

Una cuenta de Azure donde puede implementar una aplicación web en Azure
Container Apps. (An El área de trabajo de Azure Container Registry y Log
Analytics se crean automáticamente en el proceso).

CLI de Azure, Docker y la CLI de Docker instaladas en el entorno local.

Obtener el código de ejemplo


En el entorno local, obtenga el código.

Flask

Bash

git clone [Link]


[Link]

Adición de archivos Dockerfile y .dockerignore


Agregue un Dockerfile para indicar a Docker cómo compilar la imagen. Dockerfile
especifica el uso de Gunicorn , un servidor web de nivel de producción que reenvía las
solicitudes web a los marcos flask y FastAPI. Los comandos ENTRYPOINT y CMD indican
a Gunicorn que controle las solicitudes del objeto de aplicación.

Flask

Dockerfile

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY [Link] .

RUN pip3 install -r [Link]

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 se usa para el puerto de contenedor (interno) en este ejemplo, pero puede

usar cualquier puerto libre.

Compruebe el archivo [Link] para asegurarse de que contiene gunicorn .

Python

Flask==2.0.2
gunicorn

Agregue un archivo .dockerignore para excluir archivos innecesarios de la imagen.

dockerignore

.git*
**/*.pyc
.venv/

Configuración de gunicorn
Gunicorn se puede configurar con un archivo [Link] . Cuando el archivo
[Link] se encuentra en el mismo directorio donde gunicorn se ejecuta, no es
necesario especificar su ubicación en ni en la ENTRYPOINT CMD instrucción del Dockerfile.
Para obtener más información sobre cómo especificar el archivo de configuración,
consulte Configuración de Gunicorn .

En este tutorial, el archivo de configuración sugerido configura GUnicorn para aumentar


su número de trabajos en función del número de núcleos de CPU disponibles. Para
obtener más información sobre [Link] configuración de archivos, consulte
Configuración de Gunicorn.

Flask

text

# Gunicorn configuration file


import multiprocessing

max_requests = 1000
max_requests_jitter = 50

log_file = "-"

bind = "[Link]:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

Compilación y ejecución de la imagen


localmente
Compile la imagen localmente.

Flask

Bash

docker build --tag flask-demo .

Ejecute la imagen localmente en un contenedor de Docker.


Flask

Bash

docker run --detach --publish 5000:50505 flask-demo

Abra la dirección URL en el [Link] explorador para ver la aplicación


web que se ejecuta localmente.

La --detach opción ejecuta el contenedor en segundo plano. La --publish opción


asigna el puerto de contenedor a un puerto en el host. El puerto host (externo) es
primero en el par y el puerto de contenedor (interno) es el segundo. Para más
información, consulte Referencia de ejecución de Docker .

Implementación en una aplicación web en


Azure
Para implementar la imagen de Docker en Azure Container Apps, use el comando az
containerapp up . (Se muestran los siguientes comandos para el shell de Bash. Cambie
el carácter de continuación ( \ ) según corresponda para otros shells.

Flask

Azure CLI

az containerapp up \
--resource-group web-flask-aca-rg --name web-aca-app \
--ingress external --target-port 50505 --source .

Cuando se complete la implementación, tendrá un grupo de recursos con los siguientes


recursos dentro de ella:

Instancia de Azure Container Registry


Un entorno de Container Apps
Una aplicación contenedora que ejecuta la imagen de la aplicación web
Un área de trabajo de Log Analytics

La dirección URL de la aplicación implementada se encuentra en la salida del az


containerapp up comando. Abra la dirección URL en el explorador para ver la aplicación

web que se ejecuta en Azure. El formato de la dirección URL será similar al siguiente
[Link] , donde

y <generated-text> <location-info> son únicos para la implementación.

Realización de actualizaciones y
reimplementación
Después de realizar actualizaciones de código, puede volver a ejecutar el comando
anterior az containerapp up , que vuelve a generar la imagen y la vuelve a implementar
en Azure Container Apps. La ejecución del comando vuelve a tener en cuenta que el
grupo de recursos y la aplicación ya existen y actualiza solo la aplicación contenedora.

En escenarios de actualización más complejos, puede volver a implementar con los


comandos az acr build y az containerapp update juntos para actualizar la aplicación
contenedora.

Limpieza
Todos los recursos de Azure creados en este tutorial se encuentran en el mismo grupo
de recursos. Al quitar el grupo de recursos, se quitan todos los recursos del grupo de
recursos y se trata de la manera más rápida de quitar todos los recursos de Azure
usados para la aplicación.

Para quitar recursos, use el comando az group delete .

Flask

Azure CLI

az group delete --name web-flask-aca-rg

También puede quitar el grupo en Azure Portal o en Visual Studio Code y la


extensión de Herramientas de Azure.

Pasos siguientes
Para obtener más información, consulte los siguientes recursos:

Implementación de Azure Container Apps con el comando az containerapp up


Inicio rápido: Implementación en Azure Container Apps mediante Visual Studio
Code
Extracción de imágenes de Azure Container Apps con identidad administrada
Información general: Implementación
de una aplicación web de Python en
Azure Container Apps
Artículo • 02/02/2024

En este tutorial se muestra cómo incluir una aplicación web de Python en contenedores
e implementarla en Azure Container Apps. Una aplicación web de ejemplo se en
contenedores y la imagen de Docker almacenada en Azure Container Registry. Azure
Container Apps está configurado para extraer la imagen de Docker de Container
Registry y crear un contenedor. La aplicación de ejemplo se conecta a una instancia de
Azure Database for PostgreSQL para demostrar la comunicación entre Container Apps y
otros recursos de Azure.

Hay varias opciones para compilar e implementar aplicaciones web de Python nativas y
en contenedores en la nube en Azure. En este tutorial se describe Azure Container Apps.
Las aplicaciones de contenedor son adecuadas para ejecutar contenedores de uso
general, especialmente para aplicaciones que abarcan muchos microservicios
implementados en contenedores. En este tutorial, creará un contenedor. Para
implementar una aplicación web de Python como contenedor en App de Azure Service,
consulte Aplicación web de Python en contenedor en App Service.

En este tutorial, aprenderás lo siguiente:

Cree una imagen de Docker a partir de una aplicación web de Python y


almacene la imagen en Azure Container Registry.
Configure Azure Container Apps para hospedar la imagen de Docker.
Configure una acción de GitHub que actualice el contenedor con una nueva
imagen de Docker desencadenada por cambios en el repositorio de GitHub. Este
último paso es opcional.

Después de este tutorial, se configurará para la integración continua (CI) y la


implementación continua (CD) de una aplicación web de Python en Azure.

Introducción al servicio
El diagrama de servicio que admite este tutorial muestra cómo se usan en el tutorial el
entorno local, los repositorios de GitHub y los servicios de Azure.

Los componentes que admiten este tutorial y se muestran en el diagrama anterior son:

Azure Container Apps


Azure Container Apps permite ejecutar microservicios y aplicaciones
contenedorizadas en una plataforma sin servidor. Una plataforma sin servidor
significa que disfruta de las ventajas de ejecutar contenedores con una
configuración mínima. Con Azure Container Apps, las aplicaciones se pueden
escalar dinámicamente en función de características como el tráfico HTTP, el
procesamiento controlado por eventos o la carga de cpu o memoria.
Container Apps extrae imágenes de Docker de Azure Container Registry. Los
cambios en las imágenes de contenedor desencadenan una actualización en el
contenedor implementado. También puede configurar Acciones de GitHub para
desencadenar actualizaciones.

Azure Container Registry


Azure Container Registry permite trabajar con imágenes de Docker en Azure.
Dado que Container Registry está cerca de las implementaciones de Azure,
tiene control sobre el acceso, lo que permite usar los grupos y permisos de
Microsoft Entra para controlar el acceso a las imágenes de Docker.
En este tutorial, el origen del registro es Azure Container Registry, pero también
puede usar Docker Hub o un registro privado con modificaciones menores.

Azure Database para PostgreSQL


El código de ejemplo almacena los datos de la aplicación en una base de datos
postgreSQL.
La aplicación contenedora se conecta a PostgreSQL a través de variables de
entorno configuradas explícitamente o con Azure Service Conectar or.
GitHub
El código de ejemplo de este tutorial se encuentra en un repositorio de GitHub
que bifurcará y clonará localmente. Para configurar un flujo de trabajo de CI/CD
con Acciones de GitHub, necesitará una cuenta de GitHub.
Todavía puede seguir este tutorial sin una cuenta de GitHub, trabajando
localmente o en Azure Cloud Shell para compilar la imagen de contenedor
desde el repositorio de código de ejemplo.

Revisiones y CI/CD
Para realizar cambios en el código e insertarlos en un contenedor, cree una nueva
imagen de Docker con el cambio. A continuación, inserte la imagen en Container
Registry y cree una nueva revisión de la aplicación contenedora.

Para automatizar este proceso, en un paso opcional del tutorial se muestra cómo crear
una canalización de integración continua y entrega continua (CI/CD) con Acciones de
GitHub. La canalización compila e implementa automáticamente el código en la
aplicación contenedora cada vez que se inserta una nueva confirmación en el
repositorio de GitHub.

Autenticación y seguridad
En este tutorial, creará una imagen de contenedor de Docker directamente en Azure e la
implementará en Azure Container Apps. Las aplicaciones de contenedor se ejecutan en
el contexto de un entorno, que es compatible con una red virtual (VNet) de Azure. Las
redes virtuales son un bloque de creación fundamental para la red privada en Azure.
Container Apps permite exponer la aplicación contenedora a la web pública habilitando
la entrada.

Para configurar la integración continua y la entrega continua (CI/CD), autorizará Azure


Container Apps como una aplicación de OAuth para su cuenta de GitHub. Como
aplicación de OAuth, Container Apps escribe un archivo de flujo de trabajo de Acciones
de GitHub en el repositorio con información sobre los recursos y trabajos de Azure para
actualizarlos. El flujo de trabajo actualiza los recursos de Azure mediante credenciales de
una entidad de servicio de Microsoft Entra (o existente) con acceso basado en roles para
Container Apps y nombre de usuario y contraseña para Azure Container Registry. Las
credenciales se almacenan de forma segura en el repositorio de GitHub.

Por último, la aplicación web de ejemplo del tutorial almacena datos en una base de
datos postgreSQL. El código de ejemplo se conecta a PostgreSQL a través de un cadena
de conexión. Durante la configuración de la aplicación contenedora, el tutorial le guía a
través de la configuración de variables de entorno que contienen información de
conexión. También puede usar un Conectar or de servicio de Azure para lograr lo
mismo.

Requisitos previos
Para completar este tutorial, necesita:

Una cuenta de Azure donde puede crear:


Azure Container Registry
Entorno de Azure Container Apps
Azure Database for PostgreSQL

Visual Studio Code o la CLI de Azure, en función de la herramienta que usará


Para Visual Studio Code, necesitará la extensión Container Apps.
También puede usar la CLI de Azure a través de Azure Cloud Shell.

Paquetes de Python:
pyscopg2-binary para conectarse a PostgreSQL.
Marco web de Flask o Django .

Aplicación de ejemplo
La aplicación de ejemplo de Python es una aplicación de revisión de restaurantes que
guarda el restaurante y revisa los datos en PostgreSQL. Al final del tutorial, tendrá una
aplicación de revisión de restaurante implementada y en ejecución en Azure Container
Apps que tiene un aspecto similar a la captura de pantalla siguiente.


Paso siguiente
Compilación e implementación en Azure Container Apps
Compilación e implementación de una
aplicación web de Python con Azure
Container Apps y PostgreSQL
Artículo • 06/10/2024

Este artículo forma parte de un tutorial sobre cómo crear e implementar una aplicación
web Python en Azure Container Apps. Container Apps permite implementar aplicaciones
contenerizadoras sin necesidad de administrar una infraestructura compleja.

En esta parte del tutorial, aprenderá a contenedorizar e implementar una aplicación web
de ejemplo de Python (Django o Flask). En concreto, se crea la imagen del contenedor
en la nube y se implementa en Azure Container Apps. Se definen variables de entorno
que permiten a la aplicación de contenedor conectarse a una instancia de Azure
Database for PostgreSQL - Flexible Server, donde la aplicación de ejemplo almacena los
datos.

Este diagrama de servicios resalta los componentes cubiertos en este artículo: creación e
implementación de una imagen de contenedor.

Obtención de la aplicación de ejemplo


Bifurcar y clonar el código de ejemplo a su entorno de desarrollador.

Paso 1. Vaya al repositorio GitHub de la aplicación de ejemplo (Django o Flask )y


seleccione Bifurcar.
Siga los pasos para bifurcar el directorio a su cuenta de GitHub. También puede
descargar el repositorio de código directamente a su equipo local sin bifurcar o una
cuenta de GitHub. Sin embargo, no podrá configurar CI/CD como se discute más
adelante en el tutorial.

Paso 2. Use el comando git clone para clonar el repositorio bifurcado en la carpeta
python-container:

Consola

# Django
git clone [Link]
[Link] python-container

# Flask
# git clone [Link]
[Link] python-container

Paso 3. Cambiar directorio.

Consola

cd python-container

Construir una imagen de contenedor a partir


del código de la aplicación web
Después de seguir estos pasos, tendrá un Azure Container Registry que contiene una
imagen de contenedor Docker creada a partir del código de ejemplo.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo que tenga la CLI de Azure instalada.

Paso 1. Para crear un grupo de recursos, use el comando az group create.


Azure CLI

az group create \
--name pythoncontainer-rg \
--location <location>
<location> es uno de los valores de Azure location Name de la salida del comando
az account list-locations -o table .

Paso 2. Cree un registro de contenedores con el comando az acr create.


Azure CLI

az acr create \
--resource-group pythoncontainer-rg \
--name <registry-name> \
--sku Basic \
--admin-enabled

<registry-name> debe ser único dentro de Azure y contener entre 5 y 50 caracteres


alfanuméricos.

Puede ver las credenciales creadas para admin con:


Azure CLI

az acr credential show \


--name <registry-name> \
--resource-group pythoncontainer-rg

Paso 3. Inicie sesión en el registro con el comando az acr login.


Azure CLI

az acr login --name <registry-name>

El comando añade "[Link]" al nombre para crear el nombre de registro


completo. Si tiene éxito, verá el mensaje "Inicio de sesión realizado correctamente".
Si está accediendo al registro desde una suscripción diferente de aquella en la que
se creó el registro, use el conmutador --suffix .

Paso 4. Compile la imagen con el comando az acr build.


Azure CLI

az acr build \
--registry <registry-name> \
--resource-group pythoncontainer-rg \
--image pythoncontainer:latest .

Observe lo siguiente:
El punto (".") al final del comando indica la ubicación del código fuente que se
va a compilar. Si no está ejecutando este comando en el directorio raíz de la
aplicación de ejemplo, especifique la ruta al código.

Si ejecuta el comando en Azure Cloud Shell, use primero git clone para
extraer el repositorio en el entorno de Cloud Shell y cambie el directorio a la
raíz del proyecto para que el punto (".") se interprete correctamente.

Si omite la opción -t (igual que --image ), el comando pone en cola una


compilación de contexto local sin enviarla al registro. Compilar sin enviar
puede ser útil para comprobar que la imagen se compila.

Paso 5. Confirme que la imagen del contenedor se compiló con el comando az acr
repository list.
Azure CLI

az acr repository list --name <registry-name>

Crear una instancia de servidor flexible de


PostgreSQL.
La aplicación de ejemplo (Django o Flask ) almacena los datos de revisión del
restaurante en una base de datos PostgreSQL. En estos pasos, se crea el servidor que
contendrá la base de datos.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo que tenga la CLI de Azure instalada.

Paso 1. Use el comando az postgres flexible-server create para crear el servidor


PostgreSQL en Azure. No es raro que este comando se ejecute durante unos
minutos para completarse.

Azure CLI

az postgres flexible-server create \


--resource-group pythoncontainer-rg \
--name <postgres-server-name> \
--location <location> \
--admin-user <admin-username> \
--admin-password <admin-password> \
--sku-name Standard_D2s_v3 \
--public-access [Link]

"pythoncontainer-rg" → El nombre del grupo de recursos usado en este


tutorial. Si ha usado un nombre diferente, cambie este valor.

<postgres-server-name> → El nombre del servidor de base de datos


PostgreSQL. Este nombre debe ser único en Azure. El punto final del servidor
es "[Link] Los
caracteres permitidos son "A"-"Z", "0"-"9" y "-".

<location> → Use la misma ubicación que se usa para la aplicación web.


<location> es uno de los valores de Azure location Name de la salida del
comando az account list-locations -o table .

<admin-username> → Nombre de usuario de la cuenta de administrador. No


puede ser "azure_superuser", "admin", "administrator", "root", "guest", o
"public". Use "demoadmin" para este tutorial.

<admin-password> Contraseña del usuario de administrador. Debe contener


entre 8 y 128 caracteres de tres de las siguientes categorías: Letras del
alfabeto inglés mayúsculas y minúsculas, números y caracteres no
alfanuméricos.

) Importante

Cuando cree nombres de usuario o contraseñas no use el carácter "$".


Más adelante creará variables de entorno con estos valores, donde el
carácter "$" tiene un significado especial dentro del contenedor de Linux
que se usa para ejecutar aplicaciones de Python.

<sku-name> → El nombre del nivel de precios y la configuración de

computación, por ejemplo "Standard_D2s_v3". Para más información, consulte


los precios de Azure Database for PostgreSQL . Para enumerar las SKU
disponibles, use az postgres flexible-server list-skus --location
<location> .

<public-access> → Use "[Link]", que permite el acceso público al servidor

desde cualquier servicio Azure, como Container Apps.

7 Nota
Si planea trabajar el servidor PostgreSQL desde su estación de trabajo local
con herramientas que no sean Azure CLI, necesitará añadir una regla de
firewall con el comando az postgres flexible-server firewall-rule create.

Crear una base de datos en el servidor


En este punto, tiene un servidor PostgreSQL. En esta sección, se crea una base de datos
en el servidor.

psql

Puede usar el terminal interactivo de PostgreSQL psql en su entorno local, o en


Azure Cloud Shell , que también es accesible en el portal de Azure . Cuando se
trabaja con psql, a menudo es más fácil usar el Cloud Shell porque todas las
dependencias se incluyen para usted en el shell.

Paso 1. Conexión a la base de datos con psql.

Bash

psql --host=<postgres-server-name>.[Link] \
--port=5432 \
--username=demoadmin@<postgres-server-name> \
--dbname=postgres

Donde <postgres-server-name> es el nombre del servidor postgreSQL. El comando


le pedirá la contraseña de administrador.

Si tiene problemas para conectarse, reinicie la base de datos e inténtelo de nuevo.


Si se conecta desde su entorno local, su dirección IP debe añadirse a la lista de
reglas del cortafuegos para el servicio de base de datos.

Paso 2. Cree la base de datos.

En el símbolo del sistema postgres=> , escriba:

SQL

CREATE DATABASE restaurants_reviews;

El punto y coma (";") al final del comando es necesario. Para comprobar que la base
de datos se ha creado correctamente, use el comando \c restaurants_reviews .
Escriba \? para mostrar ayuda o \q para salir.

También puede conectarse al servidor flexible Azure PostgreSQL y crear una base de
datos usando Azure Data Studio o cualquier otro IDE compatible con PostgreSQL.

Implementación de la aplicación web en


Container Apps
Las aplicaciones en contenedores se despliegan en entornos de Container Apps, que
actúan como un límite seguro. En los pasos siguientes, creará el entorno, un contenedor
dentro del entorno y configurará el contenedor para que el sitio web sea visible
externamente.

CLI de Azure

Paso 1. Inicie sesión en Azure y autentifíquese, si es necesario.


Azure CLI

az login

Paso 2. Instale o actualice la extensión para Azure Container Apps con el comando
az extension add.
Azure CLI

az extension add --name containerapp --upgrade

Paso 3. Cree un entorno de Container Apps con el comando az containerapp env


create.
Azure CLI

az containerapp env create \


--name python-container-env \
--resource-group pythoncontainer-rg \
--location <location>

<location> es uno de los valores de Azure location Name de la salida del comando
az account list-locations -o table .

Paso 4. Obtenga las credenciales de inicio de sesión para Azure Container Registry.
Azure CLI

az acr credential show -n <registry-name>

Use el nombre de usuario y una de las contraseñas devueltas por el comando.

Paso 5. Crea una aplicación contenedora en el entorno con el comando az


containerapp create.
Azure CLI

az containerapp create \
--name python-container-app \
--resource-group pythoncontainer-rg \
--image <registry-name>.[Link]/pythoncontainer:latest \
--environment python-container-env \
--ingress external \
--target-port 8000 \
--registry-server <registry-name>.[Link] \
--registry-username <registry-username> \
--registry-password <registry-password> \
--env-vars <env-variable-string>
--query [Link]

<env-variable-string> es una cadena compuesta por valores separados por


espacios en el formato key="value" con los siguientes valores.
AZURE_POSTGRESQL_HOST=<postgres-server-
name>.[Link]
AZURE_POSTGRESQL_DATABASE=restaurants_reviews
AZURE_POSTGRESQL_USERNAME=demoadmin
AZURE_POSTGRESQL_PASSWORD=<db-password>
RUNNING_IN_PRODUCTION=1
AZURE_SECRET_KEY=<YOUR-SECRET-KEY>

Genere el valor AZURE_SECRET_KEY usando la salida de python -c 'import secrets;


print(secrets.token_hex())' .

Por ejemplo: --env-vars AZURE_POSTGRESQL_HOST="my-postgres-


[Link]"
AZURE_POSTGRESQL_DATABASE="restaurants_reviews"

AZURE_POSTGRESQL_USERNAME="demoadmin" AZURE_POSTGRESQL_PASSWORD="somepassword"
RUNNING_IN_PRODUCTION="1" AZURE_SECRET_KEY=asdfasdfasdf .
Paso 7. Solo para Django, migre y cree esquema de base de datos. (En la app de
ejemplo Flask, se hace automáticamente, y puede saltarse este paso).

Conéctese con el comando az containerapp exec:


Azure CLI

az containerapp exec \
--name python-container-app \
--resource-group pythoncontainer-rg

A continuación, en la línea de comandos del shell, escriba python [Link]


migrate .

No es necesario migrar para las revisiones del contenedor.

Paso 8. Pruebe el sitio web.

El comando az containerapp create que ha introducido anteriormente genera una


URL de aplicación que puede usar para navegar hasta la aplicación. La URL termina
en "[Link]". Navegue hasta la URL en un navegador. También puede
usar el comando az containerapp browse.

A continuación se muestra un ejemplo del sitio web de muestra después de añadir un


restaurante y dos reseñas.

Solución de problemas de implementación


Ha olvidado la Url de la aplicación para acceder al sitio web.
En el portal Azure, vaya a la página Información General de la Container App y
busque la URL de la aplicación.
En VS Code, vaya a la vista Azure (Ctrl+Shift+A) y expanda la suscripción en la
que está trabajando. Expanda el nodo Container Apps, luego expanda el
entorno administrado y haga clic con el botón derecho en python-container-
app y selecciona Navegar. Se abrirá el explorador con la URL de la aplicación.
Con la CLI de Azure use el comando az containerapp show -g pythoncontainer-
rg -n python-container-app --query [Link] .

En VS Code, la tarea Compilar imagen in Azure devuelve un error.


Si ve el mensaje "Error: no se pudo descargar el contexto. Compruebe si la
dirección URL es incorrecta" en la ventana de Salida de VS Code, entonces
actualice el registro en la extensión Docker. Para actualizar, seleccione la
extensión Docker, vaya a la sección Registros, busque el registro y selecciónelo.
Si vuelve a ejecutar la tarea Compilar imagen en Azure, compruebe si existe el
registro de una ejecución anterior y, si es así, úselo.

En el portal Azure durante la creación de una Container App, aparece un error de


acceso que contiene "No se puede acceder a ACR '<name>.[Link]'".
Este error se produce cuando las credenciales de administrador en el ACR están
deshabilitadas. Para comprobar el estado del administrador en el portal, vaya a
su Azure Container Registry, seleccione el recurso Claves de acceso y asegúrese
de que el usuario administrador está habilitado.

Su imagen de contenedor no aparece en Azure Container Registry.


Compruebe la salida del comando CLI de Azure o salida de VS Code y busque
mensajes que se ha realizado correctamente.
Compruebe que el nombre del registro se ha especificado correctamente en el
comando de compilación con la CLI de Azure o en los mensajes de tarea de VS
Code.
Asegúrese de que sus credenciales no hayan caducado. Por ejemplo, en VS
Code, busque el registro de destino en la extensión de Docker y actualícelo. En
el CLI de Azure, ejecute az login .

El sitio web devuelve "Solicitud incorrecta (400)".


Compruebe las variables de entorno PostgreSQL pasadas al contenedor. El error
400 a menudo indica que el código Python no puede conectarse a la instancia
PostgreSQL.
El código de ejemplo usado en este tutorial comprueba la existencia de la
variable de entorno del contenedor RUNNING_IN_PRODUCTION , que se puede
establecer a cualquier valor como "1".

El sitio web devuelve "No encontrado (404)".


Compruebe la Url de la aplicación en la página de Información general del
contenedor. Si la Url de la aplicación contiene la palabra "internal", entonces la
entrada no está configurada correctamente.
Compruebe la entrada del contenedor. Por ejemplo, en el portal Azure, vaya al
recurso Entrada del contenedor y asegúrese de que la Entrada HTTP está
activado y que la opción Aceptar tráfico desde cualquier lugar está
seleccionada.

El sitio web no se inicia, aparece "tiempo de espera de transmisión" o no se


devuelve nada.
Compruebe los registros.
En el portal de Azure, vaya al recurso de gestión de aprovisionamiento de la
aplicación de contenedor y compruebe el Estado de aprovisionamiento del
contenedor.
Si es "Aprovisionamiento", espere a que se complete el
aprovisionamiento.
Si es "Fallido", seleccione la revisión y vea los registros de la consola. Elija
el orden de las columnas para mostrar "Hora generada", "Stream_s", and
"Log_s". Ordene los registros primero por los más recientes y busque los
mensajes stderr y stdout de Python en la columna "Stream_s". La salida
'print' de Python serán mensajes stdout.
Con la CLI de Azure, usE el comando az containerapp logs show.
Si usa el framework Django, comprueba si las tablas restaurants_reviews existen
en la base de datos. Si no es así, use una consola para acceder al contenedor y
ejecute python [Link] migrate .

Paso siguiente
Configuración de la implementación continua

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Configuración de la implementación
continua para una aplicación web de
Python en Azure Container Apps
Artículo • 02/02/2024

Este artículo forma parte de un tutorial sobre cómo incluir e implementar una aplicación
web de Python en Azure Container Apps. Container Apps permite implementar
aplicaciones en contenedor sin administrar infraestructura compleja.

En esta parte del tutorial, aprenderá a configurar la implementación o entrega continuas


(CD) para la aplicación contenedora. CD forma parte de la práctica de DevOps de
integración continua/entrega continua (CI/CD), que es la automatización del flujo de
trabajo de desarrollo de aplicaciones. En concreto, se usan Acciones de GitHub para la
implementación continua.

En este diagrama de servicio se resaltan los componentes descritos en este artículo:


configuración de CI/CD.

Requisitos previos
Para configurar la implementación continua, necesita:

Los recursos y su configuración creados en el artículo anterior de esta serie de


tutoriales, que incluye Azure Container Registry y una aplicación de contenedor en
Azure Container Apps.
Una cuenta de GitHub a la que bifurca el código de ejemplo (Django o Flask )y
puede conectarse desde Azure Container Apps. (Si descargó el código de ejemplo
en lugar de bifurcar, asegúrese de insertar el repositorio local en la cuenta de
GitHub).

Opcionalmente, Git instalado en el entorno de desarrollo para realizar cambios


de código e insertar en el repositorio en GitHub. Como alternativa, puede realizar
los cambios directamente en GitHub.

Configuración de CD para un contenedor


En un artículo anterior de este tutorial, creó y configuró una aplicación contenedora en
Azure Container Apps. Parte de la configuración estaba extrayendo una imagen de
Docker de una instancia de Azure Container Registry. La imagen de contenedor se
extrae del registro al crear una revisión de contenedor, como cuando se configura por
primera vez la aplicación de contenedor.

En esta sección, configurará la implementación continua mediante un flujo de trabajo de


Acciones de GitHub. Con la implementación continua, se crea una nueva imagen de
Docker y una revisión de contenedor en función de un desencadenador. El
desencadenador de este tutorial es cualquier cambio en la rama principal del
repositorio, como con una solicitud de incorporación de cambios (PR). Cuando se
desencadena, el flujo de trabajo crea una nueva imagen de Docker, la inserta en Azure
Container Registry y actualiza la aplicación contenedora a una nueva revisión mediante
la nueva imagen.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo que tenga la CLI de Azure instalada.

Si ejecuta comandos en un shell de Git Bash en un equipo Windows, escriba el


siguiente comando antes de continuar:

Bash

export MSYS_NO_PATHCONV=1

Paso 1. Cree una entidad de servicio con el comando az ad sp create-for-rbac .


Azure CLI
az ad sp create-for-rbac \
--name <app-name> \
--role Contributor \
--scopes "/subscriptions/<subscription-ID>/resourceGroups/<resource-
group-name>"

Donde:
<app-name> es un nombre para mostrar opcional para la entidad de servicio.
Si deja desactivada la --name opción, se genera un GUID como nombre para
mostrar.
<subscription-ID> es el GUID que identifica de forma única la suscripción en
Azure. Si no conoce el identificador de suscripción, puede ejecutar el
comando az account show y copiarlo de la id propiedad en la salida.
<resource-group-name> es el nombre de un grupo de recursos que contiene
el contenedor de Azure Container Apps. El control de acceso basado en rol
(RBAC) está en el nivel de grupo de recursos. Si ha seguido los pasos del
artículo anterior de este tutorial, el nombre del grupo de recursos es
pythoncontainer-rg .

Guarde la salida de este comando para el paso siguiente, en particular, el


identificador de cliente ( appId propiedad), el secreto de cliente ( password
propiedad) y el identificador de inquilino ( tenant propiedad).

Paso 2. Configure Acciones de GitHub con el comando az containerapp github-


action add .
Azure CLI

az containerapp github-action add \


--resource-group <resource-group-name> \
--name python-container-app \
--repo-url <[Link] \
--branch main \
--registry-url <registry-name>.[Link] \
--service-principal-client-id <client-id> \
--service-principal-tenant-id <tenant-id> \
--service-principal-client-secret <client-secret> \
--login-with-github

Donde:
<resource-group-name> es el nombre del grupo de recursos. Si sigue este
tutorial, es "pythoncontainer-rg".
<[Link] es la dirección URL del repositorio de
GitHub. Si sigue los pasos descritos en este tutorial, será o
[Link]
apps[Link]
donde userid es el identificador de usuario de GitHub.
<registry-name> es el registro de contenedor existente que creó para este
tutorial, o uno que puede usar.
<client-id> es el valor de la appId propiedad del comando anterior az ad sp
create-for-rbac . El identificador es un GUID del formulario 000000000-0000-

0000-0000-0000000000.
<tenant-id> es el valor de la tenant propiedad del comando anterior az ad
sp create-for-rbac . El identificador también es un GUID similar al

identificador de cliente.
<client-secret> es el valor de la password propiedad del comando anterior az
ad sp create-for-rbac .

En la configuración de la implementación continua, se usa una entidad de servicio para


habilitar Acciones de GitHub para acceder a los recursos de Azure y modificarlos. El
acceso a los recursos está restringido por los roles asignados a la entidad de servicio. A
la entidad de servicio se le asignó el rol integrado Colaborador en el grupo de recursos
que contiene la aplicación contenedora.

Si ha seguido los pasos del portal, la entidad de servicio se creó automáticamente. Si ha


seguido los pasos de la CLI de Azure, primero ha creado la entidad de servicio
explícitamente antes de configurar la implementación continua.

Reimplementación de la aplicación web con


Acciones de GitHub
En esta sección, realizará un cambio en la copia bifurcada del repositorio de ejemplo y
confirmará que el cambio se implementa automáticamente en el sitio web.

Si aún no lo ha hecho, cree una bifurcación del repositorio de ejemplo (Django o


Flask ). Puede hacer que el código cambie directamente en GitHub o en el entorno
de desarrollo desde una línea de comandos con Git .

GitHub

Paso 1. Vaya a la bifurcación del repositorio de ejemplo e inicie en la rama principal


.

Paso 2. Realizar un cambio.


Vaya al archivo /templates/[Link] . (Para Django, la ruta de acceso es:
restaurant_review/templates/restaurant_review/[Link]).)
Seleccione Editar y cambie la frase "Azure Restaurant Review" a "Azure
Restaurant Review - Redeployed".

Paso 3. Confirme el cambio directamente en la rama principal .


En la parte inferior de la página que edita, seleccione el botón Confirmar .
La confirmación inicia el flujo de trabajo de Acciones de GitHub.

7 Nota

Hemos mostrado realizar un cambio directamente en la rama principal . En los


flujos de trabajo de software típicos, realizará un cambio en una rama distinta de
main y, a continuación, creará una solicitud de incorporación de cambios (PR) para
combinar esos cambios en main. Las solicitudes de incorporación de cambios
también inician el flujo de trabajo.

Acerca de las acciones de GitHub

Visualización del historial de flujos de trabajo

GitHub

Paso 1. En GitHub, vaya a la bifurcación del repositorio de ejemplo y abra la pestaña


Acciones .

Secretos de flujo de trabajo


En el archivo .github/workflows/<workflow-name>.yml archivo de flujo de trabajo que se
agregó al repositorio, verá los marcadores de posición de las credenciales necesarias
para los trabajos de actualización de aplicaciones de compilación y contenedor del flujo
de trabajo. La información de credenciales se almacena cifrada en el repositorio
Configuración en Secretos de seguridad/y acciones de variables/.

Si cambia la información de credenciales, puede actualizarla aquí. Por ejemplo, si se


vuelven a generar las contraseñas de Azure Container Registry, deberá actualizar el valor
de REGISTRY_PASSWORD. Para más información, consulte Secretos cifrados en la
documentación de GitHub.

Aplicaciones autorizadas de OAuth


Al configurar la implementación continua, autoriza Azure Container Apps como una
aplicación de OAuth autorizada para su cuenta de GitHub. Container Apps usa el acceso
autorizado para crear un archivo YML de Acciones de GitHub en
.github/workflows/<workflow-name>.yml. Puede ver las aplicaciones autorizadas/y
revocar permisos en Aplicaciones de integración de su cuenta.

Sugerencias de solución de problemas


Errores al configurar una entidad de servicio con el comando de la CLI az ad sp create-
for-rba de Azure.

Recibe un error que contiene "InvalidSchema: No se encontraron adaptadores de


conexión".
Compruebe el shell en el que se ejecuta. Si usa el shell de Bash, establezca las
variables MSYS_NO_PATHCONV como se indica a continuación export
MSYS_NO_PATHCONV=1 . Para más información, consulte el problema de GitHub No

se puede crear una entidad de servicio con la CLI de Azure desde el shell de Git
Bash, no se encontraron adaptadores de conexión.

Recibe un error que contiene "Más de una aplicación tiene el mismo nombre para
mostrar".
Este error indica que el nombre ya se ha tomado para la entidad de servicio.
Elija otro nombre o deje el --name argumento y se generará automáticamente
un GUID como nombre para mostrar.

Error en el flujo de trabajo de Acciones de GitHub.

Para comprobar el estado de un flujo de trabajo, vaya a la pestaña Acciones del


repositorio.
Si hay un flujo de trabajo con errores, explore en profundidad su archivo de flujo
de trabajo. Debe haber dos trabajos "build" e "deploy". Para un trabajo con
errores, examine la salida de las tareas del trabajo para buscar problemas.
Si ve un mensaje de error con el tiempo de espera del protocolo de enlace TLS,
ejecute el flujo de trabajo manualmente seleccionando Desencadenar
implementación automática en la pestaña Acciones del repositorio para ver si el
tiempo de espera es un problema temporal.
Si configura la implementación continua para la aplicación contenedora como se
muestra en este tutorial, el archivo de flujo de trabajo
(.github/workflows/<workflow-name>.yml) se crea automáticamente. No es
necesario modificar este archivo para este tutorial. Si lo hizo, revierta los cambios e
intente el flujo de trabajo.

El sitio web no muestra los cambios que ha combinado en la rama principal .

En GitHub: compruebe que se ejecutó el flujo de trabajo acciones de GitHub y que


ha comprobado el cambio en la rama que desencadena el flujo de trabajo.
En Azure Portal: compruebe Azure Container Registry para ver si se creó una nueva
imagen de Docker con una marca de tiempo después del cambio en la rama.
En Azure Portal: compruebe los registros de la aplicación contenedora. Si hay un
error de programación, lo verá aquí.
Vaya a la aplicación contenedora | Administración de revisiones | <contenedor>
activo | Detalles de revisión | Registros de consola
Elija el orden de las columnas para mostrar "Time Generated", "Stream_s" y
"Log_s". Ordene los registros por primera vez más reciente y busque los
mensajes stderr y stdout de Python en la columna "Stream_s". La salida "print"
de Python será mensajes stdout .
Con la CLI de Azure, use el comando az containerapp logs show .

¿Qué ocurre cuando desconecta la implementación continua?

Detener la implementación continua significa desconectar la aplicación


contenedora del repositorio. Para desconectar:
En Azure Portal, vaya a la aplicación contenedora, seleccione el recurso
implementación continua y seleccione Desconectar.
Con la CLI de Azure, use el comando az container app github-action remove .

Después de desconectarse, en el repositorio de GitHub:


El archivo .github/workflows/<workflow-name>.yml se quita del repositorio.
No se quitan las claves secretas.
Azure Container Apps permanece como una aplicación de OAuth autorizada
para su cuenta de GitHub.

Después de desconectar, en Azure:


El contenedor se deja con el último contenedor implementado. Puede volver a
conectar la aplicación contenedora con Azure Container Registry para que las
nuevas revisiones de contenedor recojan la imagen más reciente.
Las entidades de servicio creadas y usadas para la implementación continua no
se eliminan.

Pasos siguientes
Si ha terminado con el tutorial y no quiere incurrir en costos adicionales, quite los
recursos usados. La eliminación de un grupo de recursos quita todos los recursos del
grupo y es la manera más rápida de quitar recursos. Para obtener un ejemplo de cómo
quitar grupos de recursos, consulte Limpieza del tutorial containerize.

Si planea compilar en este tutorial, estos son algunos pasos siguientes que puede
seguir.

Establecer reglas de escalado en Azure Container Apps

Enlace de certificados y nombres de dominio personalizados en Azure Container


Apps

Supervisión de una aplicación en Azure Container Apps


Inicio rápido: Implementación de un
clúster de Azure Kubernetes Service
(AKS) con la CLI de Azure
Artículo • 02/08/2024

Azure Kubernetes Service (AKS) es un servicio de Kubernetes administrado que le


permite implementar y administrar clústeres rápidamente. En esta guía de inicio rápido,
ha aprendido a hacer lo siguiente:

Implementación de un clúster de AKS con la CLI de Azure.


Ejecute una aplicación de varios contenedores de ejemplo con un grupo de
microservicios y front-end web simulando un escenario comercial.

7 Nota

Para empezar a aprovisionar rápidamente un clúster de AKS, en este artículo se


incluyen los pasos para implementar un clúster con la configuración
predeterminada solo con fines de evaluación. Antes de implementar un clúster listo
para producción, se recomienda familiarizarse con nuestra arquitectura de
referencia de línea de base para considerar cómo se alinea con sus requisitos
empresariales.

Antes de empezar
En esta guía rápida se presupone un conocimiento básico de los conceptos de
Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes de Azure
Kubernetes Service (AKS).

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de
empezar.

Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio
rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de
Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de
Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de
Azure en un contenedor de Docker.

Si usa una instalación local, inicie sesión en la CLI de Azure mediante el


comando az login. Siga los pasos que se muestran en el terminal para
completar el proceso de autenticación. Para ver otras opciones de inicio de
sesión, consulte Inicio de sesión con la CLI de Azure.

En caso de que se le solicite, instale las extensiones de la CLI de Azure la


primera vez que la use. Para más información sobre las extensiones, consulte
Uso de extensiones con la CLI de Azure.

Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes


que están instaladas. Para realizar la actualización a la versión más reciente,
ejecute az upgrade.

En este artículo se necesita la versión 2.0.64 de la CLI de Azure, o cualquier versión


posterior. Si usa Azure Cloud Shell, ya está instalada allí la versión más reciente.
Asegúrese de que la identidad que usará para crear el clúster tenga los permisos
mínimos adecuados. Para más información sobre el acceso y la identidad en AKS,
consulte Opciones de acceso e identidad en Azure Kubernetes Service (AKS).
Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción
adecuado en el que se deben facturar los recursos con el comando az account set.
Para más información, consulte Administración de suscripciones de Azure: CLI de
Azure.

Definición de las variables de entorno


Defina las siguientes variables de entorno para usarlas en este inicio rápido:

Azure CLI

export RANDOM_ID="$(openssl rand -hex 3)"


export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_ID"
export REGION="westeurope"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM_ID"
export MY_DNS_LABEL="mydnslabel$RANDOM_ID"

Crear un grupo de recursos


Un grupo de recursos de Azure es un grupo lógico en el que se implementan y
administran recursos de Azure. Cuando crea un grupo de recursos, se le pide que
especifique una ubicación. Esta ubicación es la ubicación de almacenamiento de los
metadatos del grupo de recursos y donde se ejecutan los recursos en Azure si no se
especifica otra región durante la creación de recursos.

Cree un grupo de recursos con el comando az group create.

Azure CLI

az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION

Resultados:

JSON

{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-
xxxxxxxxxxxx/resourceGroups/myAKSResourceGroupxxxxxx",
"location": "eastus",
"managedBy": null,
"name": "testResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "[Link]/resourceGroups"
}

Creación de un clúster de AKS


Cree un clúster de AKS con el comando az aks create. En el ejemplo siguiente se crea un
clúster con un nodo y se habilita una identidad administrada asignada por el sistema.

Azure CLI

az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys

7 Nota
Al crear un nuevo clúster, AKS crea automáticamente un segundo grupo de
recursos para almacenar los recursos de AKS. Para más información, consulte ¿Por
qué se crean dos grupos de recursos con AKS?

Conectarse al clúster
Para administrar un clúster de Kubernetes, use kubectl , el cliente de línea de
comandos de Kubernetes. Si usa Azure Cloud Shell, kubectl ya está instalado. Para
instalar kubectl localmente, use el comando az aks install-cli.

1. Para configurar kubectl para conectarse a su clúster de Kubernetes, use el


comando az aks get-credentials. Con este comando se descargan las credenciales
y se configura la CLI de Kubernetes para usarlas.

Azure CLI

az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name


$MY_AKS_CLUSTER_NAME

2. Compruebe la conexión al clúster con el comando kubectl get . Este comando


devuelve una lista de los nodos del clúster.

Azure CLI

kubectl get nodes

Implementación de la aplicación
Para implementar la aplicación, se usa un archivo de manifiesto para crear todos los
objetos necesarios para ejecutar la aplicación AKS Store . Un archivo de manifiesto de
Kubernetes define el estado deseado del clúster, por ejemplo, qué imágenes de
contenedor se van a ejecutar. El manifiesto incluye las siguientes implementaciones y
servicios de Kubernetes:

Escaparate: aplicación web para que los clientes vean productos y realicen
pedidos.
Servicio de producto: muestra información del producto.
Servicio de pedidos: realiza pedidos.
Rabbit MQ: cola de mensajes para una cola de pedidos.

7 Nota

No se recomienda ejecutar contenedores con estado, como Rabbit MQ, sin


almacenamiento persistente para producción. Estos se usan aquí para simplificar,
pero se recomienda usar servicios administrados, como Azure CosmosDB o Azure
Service Bus.

1. Cree un archivo denominado [Link] y cópielo en el siguiente


manifiesto:

YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
nodeSelector:
"[Link]/os": linux
containers:
- name: rabbitmq
image: [Link]/mirror/docker/library/rabbitmq:3.10-
management-alpine
ports:
- containerPort: 5672
name: rabbitmq-amqp
- containerPort: 15672
name: rabbitmq-http
env:
- name: RABBITMQ_DEFAULT_USER
value: "username"
- name: RABBITMQ_DEFAULT_PASS
value: "password"
resources:
requests:
cpu: 10m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
volumeMounts:
- name: rabbitmq-enabled-plugins
mountPath: /etc/rabbitmq/enabled_plugins
subPath: enabled_plugins
volumes:
- name: rabbitmq-enabled-plugins
configMap:
name: rabbitmq-enabled-plugins
items:
- key: rabbitmq_enabled_plugins
path: enabled_plugins
---
apiVersion: v1
data:
rabbitmq_enabled_plugins: |
[rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0].
kind: ConfigMap
metadata:
name: rabbitmq-enabled-plugins
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
spec:
selector:
app: rabbitmq
ports:
- name: rabbitmq-amqp
port: 5672
targetPort: 5672
- name: rabbitmq-http
port: 15672
targetPort: 15672
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 1
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
nodeSelector:
"[Link]/os": linux
containers:
- name: order-service
image: [Link]/azure-samples/aks-store-demo/order-
service:latest
ports:
- containerPort: 3000
env:
- name: ORDER_QUEUE_HOSTNAME
value: "rabbitmq"
- name: ORDER_QUEUE_PORT
value: "5672"
- name: ORDER_QUEUE_USERNAME
value: "username"
- name: ORDER_QUEUE_PASSWORD
value: "password"
- name: ORDER_QUEUE_NAME
value: "orders"
- name: FASTIFY_ADDRESS
value: "[Link]"
resources:
requests:
cpu: 1m
memory: 50Mi
limits:
cpu: 75m
memory: 128Mi
initContainers:
- name: wait-for-rabbitmq
image: busybox
command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo
waiting for rabbitmq; sleep 2; done;']
resources:
requests:
cpu: 1m
memory: 50Mi
limits:
cpu: 75m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
type: ClusterIP
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: order-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-service
spec:
replicas: 1
selector:
matchLabels:
app: product-service
template:
metadata:
labels:
app: product-service
spec:
nodeSelector:
"[Link]/os": linux
containers:
- name: product-service
image: [Link]/azure-samples/aks-store-demo/product-
service:latest
ports:
- containerPort: 3002
resources:
requests:
cpu: 1m
memory: 1Mi
limits:
cpu: 1m
memory: 7Mi
---
apiVersion: v1
kind: Service
metadata:
name: product-service
spec:
type: ClusterIP
ports:
- name: http
port: 3002
targetPort: 3002
selector:
app: product-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: 1
selector:
matchLabels:
app: store-front
template:
metadata:
labels:
app: store-front
spec:
nodeSelector:
"[Link]/os": linux
containers:
- name: store-front
image: [Link]/azure-samples/aks-store-demo/store-front:latest
ports:
- containerPort: 8080
name: store-front
env:
- name: VUE_APP_ORDER_SERVICE_URL
value: "[Link]
- name: VUE_APP_PRODUCT_SERVICE_URL
value: "[Link]
resources:
requests:
cpu: 1m
memory: 200Mi
limits:
cpu: 1000m
memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: store-front
type: LoadBalancer

Para obtener un desglose de los archivos de manifiesto de YAML, consulte


Implementaciones y manifiestos de YAML.
Si crea y guarda el archivo YAML localmente, para cargar el archivo de manifiesto
en el directorio predeterminado de CloudShell, seleccione el botón Cargar y
descargar archivos y elija el archivo en el sistema de archivos local.

2. Implemente la aplicación mediante el comando kubectl apply y especifique el


nombre del manifiesto de YAML.

Azure CLI

kubectl apply -f [Link]

Prueba de la aplicación
Puede validar que la aplicación se está ejecutando visitando la dirección IP pública o la
dirección URL de la aplicación.

Obtenga la dirección URL de la aplicación mediante los siguientes comandos:

Azure CLI

runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath=
{..[Link][?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output
'jsonpath={..[Link][0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done

Azure CLI

curl $IP_ADDRESS

Resultados:

HTML
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/[Link]">
<title>store-front</title>
<script defer="defer" src="/js/[Link]"></script>
<script defer="defer" src="/js/[Link]"></script>
<link href="/css/[Link]" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>

OUTPUT

echo "You can now visit your web server at $IP_ADDRESS"

Eliminación del clúster


Si no tiene previsto seguir el tutorial de AKS, limpie los recursos innecesarios para evitar
cargos de Azure. Puede quitar el grupo de recursos, el servicio de contenedor y todos
los recursos relacionados mediante el comando az group delete.

7 Nota

El clúster de AKS se creó con una identidad administrada asignada por el sistema,
que es la opción de identidad predeterminada utilizada en este inicio rápido. La
plataforma administra esta identidad para que no tenga que quitarla manualmente.

Pasos siguientes
En este inicio rápido, ha implementado un clúster de Kubernetes y luego ha
implementado en él una aplicación simple de varios contenedores. Esta aplicación de
ejemplo es solo para fines de demostración y no representa todos los procedimientos
recomendados para las aplicaciones de Kubernetes. Para instrucciones sobre cómo crear
soluciones completas con AKS para producción, consulte Guía de soluciones de AKS.

Para obtener más información sobre AKS y un ejemplo completo desde el código hasta
la implementación, continúe con el tutorial del clúster de Kubernetes.

Tutorial de AKS
Uso de las bibliotecas de Azure (SDK)
para Python
Artículo • 19/10/2023

Las bibliotecas de Azure para Python son de código abierto y simplifican el


aprovisionamiento, la administración y el uso de los recursos de Azure desde el código
de aplicación de Python.

Detalles que debe conocer


Las bibliotecas de Azure son la manera de comunicarse con los servicios de Azure
desde el código de Python que se ejecuta localmente o en la nube. (Poder ejecutar
el código de Python dentro del ámbito de un servicio determinado depende de si
ese servicio admite actualmente Python).

Las bibliotecas admiten Python 3.7 o posterior. Para más información sobre las
versiones compatibles de Python, consulte Directiva de compatibilidad con
versiones de Python de SDK de Azure. Si usa PyPy , asegúrese de que la versión
que usa al menos admite la versión de Python mencionada anteriormente.

Azure SDK para Python se compone exclusivamente de más de 180 bibliotecas de


Python individuales relacionadas con servicios específicos de Azure. No hay otras
herramientas en el "SDK".

Al ejecutar código localmente, la autenticación con Azure se basa en variables de


entorno, como se describe en Autenticación de aplicaciones de Python en servicios
de Azure mediante el SDK de Azure para Python.

Para instalar paquetes de biblioteca con pip, use pip install <library_name> con
los nombres de biblioteca del índice de paquetes. Para instalar paquetes de
biblioteca en entornos de Conda, use el uso conda install <package_name> de
nombres del canal de Microsoft en [Link] . Para más información,
consulte Instalación de paquetes de biblioteca de Azure.

Hay distintas bibliotecas de administración y cliente (a veces llamadas bibliotecas


del "plano de administración" y del "plano de datos"). Cada conjunto tiene
distintos objetivos y se usa en diferentes tipos de código. Para más información,
consulte las siguientes secciones de este artículo:
Creación y administración de recursos de Azure con bibliotecas de
administración
Conexión y uso de los recursos de Azure con bibliotecas cliente

La documentación de las bibliotecas se encuentra en la referencia de Azure para


Python, que se organiza por servicios de Azure, o en el explorador de API de
Python, que se organiza por nombres de paquete.

Para probar las bibliotecas por sí mismo, le recomendamos que primero configure
su entorno de desarrollo local. A continuación, puede probar cualquiera de los
siguientes ejemplos independientes (en cualquier orden): Ejemplo: Crear un grupo
de recursos, Ejemplo: Crear y usar Azure Storage, Ejemplo: Crear e implementar
una aplicación web, Ejemplo: Crear y consultar una base de datos MySQL y
Ejemplo: Crear una máquina virtual.

Para ver vídeos de demostración, consulte Introducción al SDK de Azure para


Python (PyCon 2021) y Uso de SDK de Azure para interactuar con los recursos
de Azure (PyCon 2020).

Detalles no esenciales de interés


Dado que la CLI de Azure está escrita en Python mediante las bibliotecas de
administración, cualquier cosa que pueda hacer con los comandos de la CLI de
Azure también puede hacerlo desde un script de Python. No obstante, los
comandos de la CLI proporcionan muchas características útiles, como la realización
simultánea de varias tareas, el control automático de operaciones asincrónicas, el
formato de salida como cadenas de conexión, etc. Por lo tanto, el uso de la CLI (o
su equivalente, Azure PowerShell) para la creación y administración automatizadas
de scripts puede ser más conveniente que escribir el código de Python
equivalente, a menos que desee tener un grado de control mucho más exacto
sobre el proceso.

Las bibliotecas de Azure para Python se basan en la API REST de Azure subyacente,
lo que le permite usar esas API a través de paradigmas conocidos de Python. Sin
embargo, siempre puede usar la API REST directamente desde el código de
Python, si lo desea.

Puede encontrar el código fuente de las bibliotecas de Azure en


[Link] . Como proyecto de código
abierto, todas las contribuciones son bienvenidas.

Aunque las bibliotecas pueden usarse con intérpretes como IronPython y Jython,
que no probamos, podría experimentar problemas aislados e incompatibilidades.
El repositorio de origen de la documentación de referencia de API de las
bibliotecas se encuentra en [Link]
python/ .

A partir de 2019, actualizamos las bibliotecas de Python de Azure para compartir


patrones comunes en la nube, como protocolos de autenticación, registro,
seguimiento, protocolos de transporte, respuestas almacenadas en búfer y
reintentos. Las bibliotecas actualizadas cumplen las directrices actuales del SDK
de Azure.

El 31 de marzo de 2023, se retiró la compatibilidad con las bibliotecas de Azure


SDK que no se ajustan a las directrices actuales del SDK de Azure. Aunque las
bibliotecas anteriores todavía se pueden usar más allá del 31 de marzo de 2023,
ya no recibirán soporte técnico oficial ni actualizaciones de Microsoft. Para más
información, consulte el aviso Actualización de las bibliotecas del SDK de
Azure.

Para evitar que falten actualizaciones de seguridad y rendimiento en los SDK de


Azure, actualice a las bibliotecas más recientes del SDK de Azure el 31 de
marzo de 2023.

Para comprobar qué bibliotecas de Python se ven afectadas, consulte Versiones


en desuso del SDK de Azure para Python .

Para obtener más información sobre las directrices que aplicamos a las bibliotecas,
consulte las Directrices de Python: Introducción .

Creación y administración de recursos de Azure


con bibliotecas de administración
Las bibliotecas de administración (o "plano de administración") del SDK, los nombres de
los cuales comienzan azure-mgmt- por , le ayudan a crear, configurar y administrar
recursos de Azure desde scripts de Python. Todos los servicios de Azure tienen
bibliotecas de administración correspondientes. Para más información, consulte Plano
de control y plano de datos de Azure.

Con las bibliotecas de administración, puede escribir scripts de configuración e


implementación para llevar a cabo las mismas tareas que puede realizar mediante Azure
Portal o la CLI de Azure. (Como se ha indicado anteriormente, la CLI de Azure está
escrita en Python y usa las bibliotecas de administración para implementar sus diversos
comandos).
En los siguientes ejemplos se muestra cómo usar algunas de las bibliotecas de
administración principales:

Creación de un grupo de recursos


Enumeración de grupos de recursos en una suscripción
Creación de una cuenta de Azure Storage y un contenedor de Blob Storage
Creación e implementación de una aplicación web en App Service
Creación y consulta de una base de datos de Azure MySQL
Crear una máquina virtual

Para más información sobre cómo trabajar con cada biblioteca de administración,
consulte el archivo [Link] o [Link] que se encuentra en la carpeta de
proyecto de la biblioteca, en el repositorio de GitHub del SDK . También encontrará
otros fragmentos de código en la documentación de referencia y en los ejemplos de
Azure.

Migración desde bibliotecas de administración anteriores


Si va a migrar código de versiones anteriores de las bibliotecas de administración,
consulte los detalles siguientes:

Si usa la clase ServicePrincipalCredentials , consulte Autenticación con


credenciales de token.
Los nombres de las API asincrónicas han cambiado, tal como se describe en
Patrones de uso de las bibliotecas de Azure para Python: operaciones asincrónicas.
Los nombres de las API asincrónicas de las bibliotecas más recientes comienzan
por begin_ . En la mayoría de los casos, la firma de la API sigue siendo la misma.

Conexión y uso de los recursos de Azure con


bibliotecas cliente
Las bibliotecas cliente (o del "plano de datos") del SDK le ayudan a escribir código de
aplicación de Python para interactuar con servicios ya aprovisionados. Las bibliotecas
cliente solo existen para los servicios que admiten una API de cliente.

En el artículo Ejemplo : Uso de Azure Storage se proporciona una ilustración básica del
uso de la biblioteca cliente.

Los diferentes servicios de Azure también proporcionan ejemplos del uso de estas
bibliotecas. Consulte las páginas de índice siguientes para ver otros vínculos:

Hospedaje de aplicaciones
Cognitive Services
Soluciones de datos
Identidad y seguridad
Aprendizaje automático
Mensajería e IoT
Otros servicios

Para más información sobre cómo trabajar con cada biblioteca cliente, consulte el
archivo [Link] o [Link] que se encuentra en la carpeta de proyecto de la
biblioteca, en el repositorio de GitHub del SDK . También encontrará otros fragmentos
de código en la documentación de referencia y en los ejemplos de Azure.

Ayuda y contacto con el equipo de SDK


Consulte la documentación de las bibliotecas de Azure para Python .
Plantee preguntas a la comunidad en Stack Overflow .
Abra incidencias relativas al SDK en GitHub .
Mencione @AzureSDK en Twitter
Realización de una breve encuesta sobre el SDK de Azure para Python

Paso siguiente
Es muy recomendable realizar una instalación única del entorno de desarrollo local para
que pueda usar fácilmente cualquiera de las bibliotecas de Azure para Python.

Configuración del entorno de desarrollo local >>>


Patrones de uso de las bibliotecas de
Azure para Python
Artículo • 18/10/2023

El SDK de Azure para Python se compone de muchas bibliotecas independientes, que se


enumeran en el índice de paquetes del SDK de Python.

Todas las bibliotecas comparten ciertas características comunes y patrones de uso, como
la instalación y el uso de JSON en línea para los argumentos de objeto.

Configurar el entorno de desarrollo local


Si aún no lo ha hecho, puede configurar un entorno en el que pueda ejecutar este
código. Estas son algunas opciones:

Configuración de un entorno virtual de Python. 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 .

Instalación de la biblioteca
pip

Para instalar un paquete de biblioteca específico, use pip install :

Símbolo del sistema de Windows

# Install the management library for Azure Storage


pip install azure-mgmt-storage

Símbolo del sistema de Windows

# Install the client library for Azure Blob Storage


pip install azure-storage-blob
pip install recupera la versión más reciente de una biblioteca en el entorno de

Python actual.

También puede usar pip para desinstalar bibliotecas e instalar versiones específicas,
incluidas las versiones preliminares. Para más información, consulte Instalación de
los paquetes de biblioteca de Azure para Python.

Operaciones asincrónicas

Bibliotecas asincrónicas
Muchas bibliotecas de administración y cliente proporcionan versiones asincrónicas
( .aio ). La asyncio biblioteca está disponible desde Python 3.4 y las palabras clave
async/await se introdujeron en Python 3.5. Las versiones asincrónicas de las bibliotecas
están diseñadas para usarse con Python 3.5 y versiones posteriores.

Algunos ejemplos de bibliotecas del SDK de Python de Azure con versiones asincrónicas
son : [Link], [Link], [Link] y
[Link].

Estas bibliotecas necesitan un transporte asincrónico, como aiohttp para funcionar. La


azure-core biblioteca proporciona un transporte asincrónico, AioHttpTransport , que las

bibliotecas asincrónicas usan.

En el código siguiente se muestra cómo crear un cliente para la versión asincrónica de la


biblioteca de Azure Blob Storage:

Python

credential = DefaultAzureCredential()

async def run():

async with BlobClient(


storage_url,
container_name="blob-container-01",
blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt",
credential=credential,
) as blob_client:

# Open a local file and upload its contents to Blob Storage


with open("./[Link]", "rb") as data:
await blob_client.upload_blob(data)
print(f"Uploaded [Link] to {blob_client.url}")
# Close credential
await [Link]()

[Link](run())

El ejemplo completo se encuentra en GitHub en use_blob_auth_async.py . Para obtener


la versión sincrónica de este código, consulte Ejemplo: Carga de un blob.

Operaciones de larga duración


Algunas operaciones de administración que se invocan (como
ComputeManagementClient.virtual_machines.begin_create_or_update y
WebSiteManagementClient.web_apps.begin_create_or_update devuelven un sondeo
para operaciones de larga duración, LROPoller[<type>] , donde <type> es específica de
la operación en cuestión).

7 Nota

Es posible que observe diferencias en los nombres de método de una biblioteca, lo


que se debe a las diferencias de versión. Las bibliotecas anteriores que no se basan
en [Link] suelen usar nombres como create_or_update . Las bibliotecas
basadas en [Link] agregan el begin_ prefijo a los nombres de método para
indicar mejor que son operaciones de sondeo largas. La migración del código
anterior a una biblioteca basada en [Link] más reciente normalmente significa
agregar el prefijo begin_ a los nombres de método, ya que la mayoría de las firmas
de método siguen siendo las mismas.

El LROPoller tipo de valor devuelto significa que la operación es asincrónica. En


consecuencia, debe llamar al método result del sondeador para esperar a que finalice
la operación y obtener el resultado.

El código siguiente, tomado de Ejemplo: Creación e implementación de una aplicación


web, muestra un ejemplo del uso del sondeo para esperar un resultado:

Python

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 = [Link]()

En este caso, el valor devuelto de begin_create_or_update es de tipo


AzureOperationPoller[Site] , lo que significa que el valor devuelto de [Link]()

es un objeto de tipo Site.

Excepciones
En general, las bibliotecas de Azure generan excepciones cuando las operaciones no
funcionan según lo previsto, incluidas las solicitudes HTTP con errores a la API REST de
Azure. En el caso del código de la aplicación, puede usar try...except bloques en torno
a las operaciones de biblioteca.

Para obtener más información sobre el tipo de excepciones que se pueden generar,
consulte la documentación de la operación en cuestión.

Registro
Las bibliotecas de Azure más recientes usan la biblioteca logging estándar de Python
para generar la salida del registro. Puede establecer el nivel de registro para bibliotecas
individuales, para grupos de bibliotecas o para todas las bibliotecas. Después de
registrar un controlador del flujo de registro, puede habilitar el registro para un objeto
de cliente específico o una operación específica. Para más información, consulte
Registro en las bibliotecas de Azure.

Configuración de proxy
Para especificar un proxy, puede usar variables de entorno o argumentos opcionales.
Para más información, consulte Configuración de servidores proxy.

Argumentos opcionales para objetos y


métodos de cliente
En la documentación de referencia de la biblioteca, a menudo se ve un argumento
**kwargs u **operation_config en la firma de un constructor de objetos de cliente o un
método de operación específico. Estos marcadores de posición indican que el objeto o
método en cuestión puede admitir otros argumentos con nombre. Normalmente, la
documentación de referencia indica los argumentos específicos que se pueden usar.
También hay algunos argumentos generales que se suelen admitir, como se describe en
las secciones siguientes.

Argumentos para las bibliotecas basadas en [Link]


Estos argumentos se aplican a las bibliotecas enumeradas en Python: nuevas
bibliotecas . Por ejemplo, este es un subconjunto de los argumentos de palabra clave
para azure-core . Para obtener una lista completa, consulte el archivo Léame de GitHub
para azure-core .

Nombre Tipo Valor Descripción


predeterminado

logging_enable bool False Habilita el registro. Para más información,


consulte Registro en las bibliotecas de Azure.

proxies dict {} Direcciones URL del servidor proxy. Para más


información, consulte Configuración de
servidores proxy.

use_env_settings bool True Si es True, permite el uso de las variables de


entorno HTTP_PROXY y HTTPS_PROXY para los
servidores proxy. Si es False, se omiten las
variables de entorno. Para más información,
consulte Configuración de servidores proxy.

connection_timeout int 300 Tiempo de expiración en segundos para


establecer una conexión con los puntos de
conexión de la API REST de Azure.

read_timeout int 300 Tiempo de expiración en segundos para


completar una operación de la API REST de
Azure (es decir, esperar una respuesta).

retry_total int 10 Número de reintentos permitidos para las


llamadas a la API REST. Utilice retry_total=0
para deshabilitar los reintentos.

retry_mode enum exponential Aplica el tiempo de reintento de forma lineal


o exponencial. Si es "single", los reintentos se
realizan a intervalos regulares. Si es
"exponential", cada reintento espera el doble
de tiempo que el reintento anterior.
Las bibliotecas individuales no están obligadas a admitir ninguno de estos argumentos,
por lo que siempre consulte la documentación de referencia de cada biblioteca para
obtener detalles exactos. Además, cada biblioteca puede admitir otros argumentos. Por
ejemplo, para los argumentos de palabra clave específicos de Blob Storage, consulte el
archivo Léame de GitHub para azure-storage-blob .

Patrón de JSON insertado para argumentos de


objeto
Muchas operaciones de las bibliotecas de Azure permiten expresar argumentos de
objeto como objetos discretos o como JSON insertado.

Por ejemplo, supongamos que tiene un ResourceManagementClient objeto a través del


cual se crea un grupo de recursos con su create_or_update método . El segundo
argumento de este método es de tipo ResourceGroup.

Para llamar al create_or_update método , puede crear una instancia discreta de


ResourceGroup directamente con sus argumentos necesarios ( location en este caso):

Python

# Provision the resource group.


rg_result = resource_client.resource_groups.create_or_update(
"PythonSDKExample-rg",
ResourceGroup(location="centralus")
)

Como alternativa, puede pasar los mismos parámetros como JSON insertado:

Python

# Provision the resource group.


rg_result = resource_client.resource_groups.create_or_update(
"PythonAzureExample-rg", {"location": "centralus"}
)

Cuando se usa JSON insertado, las bibliotecas de Azure convierten automáticamente el


JSON insertado en el tipo de objeto adecuado para el argumento en cuestión.

Los objetos también pueden tener argumentos de objeto anidados, en cuyo caso
también puede usar JSON anidado.

Por ejemplo, supongamos que tiene una instancia del objeto


KeyVaultManagementClient y llama a su método create_or_update. En este caso, el
tercer argumento es de tipo VaultCreateOrUpdateParameters, que a su vez contiene un
argumento de tipo VaultProperties. VaultProperties , a su vez, contiene argumentos de
objeto de tipo Sku y list[AccessPolicyEntry]. Un argumento Sku contiene un objeto
SkuName y cada argumento AccessPolicyEntry contiene un objeto Permissions.

Para llamar a begin_create_or_update con objetos incrustados, use código como el


siguiente (suponiendo tenant_id que , object_id y LOCATION ya están definidos).
También puede crear los objetos necesarios antes de la llamada de función.

Python

# Provision a Key Vault using inline parameters


poller = keyvault_client.vaults.begin_create_or_update(
RESOURCE_GROUP_NAME,
KEY_VAULT_NAME_A,
VaultCreateOrUpdateParameters(
location = LOCATION,
properties = VaultProperties(
tenant_id = tenant_id,
sku = Sku(
name="standard",
family="A"
),
access_policies = [
AccessPolicyEntry(
tenant_id = tenant_id,
object_id = object_id,
permissions = Permissions(
keys = ['all'],
secrets = ['all']
)
)
]
)
)
)

key_vault1 = [Link]()

La misma llamada que usa JSON insertado aparece de la siguiente manera:

Python

# Provision a Key Vault using inline JSON


poller = keyvault_client.vaults.begin_create_or_update(
RESOURCE_GROUP_NAME,
KEY_VAULT_NAME_B,
{
'location': LOCATION,
'properties': {
'sku': {
'name': 'standard',
'family': 'A'
},
'tenant_id': tenant_id,
'access_policies': [{
'tenant_id': tenant_id,
'object_id': object_id,
'permissions': {
'keys': ['all'],
'secrets': ['all']
}
}]
}
}
)

key_vault2 = [Link]()

Dado que ambas maneras son equivalentes, puede elegir el que prefiera e incluso
intercambiarlos. (El código completo de estos ejemplos se encuentra en GitHub ).

Si el JSON no tiene el formato correcto, normalmente se muestra el error


"DeserializationError: Unable to deserialize to object: type, AttributeError: 'str' object has
no attribute 'get'" (DeserializationError: No se puede deserializar en el objeto: tipo,
AttributeError: el objeto 'str' no tiene un atributo 'get'). Una causa común de este error
es que se proporciona una única cadena para una propiedad cuando la biblioteca
espera un objeto JSON anidado. Por ejemplo, si se usa 'sku': 'standard' en el ejemplo
anterior, se genera este error porque el parámetro sku es un objeto Sku que espera el
objeto JSON insertado, en este caso {'name': 'standard'} , que se asigna al tipo
SkuName esperado.

Pasos siguientes
Ahora que conoce los patrones comunes de uso de las bibliotecas de Azure para
Python, consulte los siguientes ejemplos independientes para explorar escenarios
específicos de la biblioteca cliente y de administración. Puede probar estos ejemplos en
cualquier orden, ya que no son secuenciales o interdependientes.

Ejemplo: Creación de un grupo de recursos

Ejemplo: Uso de Azure Storage

Ejemplo: Creación de una aplicación web e implementación de código

Ejemplo: Creación y consulta de una base de datos


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


Autenticación de aplicaciones de Python
en los servicios de Azure mediante el
SDK de Azure para Python
Artículo • 23/09/2024

Cuando una app necesita acceder a un recurso de Azure, como Azure Storage, Azure
Key Vault o servicios de Azure AI, la app debe autenticarse en Azure. Este requisito se
cumple para todas las apps, tanto si se implementan en Azure, como si se implementan
en el entorno local o se están desarrollando en una estación de trabajo de desarrollador
local. En este artículo se describen los enfoques recomendados para autenticar una
aplicación en Azure cuando se usa el SDK de Azure para Python.

Enfoque de autenticación de aplicaciones


recomendado
Use la autenticación basada en tokens en lugar de cadenas de conexión para las
aplicaciones cuando se autentiquen en los recursos de Azure. La biblioteca de clientes
de Azure Identity para Python proporciona clases que admiten la autenticación basada
en tokens y permiten que las aplicaciones se autentiquen sin problemas en los recursos
de Azure, tanto si la aplicación está en desarrollo local como si está implementada en
Azure o en un servidor local.

El tipo específico de autenticación basada en tokens que usa una aplicación para
autenticarse en los recursos de Azure depende de dónde se ejecute la aplicación. Los
tipos de autenticación basada en tokens se muestran en el diagrama siguiente.
Cuando un desarrollador ejecuta una aplicación durante el desarrollo local: la
aplicación se autentica en Azure mediante una entidad de servicio de aplicación
para el desarrollo local o las credenciales de Azure del desarrollador. Estas
opciones se describen en la sección Autenticación durante el desarrollo local.
Cuando una aplicación se hospeda en Azure: la aplicación se autentica en los
recursos de Azure mediante una identidad administrada. Esta opción se describe
en la sección Autenticación en entornos de servidor.
Cuando una aplicación se hospeda e implementa localmente: la aplicación se
autentica en los recursos de Azure mediante una entidad de servicio de aplicación.
Esta opción se describe en la sección Autenticación en entornos de servidor.

DefaultAzureCredential
La clase DefaultAzureCredential que proporciona la biblioteca cliente Azure Identity de
Azure permite a las aplicaciones usar diferentes métodos de autenticación en función
del entorno en el que se ejecuten. De esta manera, las aplicaciones se pueden promover
desde el desarrollo local hasta los entornos de prueba y la producción sin cambios en el
código.

Debe configurar el método de autenticación adecuado para cada entorno y


DefaultAzureCredential detecta y utiliza automáticamente ese método de

autenticación. Es preferible usar DefaultAzureCredential frente a la codificación manual


de lógica condicional o marcas de características para utilizar diferentes métodos de
autenticación en diferentes entornos.
Los detalles sobre el uso de la clase DefaultAzureCredential se describen en la sección
Uso de DefaultAzureCredential en una aplicación.

Ventajas de la autenticación basadas en token


Use la autenticación basada en tokens en lugar de usar cadenas de conexión al compilar
aplicaciones para Azure. La autenticación basada en tokens ofrece las siguientes
ventajas sobre la autenticación con cadenas de conexión:

Los métodos de autenticación basados en tokens descritos en este artículo


permiten establecer los permisos específicos que necesita la aplicación en el
recurso de Azure. Esta práctica sigue el principio de privilegios mínimos . Por el
contrario, una cadena de conexión concede derechos completos al recurso de
Azure.
Cualquier persona o aplicación con una cadena de conexión puede conectarse a
un recurso de Azure, pero los métodos de autenticación basados en tokens limitan
el acceso al recurso solo a las aplicaciones destinadas a acceder al recurso.
Con una identidad administrada, no hay ningún secreto de aplicación que
almacenar. La aplicación es más segura porque no hay ninguna cadena de
conexión o secreto de aplicación que pueda verse comprometido.
El paquete azure-identity adquiere y administra los tokens de Microsoft Entra
por ti. Esto hace que el uso de la autenticación basada en tokens sea tan fácil de
usar como una cadena de conexión.

Limite el uso de cadenas de conexión a aplicaciones de prueba de concepto iniciales o


prototipos de desarrollo que no accedan a datos confidenciales o de producción. De lo
contrario, siempre se prefieren las clases de autenticación basadas en tokens
disponibles en la biblioteca cliente Azure Identity al autenticarse en los recursos de
Azure.

Autenticación en entornos de servidor


Cuando va a hospedar en un entorno de servidor, a cada app se le asigna una identidad
de aplicación única por entorno en el que se ejecuta la app. En Azure, una identidad de
app se representa mediante una entidad de servicio. Este tipo especial de entidad de
seguridad identifica y autentica las aplicaciones en Azure. El tipo de entidad de servicio
que se va a usar para la aplicación depende de dónde se esté ejecutando la aplicación:

ノ Expandir tabla
Método de Descripción
autenticación

Aplicaciones Las aplicaciones hospedadas en Azure deben usar una entidad de servicio de
hospedadas en identidad administrada. Las identidades administradas están diseñadas para
Azure representar la identidad de una aplicación hospedada en Azure y solo se
pueden usar con aplicaciones hospedadas en Azure.

Por ejemplo, a una aplicación web de Django hospedada en Azure App


Service se le asignaría una identidad administrada. La identidad administrada
asignada a la aplicación se usaría para autenticar la aplicación en otros
servicios de Azure.

Las aplicaciones que se ejecutan en Azure Kubernetes Service (AKS) pueden


usar una credencial de identidad de carga de trabajo. Esta credencial se basa
en una identidad administrada que tiene una relación de confianza con una
cuenta de servicio de AKS.
,

Más información sobre la autenticación de aplicaciones


hospedadas en Azure

Aplicaciones Las aplicaciones hospedadas fuera de Azure (por ejemplo, aplicaciones


hospedadas locales) que necesitan conectarse a los servicios de Azure deben usar una
fuera de Azure entidad de servicio de aplicación. Una entidad de servicio de aplicación
(por ejemplo, representa la identidad de la aplicación en Azure y se crea a través del
aplicaciones proceso de registro de la aplicación.
locales)
Por ejemplo, considere una aplicación web de Django hospedada localmente
que usa Azure Blob Storage. Crearía una entidad de servicio de aplicación
para la aplicación mediante el proceso de registro de la aplicación.
AZURE_CLIENT_ID , AZURE_TENANT_ID y AZURE_CLIENT_SECRET se almacenarían
como variables de entorno para que la aplicación las lea en tiempo de
ejecución y permitan que la aplicación se autentique en Azure mediante la
entidad de servicio de la aplicación.

Más información sobre la autenticación de aplicaciones


hospedadas fuera de Azure

Autenticación durante el desarrollo local


Cuando una app se ejecuta en la estación de trabajo de un desarrollador durante el
desarrollo local, debe autenticarse en los servicios de Azure que usa la aplicación. Hay
dos estrategias principales para autenticar aplicaciones en Azure durante el desarrollo
local:
ノ Expandir tabla

Método de Descripción
autenticación

Crear objetos de entidad En este método, los objetos de entidad de servicio de aplicación
de servicio de aplicación dedicados se configuran mediante el proceso de registro de la
dedicados que se usarán aplicación para su uso durante el desarrollo local. A continuación, la
durante el desarrollo identidad de la entidad de servicio se almacena como variables de
local. entorno a las que va a acceder la aplicación cuando se ejecuta en el
desarrollo local.

Este método permite asignar los permisos de recursos específicos


necesarios para la aplicación a los objetos de entidad de servicio
utilizados por los desarrolladores durante el desarrollo local. Esta
práctica garantiza que la aplicación solo tenga acceso a los recursos
específicos que necesita y replica los permisos que tendrá la
aplicación en producción.

La desventaja de este enfoque es la necesidad de crear objetos de


entidad de servicio independientes para cada desarrollador que
trabaja en una aplicación.

Obtenga información sobre la autenticación mediante


entidades de servicio para desarrolladores

Autenticar la aplicación En este método, un desarrollador debe iniciar sesión en Azure desde
en Azure con las la CLI de Azure, Azure PowerShell o la CLI para desarrolladores de
credenciales del Azure en su estación de trabajo local. A continuación, la aplicación
desarrollador durante el puede acceder a las credenciales del desarrollador desde el almacén
desarrollo local. de credenciales y usar esas credenciales para acceder a los recursos
de Azure desde la aplicación.

Este método tiene la ventaja de una configuración más sencilla


porque un desarrollador solo necesita iniciar sesión en su cuenta de
Azure a través de una de las herramientas de desarrollo antes
mencionadas. El inconveniente de este enfoque es que es probable
que la cuenta del desarrollador tenga más permisos de los que
necesita la aplicación. Como resultado, la aplicación no replica con
precisión los permisos con los que se ejecutará en producción.

Obtenga información sobre la autenticación mediante


cuentas de desarrollador
Uso de DefaultAzureCredential en una
aplicación
DefaultAzureCredential es una secuencia ordenada de mecanismos para autenticarse en
Microsoft Entra ID. Cada mecanismo de autenticación es una clase que implementa el
protocolo TokenCredential y se conoce como credencial. En tiempo de ejecución,
DefaultAzureCredential intenta autenticarse con la primera credencial. Si esa credencial

no puede adquirir un token de acceso, se intenta utilizar la siguiente credencial de la


secuencia, y así sucesivamente hasta que se obtenga correctamente un token de acceso.
De esta manera, la aplicación puede usar diferentes credenciales en distintos entornos
sin implementar código específico del entorno.

Para usar DefaultAzureCredential en una app de Python, agregue el paquete azure-


identity a la aplicación.

terminal

pip install azure-identity

Se accede a los servicios de Azure mediante clases de cliente especializadas de las


distintas bibliotecas cliente del SDK de Azure. En el ejemplo de código siguiente se
muestra cómo crear instancias de un objeto DefaultAzureCredential y usarlo con una
clase de cliente del SDK de Azure. En este caso, es un objeto BlobServiceClient que se
usa para acceder a Azure Blob Storage.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

# Acquire a credential object


credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
account_url="[Link]
credential=credential)

Cuando el código anterior se ejecuta en su estación de trabajo de desarrollo local, busca


en las variables de entorno un principal de servicio de aplicación o en las herramientas
de desarrollo instaladas localmente, como la CLI de Azure, un conjunto de credenciales
de desarrollador. Se puede usar cualquier enfoque para autenticar la aplicación en los
recursos de Azure durante el desarrollo local.
Cuando se implementa en Azure, este mismo código también puede autenticar la
aplicación en los recursos de Azure. DefaultAzureCredential puede recuperar la
configuración del entorno y las configuraciones de identidad gestionada para
autenticarse automáticamente en los servicios de Azure.

Contenido relacionado
Archivo LÉAME de la biblioteca de cliente de Azure Identity para Python en GitHub

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Autenticación de aplicaciones Python en
servicios de Azure durante el desarrollo
local mediante entidades de servicio
Artículo • 26/08/2024

Al crear aplicaciones en la nube, los desarrolladores necesitan depurar y probar


aplicaciones en su estación de trabajo local. Cuando se ejecuta una aplicación en la
estación de trabajo de un desarrollador durante el desarrollo local, esta debe
autenticarse en los servicios de Azure que usa. En este artículo se explica cómo
configurar objetos de entidad de servicio de aplicación dedicados que se usarán
durante el desarrollo local.

Las entidades de servicio de aplicaciones dedicadas para el desarrollo local permiten


seguir el principio de privilegios mínimos durante el desarrollo de aplicaciones. Dado
que los permisos tienen como ámbito exactamente lo que se necesita para la aplicación
durante el desarrollo, se impide que el código de la aplicación acceda accidentalmente a
un recurso de Azure destinado al uso por otra aplicación. Esto también impide que se
produzcan errores cuando la aplicación se mueve al entorno de producción debido a un
exceso de privilegios de la aplicación en el entorno de desarrollo.

Cuando la aplicación se registra en Azure, se configura una entidad de servicio de


aplicación. Al registrar aplicaciones para el desarrollo local, se recomienda lo siguiente:

Crear registros de aplicaciones independientes para cada desarrollador que trabaje


en la aplicación. Esto creará entidades de servicio de aplicación independientes
para que las puedan usar cada desarrollador durante el desarrollo local y evitará la
necesidad de que los desarrolladores compartan credenciales para una única
entidad de servicio de aplicación.
Crear registros de aplicaciones independientes por cada aplicación. Esto limita los
permisos de la aplicación solo a lo que necesita la aplicación.
Durante el desarrollo local, las variables de entorno se establecen con la identidad de la
entidad de servicio de la aplicación. El SDK de Azure para Python lee estas variables de
entorno y usa esta información para autenticar la aplicación en los recursos de Azure
que necesita.

1: Registro de la aplicación en Azure


Los objetos de la entidad de servicio de la aplicación se crean con un registro de
aplicación en Azure. Esto puede hacerse mediante Azure Portal o la CLI de Azure.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo con la CLI de Azure instalada.

En primer lugar, use el comando az ad sp create-for-rbac para crear una nueva


entidad de servicio para la aplicación. El comando también crea el registro de
aplicación para la aplicación al mismo tiempo.

Azure CLI

az ad sp create-for-rbac --name {service-principal-name}

El resultado de este comando tendrá un aspecto similar al siguiente. Anote estos


valores o mantenga esta ventana abierta, ya que necesitará estos valores en los
pasos siguientes y no podrá volver a ver el valor de la contraseña (secreto del
cliente). Sin embargo, si es necesario, se puede agregar una nueva contraseña
posteriormente sin invalidar la entidad de servicio ni las contraseñas existentes.

JSON

{
"appId": "00000000-0000-0000-0000-000000000000",
"displayName": "{service-principal-name}",
"password": "abcdefghijklmnopqrstuvwxyz",
"tenant": "33333333-3333-3333-3333-333333333333"
}

2 - Creación de un grupo de seguridad de


Microsoft Entra para el desarrollo local
Dado que normalmente hay varios desarrolladores que trabajan en una aplicación, se
recomienda crear un grupo de seguridad de Microsoft Entra para encapsular los roles
(permisos) que necesita la aplicación en el desarrollo local, en lugar de asignar los roles
a objetos de entidad de servicio individuales. Esto ofrece las ventajas que se indican a
continuación:

Todos los desarrolladores están seguros de tener asignados los mismos roles, ya
que los roles se asignan en el nivel de grupo.
Si se necesita un nuevo rol para la aplicación, solo es necesario agregarlo al grupo
Microsoft Entra para la aplicación.
Si un nuevo desarrollador se une al equipo, se crea una nueva entidad de servicio
de aplicación para el desarrollador y esta se agrega al grupo, lo que garantiza que
el desarrollador tiene los permisos adecuados para trabajar en la aplicación.

CLI de Azure

El comando az ad group create se usa para crear grupos de seguridad en Microsoft


Entra ID. Los parámetros --display-name y --main-nickname son obligatorios. El
nombre proporcionado al grupo debe basarse en el nombre de la aplicación.
También resulta útil incluir una cadena como “local-dev” en el nombre del grupo
para indicar el propósito del grupo.

Azure CLI

az ad group create \
--display-name MyDisplay \
--mail-nickname MyDisplay \
--description "<group-description>"

Copie el valor de la propiedad id en la salida del comando. Es el identificador de


objeto del grupo. Lo necesitará en pasos posteriores. También puede usar el
comando az ad group show para recuperar esta propiedad.

Para agregar miembros al grupo, necesitará el id. de objeto de la entidad de


servicio de la aplicación, que es diferente al id. de la aplicación. Use az ad sp list
para enumerar las entidades de servicio disponibles. El comando de parámetro --
filter acepta filtros de estilo de OData y se puede usar para filtrar la lista como se

muestra. El parámetro --query limita las columnas solo a aquellas de interés.

Azure CLI

az ad sp list \
--filter "startswith(displayName, 'msdocs')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table

El comando az ad group member add se puede usar para agregar miembros a


grupos.

Azure CLI

az ad group member add \


--group <group-name> \
--member-id <object-id>

7 Nota

De forma predeterminada, la creación de grupos de seguridad de Microsoft Entra


se limita a determinados roles con privilegios en un directorio. Si no puede crear un
grupo, póngase en contacto con un administrador del directorio. Si no puede
agregar miembros a un grupo existente, póngase en contacto con el propietario
del grupo o con un administrador de directorios. Para obtener más información,
consulte Administración de grupos de Microsoft Entra y pertenencia a grupos.

3: Asignación de roles a la aplicación


A continuación, debe determinar qué roles (permisos) necesita la aplicación y en qué
recursos para, a continuación, asignar dichos roles a la aplicación. En este ejemplo, los
roles se asignan al grupo Microsoft Entra creado en el paso 2. Los roles se pueden
asignar en el ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se
muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de
las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.

CLI de Azure

A un usuario, grupo o entidad de servicio de aplicación se le asigna el rol en Azure


con el comando az role assignment create. Puede especificar un grupo con su
identificador de objeto. Puede especificar una entidad de servicio de aplicación con
su appId.

Azure CLI

az role assignment create --assignee {appId or objectId} \


--scope
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"

Para obtener los nombres de roles que se pueden asignar, use el comando az role
definition list.

Azure CLI

az role definition list \


--query "sort_by([].{roleName:roleName, description:description},
&roleName)" \
--output table

Por ejemplo, para permitir que la entidad de servicio de aplicación con el appId de
00000000-0000-0000-0000-000000000000 lea, escriba y elimine el acceso a los

contenedores y datos de blobs de Azure Storage para todas las cuentas de


almacenamiento del grupo de recursos msdocs-python-sdk-auth-example en la
suscripción con ID 11111111-1111-1111-1111-111111111111 , asignaría el rol de
Colaborador de datos de blobs de almacenamiento a la entidad de servicio de la
aplicación mediante el siguiente comando.

Azure CLI

az role assignment create --assignee 00000000-0000-0000-0000-


000000000000 \
--scope /subscriptions/11111111-1111-1111-1111-
111111111111/resourceGroups/msdocs-python-sdk-auth-example \
--role "Storage Blob Data Contributor"

Para obtener información sobre cómo asignar permisos en el nivel de recurso o


suscripción mediante la CLI de Azure, consulte el artículo Asignación de roles de
Azure mediante la CLI de Azure.

4 - Configuración de variables del entorno de


desarrollo local
El objeto DefaultAzureCredential buscará información sobre la entidad de servicio en un
conjunto de variables de entorno en tiempo de ejecución. Dado que la mayoría de los
desarrolladores trabajan en varias aplicaciones, se recomienda usar un paquete como
python-dotenv para acceder al entorno desde un archivo .env almacenado en el
directorio de la aplicación durante el desarrollo. Esto limita las variables de entorno que
se usan para autenticar la aplicación en Azure de modo que esta aplicación solo las
pueda usar.

El archivo .env nunca está protegido en el control de código fuente, ya que contiene la
clave secreta de aplicación para Azure. El archivo .gitignore estándar para Python
excluye automáticamente el archivo .env de la protección.

Para usar el paquete python-dotenv, instale primero el paquete en la aplicación.

terminal

pip install python-dotenv

A continuación, cree un archivo .env en el directorio raíz de la aplicación. Establezca los


valores de las variables de entorno con los valores obtenidos del proceso de registro de
aplicaciones de la siguiente manera:

AZURE_CLIENT_ID → Valor del id. de la aplicación.

AZURE_TENANT_ID → Valor del id. de inquilino.


AZURE_CLIENT_SECRET → Contraseña o credencial generada para la aplicación.

Bash

AZURE_CLIENT_ID=00000000-0000-0000-0000-000000000000
AZURE_TENANT_ID=11111111-1111-1111-1111-111111111111
AZURE_CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz

Por último, en el código de inicio de la aplicación, use la biblioteca python-dotenv para


leer las variables de entorno del archivo .env al iniciarse.

Python

from dotenv import load_dotenv

if ( [Link]['ENVIRONMENT'] == 'development'):
print("Loading environment variables from .env file")
load_dotenv(".env")

5: Implementación de DefaultAzureCredential
en la aplicación
Para autenticar objetos de cliente del SDK de Azure en Azure, la aplicación debe usar la
clase DefaultAzureCredential del paquete [Link] . En este escenario,
DefaultAzureCredential detectará que las variables de entorno AZURE_CLIENT_ID ,
AZURE_TENANT_ID y AZURE_CLIENT_SECRET están establecidas y las leerá para obtener la

información de la entidad de servicio de la aplicación con la que conectarse a Azure.

Empiece agregando el paquete [Link] a la aplicación.

terminal

pip install azure-identity

A continuación, para cualquier código Python que cree un objeto de cliente del SDK de
Azure en la aplicación, querrá:

1. Importar la clase DefaultAzureCredential desde el módulo [Link] .


2. Crear un objeto DefaultAzureCredential .
3. Pasar el objeto DefaultAzureCredential al constructor de objetos de cliente del
SDK de Azure.

En el segmento de código siguiente se muestra un ejemplo de esto.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

# Acquire a credential object


token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
account_url="[Link]
credential=token_credential)

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Autenticación de aplicaciones Python en
servicios de Azure durante el desarrollo
local mediante cuentas de desarrollador
Artículo • 26/08/2024

Cuando los desarrolladores crean aplicaciones en la nube, normalmente depuran y


prueban las aplicaciones en su estación de trabajo local. Cuando se ejecuta una
aplicación en la estación de trabajo de un desarrollador durante el desarrollo local, esta
debe autenticarse en los servicios de Azure que usa. En este artículo se explica cómo
usar las credenciales de Azure de un desarrollador para autenticar la aplicación en Azure
durante el desarrollo local.

Para que una aplicación se autentique en Azure durante el desarrollo local con las
credenciales de Azure del desarrollador, un desarrollador debe haber iniciado sesión en
Azure desde la CLI de Azure, Azure PowerShell o la CLI de desarrollador de Azure. El SDK
de Azure para Python es capaz de detectar que el desarrollador ha iniciado sesión desde
una de estas herramientas y, a continuación, obtener las credenciales necesarias de la
caché de credenciales para autenticar la aplicación en Azure como usuario que ha
iniciado sesión.

Este enfoque es más fácil de configurar para un equipo de desarrollo, ya que aprovecha
las cuentas de Azure existentes de los desarrolladores. Sin embargo, es probable que la
cuenta de un desarrollador tenga más permisos que los que requiere la aplicación, lo
que supone superar los permisos con los que se ejecutará la aplicación en producción.
Como alternativa, puede crear entidades de servicio de aplicación para usarlas durante
el desarrollo local que se pueden limitar para tener solo el acceso necesario para la
aplicación.
1 - Creación de un grupo de seguridad de
Microsoft Entra para el desarrollo local
Dado que casi siempre hay varios desarrolladores que trabajan en una aplicación, se
recomienda crear primero un grupo de seguridad de Microsoft Entra para encapsular los
roles (permisos) que necesita la aplicación en el desarrollo local. Este enfoque ofrece las
siguientes ventajas.

Todos los desarrolladores están seguros de tener asignados los mismos roles, ya
que los roles se asignan en el nivel de grupo.
Si se necesita un nuevo rol para la aplicación, solo es necesario agregarlo al grupo
Microsoft Entra para la aplicación.
Si un nuevo desarrollador se une al equipo, simplemente debe agregarse al grupo
correcto de Microsoft Entra para obtener los permisos correctos para trabajar en la
aplicación.

Si tiene un grupo de seguridad de Microsoft Entra existente para su equipo de


desarrollo, puede usar ese grupo. De lo contrario, siga estos pasos para crear un grupo
de seguridad de Microsoft Entra.

CLI de Azure

El comando az ad group create se usa para crear grupos en Microsoft Entra ID. Los
parámetros --display-name y --main-nickname son obligatorios. El nombre
proporcionado al grupo debe basarse en el nombre de la aplicación. También
resulta útil incluir una cadena como “local-dev” en el nombre del grupo para indicar
el propósito del grupo.

Azure CLI

az ad group create \
--display-name MyDisplay \
--mail-nickname MyDisplay \
--description "<group-description>"

Copie el valor de la propiedad id en la salida del comando. Es el identificador de


objeto del grupo. Lo necesitará en pasos posteriores. También puede usar el
comando az ad group show para recuperar esta propiedad.

Para agregar miembros al grupo, necesita el identificador de objeto del usuario de


Azure. Use az ad user list para enumerar las entidades de servicio disponibles. El
comando del parámetro --filter acepta filtros de estilo OData y se puede usar
para filtrar la lista por el nombre para mostrar del usuario, tal y como se muestra. El
parámetro --query limita la salida a las columnas de interés.

Azure CLI

az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table

El comando az ad group member add se puede usar para agregar miembros a


grupos.

Azure CLI

az ad group member add \


--group <group-name> \
--member-id <object-id>

7 Nota

De forma predeterminada, la creación de grupos de seguridad de Microsoft Entra


se limita a determinados roles con privilegios en un directorio. Si no puede crear un
grupo, póngase en contacto con un administrador del directorio. Si no puede
agregar miembros a un grupo existente, póngase en contacto con el propietario
del grupo o con un administrador de directorios. Para obtener más información,
consulte Administración de grupos de Microsoft Entra y pertenencia a grupos.

2: Asignación de roles al grupo de Microsoft


Entra
A continuación, debe determinar qué roles (permisos) necesita la aplicación y en qué
recursos y asignar dichos roles a la aplicación. En este ejemplo, los roles se asignarán al
grupo Microsoft Entra creado en el paso 1. Los roles se pueden asignar en el ámbito de
recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo asignar roles
en el ámbito del grupo de recursos, ya que la mayoría de las aplicaciones agrupan todos
sus recursos de Azure en un único grupo de recursos.

CLI de Azure
A un usuario, grupo o entidad de servicio de aplicación se le asigna el rol en Azure
con el comando az role assignment create. Puede especificar un grupo con su
identificador de objeto.

Azure CLI

az role assignment create --assignee {objectId} \


--scope
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"

Para obtener los nombres de roles que se pueden asignar, use el comando az role
definition list.

Azure CLI

az role definition list --query "sort_by([].{roleName:roleName,


description:description}, &roleName)" --output table

Por ejemplo, para permitir que los miembros de un grupo con un ID de objeto de
00000000-0000-0000-0000-000000000000 lea, escriba y elimine el acceso a los

contenedores y datos de blobs de Azure Storage para todas las cuentas de


almacenamiento del grupo de recursos msdocs-python-sdk-auth-example en la
suscripción con ID 11111111-1111-1111-1111-111111111111 , asignaría el rol de
Colaborador de datos de blobs de almacenamiento al grupo mediante el siguiente
comando.

Azure CLI

az role assignment create --assignee 00000000-0000-0000-0000-


000000000000 \
--scope /subscriptions/11111111-1111-1111-1111-
111111111111/resourceGroups/msdocs-python-sdk-auth-example \
--role "Storage Blob Data Contributor"

Para obtener información sobre cómo asignar permisos en el nivel de recurso o


suscripción mediante la CLI de Azure, consulte el artículo Asignación de roles de
Azure mediante la CLI de Azure.
3 - Inicio de sesión en Azure mediante la CLI de
Azure, Azure PowerShell, la CLI para
desarrolladores de Azure o en un explorador
CLI de Azure

Abra un terminal en la estación de trabajo del desarrollador e inicie sesión en Azure


desde la CLI de Azure.

Azure CLI

az login

4: Implementación de DefaultAzureCredential
en la aplicación
Para autenticar objetos de cliente del SDK de Azure en Azure, la aplicación debe usar la
clase DefaultAzureCredential del paquete [Link] . En este escenario,
DefaultAzureCredential comprobará secuencialmente si el desarrollador ha iniciado

sesión en Azure mediante la CLI de Azure, Azure PowerShell o la CLI para


desarrolladores de Azure. Si el desarrollador ha iniciado sesión en Azure con cualquiera
de estas herramientas, la aplicación usará las credenciales usadas para iniciar sesión en
la herramienta para autenticarse en Azure.

Empiece agregando el paquete [Link] a la aplicación.

terminal

pip install azure-identity

A continuación, para cualquier código Python que cree un objeto de cliente del SDK de
Azure en la aplicación, querrá:

1. Importar la clase DefaultAzureCredential desde el módulo [Link] .


2. Crear un objeto DefaultAzureCredential .
3. Pasar el objeto DefaultAzureCredential al constructor de objetos de cliente del
SDK de Azure.

En el segmento de código siguiente se muestra un ejemplo de estos pasos.


Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

# Acquire a credential object


token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
account_url="[Link]
credential=token_credential)

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Autenticación de aplicaciones
hospedadas en recursos de Azure con el
SDK de Azure para Python
Artículo • 26/08/2024

Al hospedar una aplicación en Azure mediante servicios como Azure App Service, Azure
Virtual Machines o Azure Container Instances, el enfoque recomendado para autenticar
una aplicación en los recursos de Azure es con la identidad administrada.

Una identidad administrada proporciona una identidad para la aplicación para que
pueda conectarse a otros recursos de Azure sin necesidad de usar una clave secreta u
otro secreto de aplicación. Internamente, Azure conoce la identidad de la aplicación y a
qué recursos se le permite conectarse. Azure usa esta información para obtener
automáticamente tokens de Microsoft Entra para que la aplicación permita la conexión a
otros recursos de Azure, todo ello sin tener que administrar ningún secreto de
aplicación.

7 Nota

Las aplicaciones que se ejecutan en Azure Kubernetes Service (AKS) pueden usar
una identidad de carga de trabajo para autenticarse con recursos de Azure. En AKS,
una identidad de carga de trabajo representa una relación de confianza entre una
identidad administrada y una cuenta de servicio de Kubernetes. Si una aplicación
implementada en AKS está configurada con una cuenta de servicio de Kubernetes
en dicha relación, DefaultAzureCredential autentica la aplicación en Azure
mediante la identidad administrada. La autenticación mediante una identidad de
carga de trabajo se describe en Uso de ID de carga de trabajo de Microsoft Entra
con Azure Kubernetes Service. Para conocer los pasos sobre cómo configurar la
identidad de carga de trabajo, consulte Implementación y configuración de la
identidad de carga de trabajo en un clúster de Azure Kubernetes Service (AKS).

Tipos de identidad administrada


Hay dos tipos de identidades administradas:

Identidades administradas asignadas por el sistema: este tipo de identidad


administrada se proporciona mediante un recurso de Azure y está vinculado a
dicho recurso. Al habilitar la identidad administrada en un recurso de Azure,
obtendrá una identidad administrada asignada por el sistema para ese recurso.
Una identidad administrada asignada por el sistema está vinculada al ciclo de vida
del recurso de Azure al que está asociada. Por tanto, cuando se elimina el recurso,
Azure elimina automáticamente la identidad. Dado que todo lo que tiene que
hacer es habilitar la identidad administrada para el recurso de Azure que hospeda
el código, este enfoque es el tipo de identidad administrada más fácil de usar.
Identidades administradas asignadas por el usuario: también puede crear una
identidad administrada como un recurso independiente de Azure. Este enfoque se
usa con mayor frecuencia cuando la solución tiene varias cargas de trabajo que se
ejecutan en varios recursos de Azure que deben compartir la misma identidad y los
mismos permisos. Por ejemplo, si la solución tiene componentes que se ejecutan
en varias instancias de App Service y de máquina virtual que necesitan acceso al
mismo conjunto de recursos de Azure, tiene sentido una identidad administrada
asignada por el usuario que se use en esos recursos.

En este artículo se describen los pasos para habilitar y usar una identidad administrada
asignada por el sistema para una aplicación. Si necesita usar una identidad administrada
asignada por el usuario, consulte el artículo Administración de identidades
administradas asignadas por el usuario para obtener información sobre cómo crear una
identidad administrada asignada por el usuario.

1: Activación de la identidad administrada en el


recurso de Azure que hospeda la aplicación
El primer paso es habilitar la identidad administrada en el recurso de Azure que
hospeda la aplicación. Por ejemplo, si hospeda una aplicación de Django mediante
Azure App Service, debe habilitar la identidad administrada para la aplicación web de
App Service que hospeda la aplicación. Si usas una máquina virtual para hospedar la
aplicación, debe permitir que la máquina virtual use la identidad administrada.

Puede habilitar la identidad administrada para que se use para un recurso de Azure
mediante Azure Portal o la CLI de Azure.

CLI de Azure

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en


una estación de trabajo con la CLI de Azure instalada.

Los comandos de la CLI de Azure que se usan para habilitar la identidad


administrada para un recurso de Azure tienen el formato az <command-group>
identity --resource-group <resource-group-name> --name <resource-name> . A
continuación se muestran comandos específicos para los servicios populares de
Azure.

Azure App Service

Azure CLI

az webapp identity assign --resource-group <resource-group-name> -


name <web-app-name>

El resultado tendrá un aspecto similar al siguiente.

JSON

{
"principalId": "99999999-9999-9999-9999-999999999999",
"tenantId": "33333333-3333-3333-3333-333333333333",
"type": "SystemAssigned",
"userAssignedIdentities": null
}

El valor principalId es el identificador único de la identidad administrada.


Mantenga una copia de este resultado, ya que necesitará estos valores en el paso
siguiente.

2: Asignación de roles a la identidad


administrada
A continuación, debe determinar qué roles (permisos) necesita la aplicación y asignar la
identidad administrada a dichos roles en Azure. Se pueden asignar roles a una identidad
administrada en un ámbito de recurso, grupo de recursos o suscripción. En este ejemplo
se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de
las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.

CLI de Azure

En Azure, los roles se asignan a una identidad administrada mediante el comando


az role assignment create. Para el usuario asignado, use el principalId que copió
en el paso 1.
Azure CLI

az role assignment create --assignee {managedIdentityprincipalId} \


--scope
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"

Para obtener los nombres de roles a los que se puede asignar una entidad de
servicio, use el comando az role definition list.

Azure CLI

az role definition list \


--query "sort_by([].{roleName:roleName, description:description},
&roleName)" \
--output table

Por ejemplo, para permitir que la identidad administrada con ID de 99999999-9999-


9999-9999-999999999999 lea, escriba y elimine el acceso a los contenedores y datos

de blobs de Azure Storage para todas las cuentas de almacenamiento del grupo de
recursos msdocs-python-sdk-auth-example en la suscripción con ID 11111111-1111-
1111-1111-111111111111 , asignaría el rol de Colaborador de datos de blobs de

almacenamiento a la entidad de servicio de la aplicación mediante el siguiente


comando.

Azure CLI

az role assignment create --assignee 99999999-9999-9999-9999-


999999999999 \
--scope /subscriptions/11111111-1111-1111-1111-
111111111111/resourceGroups/msdocs-python-sdk-auth-example \
--role "Storage Blob Data Contributor"

Para obtener información sobre cómo asignar permisos en el nivel de recurso o


suscripción mediante la CLI de Azure, consulte el artículo Asignación de roles de
Azure mediante la CLI de Azure.

3: Implementación de DefaultAzureCredential
en la aplicación
Cuando el código se ejecuta en Azure y la identidad administrada se ha habilitado en el
recurso de Azure que hospeda la aplicación, DefaultAzureCredential determina las
credenciales que se usarán en el orden siguiente:

1. Comprueba el entorno de una entidad de servicio tal como se define en las


variables de entorno AZURE_CLIENT_ID , AZURE_TENANT_ID y AZURE_CLIENT_SECRET o
AZURE_CLIENT_CERTIFICATE_PATH y (opcionalmente)

AZURE_CLIENT_CERTIFICATE_PASSWORD .

2. Comprueba los parámetros de palabra clave de una identidad administrada


asignada por el usuario. Puede pasar una identidad administrada asignada por el
usuario especificando su identificador de cliente en el parámetro
managed_identity_client_id .

3. Comprueba la variable de entorno AZURE_CLIENT_ID para el identificador de cliente


de una identidad administrada asignada por el usuario.
4. Usa la identidad administrada asignada por el sistema para el recurso de Azure si
está habilitada.

Puede excluir las identidades administradas de la credencial estableciendo el parámetro


de palabra clave exclude_managed_identity_credential True .

En este artículo, se usa la identidad administrada asignada por el sistema para una
aplicación web de App de Azure Service, por lo que no es necesario configurar una
identidad administrada en el entorno ni pasarla como parámetro. En los pasos
siguientes se muestra cómo usar DefaultAzureCredential .

Primero, agregue el paquete [Link] a la aplicación.

terminal

pip install azure-identity

A continuación, para cualquier código Python que cree un objeto de cliente del SDK de
Azure en la aplicación, querrá:

1. Importar la clase DefaultAzureCredential desde el módulo [Link] .


2. Crear un objeto DefaultAzureCredential .
3. Pasar el objeto DefaultAzureCredential al constructor de objetos de cliente del
SDK de Azure.

En el segmento de código siguiente se muestra un ejemplo de estos pasos.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
account_url="[Link]
credential=token_credential)

Como se describe en el artículo Información general sobre la autenticación del SDK de


Azure para Python, DefaultAzureCredential admite varios métodos de autenticación y
determina el método de autenticación que se usa en tiempo de ejecución. La ventaja de
este enfoque es que la aplicación puede usar diferentes métodos de autenticación en
distintos entornos sin implementar código específico del entorno. Cuando el código
anterior se ejecute en la estación de trabajo durante el desarrollo local,
DefaultAzureCredential usará una entidad de servicio de aplicación, según lo

determinado por la configuración del entorno o las credenciales de la herramienta de


desarrollador para autenticarse con otros recursos de Azure. Por lo tanto, se puede usar
el mismo código para autenticar la aplicación en los recursos de Azure durante el
desarrollo local y cuando se implementa en Azure.

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Autenticación en recursos de Azure
desde aplicaciones Python hospedadas
en el entorno local
Artículo • 26/08/2024

Las aplicaciones hospedadas fuera de Azure (por ejemplo, locales o en un centro de


datos de terceros) deben usar una entidad de servicio de aplicación para autenticarse en
Azure al acceder a los recursos de Azure. Los objetos de entidad de servicio de
aplicación se crean mediante el proceso de registro de aplicaciones en Azure. Cuando se
crea una entidad de servicio de aplicación, se generará un id. de cliente y un secreto de
cliente para la aplicación. El identificador de cliente, el secreto de cliente y el
identificador de inquilino se almacenan en variables de entorno para que el SDK de
Azure para Python las pueda usar para autenticar la aplicación en Azure en tiempo de
ejecución.

Debe crear un registro de aplicación diferente para cada entorno en el que se hospeda
la aplicación. Esto permite configurar permisos de recursos específicos del entorno para
cada entidad de servicio y asegurarse de que una aplicación implementada en un
entorno no se comunique con los recursos de Azure que forman parte de otro entorno.

1: Registro de la aplicación en Azure AD


Una aplicación se puede registrar en Azure mediante Azure Portal o la CLI de Azure.

CLI de Azure

Azure CLI

az ad sp create-for-rbac --name <app-name>

El resultado de este comando será similar al siguiente: Anote estos valores o


mantenga esta ventana abierta, ya que necesitará estos valores en los pasos
siguientes y no podrá volver a ver el valor de la contraseña (secreto del cliente).

JSON

{
"appId": "00000000-0000-0000-0000-000000000000",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "abcdefghijklmnopqrstuvwxyz",
"tenant": "33333333-3333-3333-3333-333333333333"
}

2: Asignación de roles a la entidad de servicio


de la aplicación
A continuación, debe determinar qué roles (permisos) necesita la aplicación y en qué
recursos y asignar dichos roles a la aplicación. Los roles se pueden asignar a un rol en el
ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo
asignar roles a la entidad de servicio en el ámbito del grupo de recursos, ya que la
mayoría de las aplicaciones agrupan todos sus recursos de Azure en un único grupo de
recursos.

CLI de Azure

Los roles se asignan a las entidades de servicio mediante el comando az role


assignment create.

Azure CLI

az role assignment create --assignee {appId} \


--scope
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"

Para obtener los nombres de roles a los que se puede asignar una entidad de
servicio, use el comando az role definition list.

Azure CLI

az role definition list \


--query "sort_by([].{roleName:roleName, description:description},
&roleName)" \
--output table

Por ejemplo, para permitir que la entidad de servicio con el appId de 00000000-
0000-0000-0000-000000000000 lea, escriba y elimine el acceso a los contenedores y

datos de blobs de Azure Storage para todas las cuentas de almacenamiento del
grupo de recursos msdocs-python-sdk-auth-example en la suscripción con ID
11111111-1111-1111-1111-111111111111 , asignaría el rol de Colaborador de datos de
blobs de almacenamiento a la entidad de servicio de la aplicación mediante el
siguiente comando.

Azure CLI

az role assignment create --assignee 00000000-0000-0000-0000-


000000000000 \
--scope /subscriptions/11111111-1111-1111-1111-
111111111111/resourceGroups/msdocs-python-sdk-auth-example \
--role "Storage Blob Data Contributor"

Para obtener información sobre cómo asignar permisos en el nivel de recurso o


suscripción mediante la CLI de Azure, consulte el artículo Asignación de roles de
Azure mediante la CLI de Azure.

3: Configuración de variables de entorno para


la aplicación
Debe establecer las variables de entorno AZURE_CLIENT_ID , AZURE_TENANT_ID y
AZURE_CLIENT_SECRET para el proceso que ejecuta la aplicación de Python para que las

credenciales de la entidad de servicio de la aplicación estén disponibles para la


aplicación en tiempo de ejecución. El objeto DefaultAzureCredential busca la
información de la entidad de servicio en estas variables de entorno.

Cuando se usa Gunicorn para ejecutar aplicaciones web de Python en un entorno de


servidor UNIX, se pueden especificar variables de entorno para una aplicación mediante
la directiva EnvironmentFile del archivo [Link] , como se muestra a
continuación.

[Link]

[Unit]
Description=gunicorn daemon
After=[Link]

[Service]
User=www-user
Group=www-data
WorkingDirectory=/path/to/python-app
EnvironmentFile=/path/to/python-app/py-env/app-environment-variables
ExecStart=/path/to/python-app/py-env/gunicorn --config [Link] wsgi:app

[Install]
WantedBy=[Link]
El archivo especificado en la directiva EnvironmentFile debe contener una lista de
variables de entorno con sus valores, como se muestra a continuación.

Bash

AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>

4: Implementación de DefaultAzureCredential
en su aplicación
Para autenticar objetos de cliente del SDK de Azure en Azure, la aplicación debe usar la
clase DefaultAzureCredential del paquete [Link] .

Empiece agregando el paquete [Link] a la aplicación.

terminal

pip install azure-identity

A continuación, para cualquier código Python que cree un objeto de cliente del SDK de
Azure en la aplicación, querrá:

1. Importar la clase DefaultAzureCredential desde el módulo [Link] .


2. Crear un objeto DefaultAzureCredential .
3. Pasar el objeto DefaultAzureCredential al constructor de objetos de cliente del
SDK de Azure.

En el segmento de código siguiente se muestra un ejemplo de esto.

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

# Acquire a credential object


token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
account_url="[Link]
credential=token_credential)
Cuando el código anterior crea una instancia del objeto DefaultAzureCredential ,
DefaultAzureCredential lee las variables de entorno AZURE_TENANT_ID , AZURE_CLIENT_ID

y AZURE_CLIENT_SECRET para que la información de la entidad de servicio de la aplicación


se conecte a Azure.

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Métodos adicionales para autenticarse
en recursos de Azure desde aplicaciones
de Python
Artículo • 26/08/2024

En este artículo se enumeran los métodos adicionales que las aplicaciones pueden usar
para autenticarse en los recursos de Azure. Los métodos de este artículo se usan con
menos frecuencia; cuando sea posible, le recomendamos que use uno de los métodos
descritos en Información general sobre la autenticación de aplicaciones de Python en
Azure mediante el SDK de Azure.

Autenticación interactiva del explorador


Este método autentica interactivamente una aplicación mediante
InteractiveBrowserCredential con la recopilación de credenciales de usuario en el
sistema predeterminado.

La autenticación del explorador interactivo habilita la aplicación para todas las


operaciones que permiten las credenciales de inicio de sesión interactivas. Como
resultado, si es el propietario o administrador de la suscripción, el código tiene acceso
inherente a la mayoría de los recursos de esa suscripción sin tener que asignar permisos
específicos. Por este motivo, solo se aconseja el uso de la autenticación interactiva del
explorador con fines de experimentación.

Habilitación de aplicaciones para la autenticación


interactiva del explorador
Siga estos pasos para permitir que la aplicación se autentique a través del flujo de
explorador interactivo. Estos pasos también funcionan para la autenticación de código
de dispositivo descrita más adelante. Seguir este proceso solo es necesario si usa
InteractiveBrowserCredential en el código.

1. En Azure Portal , vaya a Microsoft Entra ID y seleccione Registros de aplicaciones


en el menú de la izquierda.

2. Seleccione el registro de la aplicación y, a continuación, seleccione Autenticación.

3. En Configuración avanzada, seleccione Sí en Permitir flujos de cliente público.


4. Seleccione Guardar para aplicar los cambios.

5. Para autorizar la aplicación para recursos específicos, vaya al recurso en cuestión,


seleccione Permisos de API y habilite Microsoft Graph y otros recursos a los que
quiera acceder. Microsoft Graph normalmente está habilitado de forma
predeterminada.

) Importante

También debe ser el administrador del inquilino para conceder el


consentimiento a la aplicación al iniciar sesión por primera vez.

Si no puede configurar la opción de flujo de código de dispositivo en Active Directory,


puede que sea necesario que la aplicación sea multiinquilino. Para realizar este cambio,
vaya al panel Autenticación , seleccione Cuentas en cualquier directorio organizativo
(en Tipos de cuenta admitidos) y, a continuación, seleccione Sí para Permitir flujos de
cliente público.

Ejemplo de uso de InteractiveBrowserCredential


En el ejemplo siguiente se muestra el uso de InteractiveBrowserCredential para
autenticarse con SubscriptionClient:

Python

# Show Azure subscription information

import os
from [Link] import InteractiveBrowserCredential
from [Link] import SubscriptionClient

credential = InteractiveBrowserCredential()
subscription_client = SubscriptionClient(credential)

subscription = next(subscription_client.[Link]())
print(subscription.subscription_id)

Para un control más exacto, como, por ejemplo, para establecer URI de redirección,
puede proporcionar argumentos específicos a InteractiveBrowserCredential , como
redirect_uri .

Autenticación interactiva con agente


Este método autentica de forma interactiva una aplicación mediante
InteractiveBrowserBrokerCredential con recopilación de credenciales de usuario
mediante el agente de autenticación del sistema. Este tipo de credencial se proporciona
en el complemento Azure Identity Broker, azure-identity-broker .

Un agente de autenticación del sistema es una aplicación que se ejecuta en el equipo de


un usuario que administra los protocolos de enlace de autenticación y el mantenimiento
de tokens para todas las cuentas conectadas. Actualmente, solo se admite el agente de
autenticación de Windows, el Administrador de cuentas web (WAM). Los usuarios de
macOS y Linux se autenticarán a través de un explorador.

Se admiten las cuentas personales de Microsoft y las cuentas profesionales o educativas.


Si se usa una versión compatible de Windows, la interfaz de usuario predeterminada
basada en explorador se reemplaza por una experiencia de autenticación más fluida,
similar a las aplicaciones integradas de Windows.

La autenticación interactiva con agente habilita la aplicación para todas las operaciones
permitidas por las credenciales de inicio de sesión interactivas. Como resultado, si es el
propietario o administrador de la suscripción, el código tiene acceso inherente a la
mayoría de los recursos de esa suscripción sin tener que asignar permisos específicos.

Habilitación de aplicaciones para la autenticación


interactiva con agente
Siga estos pasos para permitir que la aplicación se autentique a través del flujo de
agente interactivo.

1. En Azure Portal , vaya a Microsoft Entra ID y seleccione Registros de aplicaciones


en el menú de la izquierda.

2. Seleccione el registro de la aplicación y, a continuación, seleccione Autenticación.

3. Agregue el URI de redirección de WAM al registro de la aplicación a través de una


configuración de plataforma:

a. En Configuraciones de plataforma, seleccione + Agregar una plataforma.

b. En Configurar plataformas, seleccione el mosaico del tipo de aplicación


(plataforma) para configurar sus opciones; por ejemplo, aplicaciones para
dispositivos móviles y de escritorio.

c. En URI de redirección personalizados, escriba el URI de redirección de WAM:

text
ms-appx-web://[Link]/{client_id}

El marcador de posición {client_id} debe reemplazarse por el identificador de


aplicación (cliente) que aparece en el panel Información general del registro de
la aplicación.

d. Seleccione Configurar.

Para obtener más información, consulte Adición de un URI de redirección a un


registro de aplicación.

4. De nuevo en el panel Autenticación, en Configuración avanzada, seleccione Sí en


Permitir flujos de clientes públicos.

5. Seleccione Guardar para aplicar los cambios.

6. Para autorizar la aplicación para recursos específicos, vaya al recurso en cuestión,


seleccione Permisos de API y habilite Microsoft Graph y otros recursos a los que
quiera acceder. Microsoft Graph normalmente está habilitado de forma
predeterminada.

) Importante

También debe ser el administrador del inquilino para conceder el


consentimiento a la aplicación al iniciar sesión por primera vez.

Ejemplo de uso de InteractiveBrowserBrokerCredential


En el ejemplo siguiente se muestra el uso de InteractiveBrowserBrokerCredential para
autenticarse con BlobServiceClient:

Python

import win32gui
from [Link] import InteractiveBrowserBrokerCredential
from [Link] import BlobServiceClient

# Get the handle of the current window


current_window_handle = [Link]()

# To authenticate and authorize with an app, use the following line to get a
credential and
# substitute the <app_id> and <tenant_id> placeholders with the values for
your app and tenant.
# credential =
InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handl
e, client_id=<app_id>, tenant_id=<tenant_id>)
credential =
InteractiveBrowserBrokerCredential(parent_window_handle=current_window_handl
e)
client = BlobServiceClient("[Link]
name>.[Link]/", credential=credential)

# Prompt for credentials appears on first use of the client


for container in client.list_containers():
print([Link])

Para un control más preciso, como establecer un tiempo de espera, puede proporcionar
argumentos específicos a InteractiveBrowserBrokerCredential , como timeout .

Para que el código se ejecute correctamente, a la cuenta de usuario se le debe asignar


un rol de Azure en la cuenta de almacenamiento que permita el acceso a contenedores
de blobs como "Colaborador de datos de la cuenta de almacenamiento". Si se especifica
una aplicación, debe tener los permisos de API establecidos para user_impersonation
Acceso a Azure Storage (paso 6 de la sección anterior). Este permiso de API permite
que la aplicación acceda a Azure Storage en nombre del usuario que inició sesión
después de conceder el consentimiento durante el inicio de sesión.

En la siguiente captura de pantalla se muestra la experiencia de inicio de sesión del


usuario:
Autenticación de la cuenta del sistema predeterminada a
través de WAM
Muchas personas siempre inician sesión en Windows con la misma cuenta de usuario y,
por lo tanto, solo quieren autenticarse con esa cuenta. Obligar a estas personas a
seleccionar repetidamente su única cuenta en un selector de cuentas puede resultar
molesto. Afortunadamente, InteractiveBrowserBrokerCredential ofrece una manera de
permitir que estos usuarios inicien sesión silenciosamente con la cuenta del sistema
predeterminada, que, en Windows, es el usuario que ha iniciado sesión.

Para habilitar el inicio de sesión con la cuenta del sistema predeterminada:

1. Asegúrese de usar la versión azure-identity-broker 1.1.0 o posterior.

2. Establezca el argumento use_default_broker_account en True al crear una


instancia de InteractiveBrowserBrokerCredential .
En el ejemplo siguiente se muestra cómo habilitar el inicio de sesión con la cuenta del
sistema predeterminada:

Python

import win32gui
from [Link] import InteractiveBrowserBrokerCredential

# code omitted for brevity

window_handle = [Link]()

credential = InteractiveBrowserBrokerCredential(
parent_window_handle=window_handle,
use_default_broker_account=True
)

Una vez que opte por este comportamiento, el tipo de credencial intenta iniciar sesión
pidiendo a la Biblioteca de autenticación de Microsoft subyacente (MSAL) que realice el
inicio de sesión para la cuenta del sistema predeterminada. Si se produce un error en el
inicio de sesión, el tipo de credencial vuelve a mostrar el cuadro de diálogo del selector
de cuentas, donde el usuario puede seleccionar la cuenta adecuada.

Autenticación con código de dispositivo


Este método autentica de forma interactiva a un usuario en dispositivos con una interfaz
de usuario limitada (normalmente dispositivos sin teclado):

1. Cuando la aplicación intenta autenticarse, la credencial solicita al usuario una


dirección URL y un código de autenticación.
2. El usuario visita la dirección URL en un dispositivo independiente con explorador
(equipos, smartphones, etc.) y escribe el código.
3. El usuario sigue un proceso de autenticación normal en el explorador.
4. Tras la autenticación, la aplicación queda autenticada en el dispositivo.

Para más información, consulte Flujo de concesión de autorización de dispositivo de


OAuth 2.0 y la Plataforma de identidad de Microsoft.

La autenticación de código de dispositivo en un entorno de desarrollo habilita la


aplicación para todas las operaciones que permiten las credenciales de inicio de sesión
interactivas. Como resultado, si es el propietario o administrador de la suscripción, el
código tiene acceso inherente a la mayoría de los recursos de esa suscripción sin tener
que asignar permisos específicos. Sin embargo, puede usar este método con un id. de
cliente específico, en lugar del predeterminado, para el que puede asignar permisos
específicos.

Autenticación con un nombre de usuario y una


contraseña
Este método autentica una aplicación mediante las credenciales recopiladas
previamente y el objeto UsernamePasswordCredential.

) Importante

No se recomienda usar este método de autenticación porque es menos seguro que


otros flujos. Además, este método no es interactivo y, por lo tanto, no es
compatible con ninguna forma de autenticación multifactor o solicitud de
consentimiento. La aplicación ya debe tener el consentimiento del usuario o de un
administrador de directorio.

Además, este método autentica solo las cuentas profesionales y educativas; no se


admiten cuentas de Microsoft. Para obtener más información, consulte Registro de
la organización para usar Microsoft Entra ID.

Python

# Show Azure subscription information

import os
from [Link] import SubscriptionClient
from [Link] import UsernamePasswordCredential

# Retrieve the information necessary for the credentials, which are assumed
to
# be in environment variables for the purpose of this example.
client_id = [Link]["AZURE_CLIENT_ID"]
tenant_id = [Link]["AZURE_TENANT_ID"]
username = [Link]["AZURE_USERNAME"]
password = [Link]["AZURE_PASSWORD"]

credential = UsernamePasswordCredential(client_id=client_id, tenant_id =


tenant_id,
username = username, password = password)

subscription_client = SubscriptionClient(credential)

subscription = next(subscription_client.[Link]())
print(subscription.subscription_id)
Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Cadenas de credenciales en la biblioteca
cliente de identidades de Azure para
Python
Artículo • 24/09/2024

La biblioteca cliente de identidades de Azure proporciona credenciales, clases públicas


que implementan el protocolo TokenCredential de la biblioteca de Azure Core. Una
credencial representa un flujo de autenticación distinto para adquirir un token de acceso
de Microsoft Entra ID. Estas credenciales se pueden encadenar para formar una
secuencia ordenada de mecanismos de autenticación que se van a intentar.

Funcionamiento de una credencial encadenada


En tiempo de ejecución, una cadena de credenciales intenta autenticarse mediante la
primera credencial de la secuencia. Si esa credencial no puede adquirir un token de
acceso, se intenta utilizar la siguiente credencial de la secuencia, y así sucesivamente
hasta que se obtenga correctamente un token de acceso. En el siguiente diagrama de
secuencia se ilustra este comportamiento:
Python app Credential chain TokenCredential instance

Authenticate to Microsoft Entra ID


1

get_token
2

loop [Traverse
TokenCredential
collection until
AccessToken received]

Fetch token
3

get_token
4

break [when Result is


AccessToken]

Result
5

AccessToken
6

Python app Credential chain TokenCredential instance

¿Por qué usar cadenas de credenciales?


Una credencial encadenada puede ofrecer las siguientes ventajas:

Reconocimiento del entorno: selecciona automáticamente la credencial más


adecuada en función del entorno en el que se ejecuta la aplicación. Sin ella, tendría
que escribir código como este:

Python

# Set up credential based on environment (Azure or local development)


if [Link]("WEBSITE_HOSTNAME"):
credential =
ManagedIdentityCredential(client_id=user_assigned_client_id)
else:
credential = AzureCliCredential()

Transiciones fluidas: la aplicación puede pasar del desarrollo local al entorno de


ensayo o producción sin cambiar el código de autenticación.
Resistencia mejorada: incluye un mecanismo de reserva que pasa a la siguiente
credencial cuando la anterior no puede adquirir un token de acceso.

Cómo elegir una credencial encadenada


Hay dos filosofías dispares para encadenar credenciales:

"Desmontar" una cadena: comience con una cadena preconfigurada y excluya lo


que no necesita. Para este enfoque, consulte la sección Información general sobre
DefaultAzureCredential.
"Crear" una cadena: comience con una cadena vacía e incluya solo lo que necesita.
Para este enfoque, consulte la sección Información general sobre
ChainedTokenCredential.

Información general sobre


DefaultAzureCredential
DefaultAzureCredential es una cadena preconfigurada de credenciales fundamentada.
Está diseñada para admitir muchos entornos, junto con los flujos de autenticación y las
herramientas de desarrollo más comunes. En forma gráfica, la cadena subyacente tiene
este aspecto:

CREDENTIALS

Environment Workload Identity Managed Identity Shared Token Cache Azure CLI Azure PowerShell Azure Developer CLI Interactive browser


CREDENTIAL TYPES

Deployed service Developer tool Interactive

Orden en el que DefaultAzureCredential intenta las credenciales.

ノ Expandir tabla

compra Credential: Descripción ¿Habilitado de


forma
predeterminada?

1 Entorno Lee una colección de variables de entorno para Sí


determinar si una entidad de servicio de
aplicación (usuario de aplicación) está
configurada para la aplicación. Si es así,
DefaultAzureCredential usa estos valores para
autenticar la aplicación en Azure. Este método
se usa con más frecuencia en entornos de
compra Credential: Descripción ¿Habilitado de
forma
predeterminada?

servidor, pero también se puede usar al


desarrollar localmente.

2 Identidad de Si la aplicación se implementa en un host de Sí


carga de Azure con la identidad de carga de trabajo
trabajo habilitada, autentica esa cuenta.

3 Identidad Si la aplicación se implementa en un host de Sí


administrada Azure con la identidad administrada habilitada,
se autentica la aplicación en Azure usando esa
identidad administrada.

4 Caché de Si el desarrollador se autenticó en Azure Sí


tokens iniciando sesión en Visual Studio, se autentica la
compartidos aplicación en Azure con esa misma cuenta.
(Solo Windows).

5 CLI de Azure Si el desarrollador se autenticó en Azure Sí


mediante el comando az login de la CLI de
Azure, se autentica la aplicación en Azure con
esa misma cuenta.

6 Azure Si el desarrollador se autenticó en Azure Sí


PowerShell mediante el cmdlet Connect-AzAccount de Azure
PowerShell, se autentica la aplicación en Azure
con esa misma cuenta.

7 CLI de Si el desarrollador se autenticó en Azure Sí


desarrollo de mediante el comando azd auth login de la CLI
Azure para desarrolladores de Azure, se autentica con
esa cuenta.

8 Navegador Si está habilitado, autenticará de forma No


interactivo interactiva al desarrollador mediante el
explorador predeterminado del sistema actual.

En su forma más sencilla, puede usar la versión sin parámetros de


DefaultAzureCredential de la siguiente manera:

Python

from [Link] import DefaultAzureCredential


from [Link] import BlobServiceClient

# Acquire a credential object


credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="[Link]
credential=credential
)

Personalización de DefaultAzureCredential
Para quitar una credencial de DefaultAzureCredential , use el parámetro de palabra
clave con el prefijo exclude correspondiente. Por ejemplo:

Python

credential = DefaultAzureCredential(
exclude_environment_credential=True,
exclude_workload_identity_credential=True,
managed_identity_client_id=user_assigned_client_id
)

En el ejemplo de código anterior, EnvironmentCredential y WorkloadIdentityCredential


se quitan de la cadena de credenciales. Como resultado, la primera credencial que se va
a intentar es ManagedIdentityCredential . La cadena modificada tiene este aspecto:

Managed Identity Shared Token Cache Azure CLI Azure PowerShell Azure Developer CLI

7 Nota

InteractiveBrowserCredential se excluye de forma predeterminada y, por tanto, no

se muestra en el diagrama anterior. Para incluir InteractiveBrowserCredential ,


establezca el parámetro de palabra clave exclude_interactive_browser_credential
en False al llamar al constructor de DefaultAzureCredential .

A medida que se establecen más parámetros de palabra clave con el prefijo exclude en
True (se configuran exclusiones de credenciales), las ventajas de usar

DefaultAzureCredential disminuyen. En tales casos, ChainedTokenCredential es una

mejor opción y requiere menos código. Para ilustrarlo, estos dos ejemplos de código se
comportan de la misma manera:

DefaultAzureCredential

Python
credential = DefaultAzureCredential(
exclude_environment_credential=True,
exclude_workload_identity_credential=True,
exclude_shared_token_cache_credential=True,
exclude_azure_powershell_credential=True,
exclude_azure_developer_cli_credential=True,
managed_identity_client_id=user_assigned_client_id
)

Información general sobre


ChainedTokenCredential
ChainedTokenCredential es una cadena vacía a la que agrega credenciales para
satisfacer las necesidades de la aplicación. Por ejemplo:

Python

credential = ChainedTokenCredential(
ManagedIdentityCredential(client_id=user_assigned_client_id),
AzureCliCredential()
)

El ejemplo de código anterior crea una cadena de credenciales adaptada formada por
dos credenciales. La variante de identidad administrada asignada por el usuario de
ManagedIdentityCredential se intenta primero, seguida de AzureCliCredential , si es

necesario. En forma gráfica, la cadena tiene este aspecto:

Managed Identity Azure CLI

 Sugerencia

Para mejorar el rendimiento, optimice el orden de las credenciales en


ChainedTokenCredential para el entorno de producción. Las credenciales diseñadas

para su uso en el entorno de desarrollo local deben agregarse en último lugar.

Guía de uso para DefaultAzureCredential


DefaultAzureCredential es, sin duda, la manera más fácil de empezar a trabajar con la

biblioteca cliente de identidades de Azure, pero esa comodidad conlleva ventajas y


desventajas. Una vez que implemente la aplicación en Azure, debe comprender los
requisitos de autenticación de la aplicación. Por esa razón, considere encarecidamente la
posibilidad de pasar de DefaultAzureCredential a una de las siguientes soluciones:

Una implementación de credencial específica, como ManagedIdentityCredential .


Una implementación de ChainedTokenCredential reducida optimizada para el
entorno Azure en el que se ejecuta la aplicación.

Aquí se detallan los motivos:

Desafíos de depuración: cuando se produce un error en la autenticación, puede


resultar difícil depurar e identificar las credenciales incorrectas. Debe habilitar el
registro para ver la progresión de una credencial a la siguiente y el estado de éxito
o error de cada una. Para obtener más información, consulte Depuración de una
credencial encadenada.
Sobrecarga de rendimiento: el proceso de probar secuencialmente varias
credenciales puede suponer una sobrecarga de rendimiento. Por ejemplo, cuando
se ejecuta en una máquina de desarrollo local, la identidad administrada no está
disponible. Por lo tanto, ManagedIdentityCredential siempre falla en el entorno de
desarrollo local, a menos que se deshabilite explícitamente a través de su
propiedad con prefijo exclude correspondiente.
Comportamiento imprevisible: DefaultAzureCredential comprueba la presencia
de determinadas variables de entorno . Es posible que alguien pueda agregar o
modificar estas variables de entorno en el nivel de sistema en el equipo host. Esos
cambios se aplican globalmente y, por tanto, modifican el comportamiento de
DefaultAzureCredential en tiempo de ejecución en cualquier aplicación que se

ejecute en esa máquina.

Depuración de una credencial encadenada


Para diagnosticar un problema inesperado o comprender lo que hace una credencial
encadenada, habilite el registro en la aplicación. Opcionalmente, filtre los registros solo
a esos eventos emitidos desde la biblioteca cliente de identidades de Azure. Por
ejemplo:

Python

import logging
from [Link] import DefaultAzureCredential
# Set the logging level for the Azure Identity library
logger = [Link]("[Link]")
[Link]([Link])

# Direct logging output to stdout. Without adding a handler,


# no logging output is visible.
handler = [Link](stream=[Link])
[Link](handler)

# Optional: Output logging levels to the console.


print(
f"Logger enabled for ERROR={[Link]([Link])}, "
f"WARNING={[Link]([Link])}, "
f"INFO={[Link]([Link])}, "
f"DEBUG={[Link]([Link])}"
)

Para fines ilustrativos, supongamos que se usa la forma sin parámetros de


DefaultAzureCredential para autenticar una solicitud en una cuenta ed Blob Storage. La

aplicación se ejecuta en el entorno de desarrollo local y el desarrollador se autentica en


Azure mediante la CLI de Azure. Supongamos también que el nivel de registro está
establecido en [Link] . Cuando se ejecuta la aplicación, aparecen las siguientes
entradas pertinentes en la salida:

Output

Logger enabled for ERROR=True, WARNING=True, INFO=True, DEBUG=True


No environment configuration found.
ManagedIdentityCredential will use IMDS
EnvironmentCredential.get_token failed: EnvironmentCredential authentication
unavailable. Environment variables are not fully configured.
Visit
[Link] to
troubleshoot this issue.
ManagedIdentityCredential.get_token failed: ManagedIdentityCredential
authentication unavailable, no response from the IMDS endpoint.
SharedTokenCacheCredential.get_token failed: SharedTokenCacheCredential
authentication unavailable. No accounts were found in the cache.
AzureCliCredential.get_token succeeded
[Authenticated account] Client ID: 00001111-aaaa-2222-bbbb-3333cccc4444.
Tenant ID: aaaabbbb-0000-cccc-1111-dddd2222eeee. User Principal Name:
unavailableUpn. Object ID (user): aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
DefaultAzureCredential acquired a token from AzureCliCredential

En la salida anterior, puede ver lo siguiente:

EnvironmentCredential , ManagedIdentityCredential y SharedTokenCacheCredential

no pudieron adquirir un token de acceso de Microsoft Entra, en ese orden.


La llamada a AzureCliCredential.get_token se realiza correctamente y la salida
también indica que DefaultAzureCredential adquirió un token de
AzureCliCredential . Dado que AzureCliCredential se realizó correctamente, no se

intentaron más credenciales.

7 Nota

En el ejemplo anterior, el nivel de registro está establecido en [Link] . Tenga


cuidado al usar este nivel de registro, ya que puede generar información
confidencial. Por ejemplo, en este caso, el identificador de cliente, el identificador
de inquilino y el identificador de objeto de la entidad de usuario del desarrollador
en Azure. Toda la información de seguimiento se ha quitado de la salida para
mayor claridad.

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Tutorial: Autenticación integrada para
aplicaciones de Python con servicios de
Azure
Artículo • 20/02/2024

El identificador de Entra de Microsoft junto con Azure Key Vault proporciona un medio
completo y práctico para que las aplicaciones se autentiquen con servicios de Azure y
servicios de terceros en los que intervienen las claves de acceso.

Después de proporcionar alguna información previa, en este tutorial se explican estas


características de autenticación en el contexto del ejemplo [Link]/Azure-
Samples/python-integrated-authentication .

Parte 1: Fondo
Aunque muchos servicios de Azure se basan exclusivamente en el control de acceso
basado en roles para la autorización, ciertos servicios controlan el acceso a sus
respectivos recursos mediante secretos o claves. Estos servicios incluyen Azure Storage,
bases de datos, servicios de Azure AI, Key Vault y Event Hubs.

Al crear una aplicación en la nube que acceda a estos servicios, puede usar Azure Portal,
la CLI de Azure o Azure PowerShell para crear y configurar claves para la aplicación. Las
claves que cree están vinculadas a directivas de acceso específicas y impiden el acceso a
esos recursos específicos de la aplicación por cualquier otro código no autorizado.

Dentro de este diseño general, normalmente las aplicaciones en la nube deben


administrar esas claves y autenticarse con cada servicio de forma individual, un proceso
que puede ser tedioso y propenso a errores. La administración de las claves
directamente en el código de la aplicación también pone en riesgo la exposición de esas
claves en el control de código fuente y las claves se podrían almacenar en estaciones de
trabajo de desarrollo no seguras.

Afortunadamente, Azure proporciona dos servicios específicos para simplificar el


proceso y proporcionar mayor seguridad:

Azure Key Vault proporciona almacenamiento seguro basado en la nube para


claves de acceso (junto con claves criptográficas y certificados, que no se tratan en
este artículo). Mediante el uso de Key Vault, la aplicación solo tiene acceso a estas
claves en tiempo de ejecución, por lo que nunca aparecen directamente en el
código fuente.
Con las identidades administradas de Microsoft Entra, una aplicación solo debe
autenticarse una vez con el identificador de Microsoft Entra. La aplicación se
autenticará automáticamente con otros servicios de Azure, incluido Key Vault.
Como resultado, el código nunca debe preocuparse de claves ni de otras
credenciales para esos servicios de Azure. Mejor aún, puede ejecutar el mismo
código tanto de forma local como en la nube con requisitos mínimos de
configuración.

En este tutorial se muestra cómo usar la identidad administrada de Microsoft Entra y


Key Vault juntas en la misma aplicación. Con el identificador de Entra de Microsoft y Key
Vault juntos, la aplicación nunca necesita autenticarse con servicios individuales de
Azure y puede acceder de forma sencilla y segura a las claves necesarias para los
servicios de terceros.

) Importante

En este artículo se usa el término genérico común "clave" para hacer referencia a lo
que se almacena como "secretos" en Azure Key Vault, por ejemplo, una clave de
acceso para una API REST. Este uso no debe confundirse con la administración de
claves criptográficas de Key Vault, que es una característica independiente de los
secretos de Key Vault.

Escenario de aplicación en la nube de ejemplo


Para comprender el proceso de autenticación de Azure más profundamente, considere
el siguiente escenario:

Una aplicación principal expone un punto de conexión de API público (no


autenticado) que responde a las solicitudes HTTP con datos JSON. El punto de
conexión de ejemplo que se muestra en este artículo se implementa como una
aplicación de Flask simple implementada en Azure App Service.

Para generar la respuesta, la API invoca una API de terceros que requiere una clave
de acceso. La aplicación recupera esa clave de acceso de Azure Key Vault en
tiempo de ejecución.

Antes de que la API devuelva una respuesta, escribe un mensaje en una cola de
Azure Storage para su procesamiento posterior. (El procesamiento específico de
estos mensajes no es relevante para el escenario principal).
7 Nota

Aunque un punto de conexión de API pública normalmente está protegido por su


propia clave de acceso, para los fines de este artículo se supone que el punto de
conexión está abierto y no autenticado. Esta suposición evita cualquier confusión
entre las necesidades de autenticación de la aplicación con las de un autor de
llamada externo de este punto de conexión. En este escenario no se muestra este
tipo de autor de llamada externo.

Parte 2: Requisitos de autenticación >>>


Parte 2: Necesidades de autenticación
en el escenario
Artículo • 20/02/2024

Parte anterior: Introducción y antecedentes

Dentro de este escenario de ejemplo, la aplicación principal tiene los siguientes


requisitos de autenticación:

Autenticarse con Azure Key Vault para acceder a la clave de API de terceros
almacenada.
Autenticarse con la API de terceros mediante la clave de API.
Autenticarse con Azure Queue Storage con las credenciales necesarias para la
cuenta de almacenamiento.

Con estos tres requisitos distintos, la aplicación tiene que administrar tres conjuntos de
credenciales: dos para los recursos de Azure (Key Vault y Queue Storage) y uno para un
recurso externo (la API de terceros).

Como se indicó anteriormente, puede administrar de forma segura todas las


credenciales en Key Vault excepto las credenciales necesarias para el propio Key Vault.
Una vez que la aplicación se autentica con Key Vault, puede recuperar cualquier otra
clave en tiempo de ejecución para autenticarse con servicios como Queue Storage.

Sin embargo, este enfoque requiere que la aplicación administre las credenciales por
separado para Key Vault. ¿Cómo puede administrar esa credencial de forma segura y
hacer que funcione tanto para el desarrollo local como para la implementación de
producción en la nube?

Una solución parcial consiste en almacenar la clave en una variable de entorno del lado
servidor, que al menos mantiene la clave fuera del control de código fuente. Por
ejemplo, puede establecer una variable de entorno a través de una configuración de
aplicación con App de Azure Service y Azure Functions. La desventaja de este enfoque
es que el código de una estación de trabajo de desarrollador debe replicar esa variable
de entorno localmente, lo que arriesga la exposición de las credenciales o la inclusión
accidental en el control de código fuente. Podría solucionar el problema hasta cierto
punto mediante la implementación de procedimientos especiales en la versión de
desarrollo del código, pero esto agrega complejidad al proceso de desarrollo.

Afortunadamente, la autenticación integrada con microsoft Entra ID permite que una


aplicación evite controlar todas las credenciales de Azure.
Autenticación integrada con una identidad
administrada
Muchos servicios de Azure, como Storage y Key Vault, se integran con Microsoft Entra
de forma que cuando una aplicación se autentica con el identificador de Microsoft Entra
mediante una identidad administrada, se autentica automáticamente con otros recursos
conectados. La autorización de la identidad se controla mediante el control de acceso
basado en rol (RBAC) y en ocasiones mediante otras directivas de acceso.

Esta integración significa que nunca necesita administrar credenciales relacionadas con
Azure en el código de la aplicación y esas credenciales nunca aparecen en las estaciones
de trabajo de desarrollo o en el control de código fuente. Además, cualquier control de
claves para las API y los servicios de terceros se realiza completamente en tiempo de
ejecución, con lo que las claves se mantienen seguras.

La identidad administrada solo funciona con aplicaciones que se implementan en Azure.


Para el desarrollo local, cree una entidad de servicio independiente para que sirva como
identidad de la aplicación cuando se ejecute localmente. Esta entidad de servicio está
disponible para las bibliotecas de Azure mediante variables de entorno, como se
describe en Autenticación de aplicaciones de Python en servicios de Azure durante el
desarrollo local mediante entidades de servicio. También puede asignar permisos de rol
a esta entidad de servicio junto con la identidad administrada que se usa en la nube.

Una vez configurado y asignado roles para la entidad de servicio local, el mismo código
funciona tanto localmente como en la nube para autenticar la aplicación con recursos
de Azure. Estos detalles se describen en Autenticación y autorización de aplicaciones,
pero la versión abreviada es la siguiente:

1. En el código, cree un objeto DefaultAzureCredential , que usa automáticamente la


identidad administrada cuando se ejecuta en Azure y la entidad de servicio
independiente cuando se ejecuta localmente.

2. Use esta credencial al crear el objeto de cliente adecuado para cualquier recurso al
que desea acceder (Key Vault, Queue Storage, etc).

3. La autenticación tiene lugar cuando se llama a un método de operación mediante


el objeto de cliente, que genera una llamada mediante la API REST al recurso.

4. Si la identidad de la aplicación es válida, Azure también comprueba si esa


identidad está autorizada para la operación específica.

En el resto de este tutorial se muestran todos los detalles del proceso en el contexto del
escenario de ejemplo y el código de ejemplo que lo acompaña.
En el script de aprovisionamiento del ejemplo, se crean todos los recursos en un grupo
de recursos llamado auth-scenario-rg . Este grupo se crea con el comando az group
create de la CLI de Azure.

Parte 3: Implementación de API de terceros >>>


Parte 3: Implementación de API de
terceros de ejemplo
Artículo • 05/03/2024

Parte anterior: Requisitos de autenticación

En el escenario de ejemplo, el punto de conexión público de la aplicación principal usa


una API de terceros que está protegida por una clave de acceso. En esta sección se
muestra una implementación de la API de terceros con Azure Functions, pero la API se
podría implementar de otras maneras e implementarse en un servidor en la nube y
hospedaje web diferentes. El único aspecto importante es que las solicitudes de cliente
al punto de conexión protegido deben incluir la clave de acceso. Cualquier aplicación
que invoque esta API debe administrar de forma segura esa clave.

Para fines de demostración, esta API se implementa en el punto de conexión


[Link] . Sin embargo, para

llamar a la API debe proporcionar la clave de acceso d0c5atM1cr0s0ft en el parámetro ?


code= de la dirección URL o en la propiedad 'x-functions-key' del encabezado HTTP.

Por ejemplo, después de implementar la aplicación y la API, pruebe esta dirección URL
en un explorador o curl: [Link]
[Link]/api/RandomNumber?code=d0c5atM1cr0s0ft .

Si la clave de acceso es válida, el punto de conexión devuelve una respuesta JSON que
contiene una única propiedad, "value", cuyo valor es un número entre 1 y 999, como
{"value": 959} .

El punto de conexión se ha escrito en Python y se ha implementado en Azure Functions.


El código es el siguiente:

Python

import logging
import random
import json

import [Link] as func

def main(req: [Link]) -> [Link]:


[Link]('RandomNumber invoked via HTTP trigger.')

random_value = [Link](1, 1000)


dict = { "value" : random_value }
return [Link]([Link](dict))

En el repositorio de ejemplo, este código se encuentra en


third_party_api/RandomNumber/__init__.py. La carpeta RandomNumber proporciona el
nombre de la función y __init__.py contiene el código. Otro archivo de la carpeta,
[Link], describe cuándo se desencadena la función. Otros archivos de la carpeta
principal third_party_api proporcionan detalles para la aplicación de funciones de Azure
que hospeda la propia función.

Para implementar el código, el script de aprovisionamiento del ejemplo lleva a cabo los
siguientes pasos:

1. Crea una cuenta de almacenamiento auxiliar para Azure Functions con el comando
az storage account create de la CLI de Azure.

2. Cree una aplicación de Azure Functions con el comando de la CLI de Azure, az


function app create.

3. Después de esperar 60 segundos para que el host se aprovisione por completo,


implemente el código mediante el comando Azure Functions Core Tools , func
azure functionapp publish.

4. Asigna la clave de acceso, d0c5atM1cr0s0ft , a la función. (Consulte Protección de


Azure Functions para obtener alguna información previa sobre las claves de
función).

En el script de aprovisionamiento, este paso se realiza mediante el comando az


functionapp function keys set de la CLI de Azure.

Los comentarios se incluyen para mostrar cómo realizar este paso a través de una
llamada api REST a Functions Key Management API si lo desea. Para llamar a esa
API REST, primero debe realizarse otra llamada a la API REST para recuperar la
clave maestra de la aplicación de funciones.

También puede asignar las claves de acceso mediante Azure Portal . En la página
de la aplicación de funciones, seleccione Funciones y, después, seleccione la
función específica que se va a proteger (llamada RandomNumber en este ejemplo). En
la página de la función, seleccione Claves de función para abrir la página en la que
puede crear y administrar estas claves.

Parte 4: Implementación de la aplicación principal >>>


Parte 4: Implementación principal de la
aplicación de ejemplo
Artículo • 20/02/2024

Parte anterior: Implementación de API de terceros

La aplicación principal del escenario es una aplicación de Flask simple implementada en


Azure App Service. La aplicación proporciona un punto de conexión de API público
denominado /api/v1/getcode, que genera un código para algún otro propósito en la
aplicación (por ejemplo, con autenticación en dos fases para usuarios humanos). La
aplicación principal también proporciona una página principal simple que muestra un
vínculo al punto de conexión de API.

El script de aprovisionamiento del ejemplo lleva a cabo los siguientes pasos:

1. Crea el host de App Service e implementa el código con el comando az webapp up


de la CLI de Azure.

2. Cree una cuenta de Azure Storage para la aplicación principal (mediante az storage
account create).

3. Crea una cola en la cuenta de almacenamiento llamada "code-requests" (con az


storage queue create).

4. Para asegurarse de que la aplicación puede escribir en la cola, usa az role


assignment create para asignar el rol "Colaborador de datos de la cola de Storage"
a la aplicación. Para más información sobre los roles, consulte Incorporación o
eliminación de asignaciones de roles de Azure mediante la CLI de Azure.

El código de la aplicación principal es el siguiente: en las siguientes partes de esta serie


se explican los detalles importantes.

Python

from flask import Flask, request, jsonify


import requests, random, string, os
from datetime import datetime
from [Link] import SecretClient
from [Link] import DefaultAzureCredential
from [Link] import QueueClient

app = Flask(__name__)
[Link]["DEBUG"] = True

number_url = [Link]["THIRD_PARTY_API_ENDPOINT"]
# Authenticate with Azure. First, obtain the DefaultAzureCredential
credential = DefaultAzureCredential()

# Next, get the client for the Key Vault. You must have first enabled
managed identity
# on the App Service for the credential to authenticate with Key Vault.
key_vault_url = [Link]["KEY_VAULT_URL"]
keyvault_client = SecretClient(vault_url=key_vault_url,
credential=credential)

# Obtain the secret: for this step to work you must add the app's service
principal to
# the key vault's access policies for secret management.
api_secret_name = [Link]["THIRD_PARTY_API_SECRET_NAME"]
vault_secret = keyvault_client.get_secret(api_secret_name)

# The "secret" from Key Vault is an object with multiple properties. The key
we
# want for the third-party API is in the value property.
access_key = vault_secret.value

# Set up the Storage queue client to which we write messages


queue_url = [Link]["STORAGE_QUEUE_URL"]
queue_client = QueueClient.from_queue_url(queue_url=queue_url,
credential=credential)

@[Link]('/', methods=['GET'])
def home():
return f'Home page of the main app. Make a request to <a
href="./api/v1/getcode">/api/v1/getcode</a>.'

def random_char(num):
return ''.join([Link](string.ascii_letters) for x in
range(num))

@[Link]('/api/v1/getcode', methods=['GET'])
def get_code():
headers = {
'Content-Type': 'application/json',
'x-functions-key': access_key
}

r = [Link](url = number_url, headers = headers)

if (r.status_code != 200):
return "Could not get you a code.", r.status_code

data = [Link]()
chars1 = random_char(3)
chars2 = random_char(3)
code_value = f"{chars1}-{data['value']}-{chars2}"
code = { "code": code_value, "timestamp" : str([Link]()) }

# Log a queue message with the code for, say, a process that invalidates
# the code after a certain period of time.
queue_client.send_message(code)

return jsonify(code)

if __name__ == '__main__':
[Link]()

Parte 5: Dependencias y variables de entorno >>>


Parte 5: Dependencias principales de la
aplicación, instrucciones de importación
y variables de entorno
Artículo • 05/03/2024

Parte anterior: Implementación de la aplicación principal

En esta parte se examinan las bibliotecas de Python que se incorporaron a la aplicación


principal y las variables de entorno que requiere el código. Cuando se implementa en
Azure, se usa la configuración de la aplicación en Azure App Service para proporcionar
las variables de entorno.

Dependencias e instrucciones de importación


El código de la aplicación requiere en las bibliotecas siguientes: Flask, la biblioteca de
solicitudes HTTP estándar y las bibliotecas de Azure para la autenticación de tokens de
id. de Microsoft Entra ([Link]), Key Vault ([Link]) y Queue Storage
([Link]). Estas bibliotecas se incluyen en el archivo [Link] de la
aplicación:

txt

flask
requests
[Link]
[Link]
[Link]

Al implementar la aplicación en App de Azure Service, Azure instala automáticamente


estos requisitos en el servidor host. Cuando se ejecuta localmente, se instalan en el
entorno con pip install -r [Link] .

El archivo de código comienza con las instrucciones de importación necesarias para las
partes de las bibliotecas usadas en el código:

Python

from flask import Flask, request, jsonify


import requests, random, string, os
from datetime import datetime
from [Link] import SecretClient
from [Link] import DefaultAzureCredential
from [Link] import QueueClient

Variables de entorno
El código de la aplicación depende de cuatro variables de entorno:

ノ Expandir tabla

Variable Valor

THIRD_PARTY_API_ENDPOINT Dirección URL de la API de terceros, como [Link]


[Link]/api/RandomNumber , que se
describe en la Parte 3.

KEY_VAULT_URL Dirección URL de la instancia de Azure Key Vault en la que ha


almacenado la clave de acceso para la API de terceros.

THIRD_PARTY_API_SECRET_NAME El nombre del secreto de Key Vault que contiene la clave de


acceso de la API de terceros.

STORAGE_QUEUE_URL Dirección URL de una cola de Azure Storage que se ha


configurado en Azure, como
[Link]
requests (consulte la Parte 4). Dado que el nombre de la cola
se incluye al final de la dirección URL, no verá el nombre en
ningún lugar del código.

La forma de establecer estas variables depende de dónde se ejecuta el código:

Al ejecutar el código localmente, se crean estas variables dentro del shell de


comandos que use. (Si implementa la aplicación en una máquina virtual, crearía
variables del lado servidor similares). Puede usar una biblioteca como python-
dotenv , que lee pares clave-valor de un archivo .env y los establece como
variables de entorno.

Cuando el código se implementa en App de Azure Servicio como se muestra en


este tutorial, no tiene acceso al propio servidor. En este caso, se crea una
configuración de la aplicación con los mismos nombres, que a su vez aparecen en
la aplicación como variables de entorno.

Los scripts de aprovisionamiento crean estos valores con el comando az webapp config
appsettings set de la CLI de Azure. Las cuatro variables se establecen con un solo
comando.
Para crear la configuración mediante Azure Portal, consulte Configuración de una
aplicación de App Service en Azure Portal.

Al ejecutar el código localmente, también debe especificar variables de entorno que


contengan información sobre la entidad de servicio local. DefaultAzureCredential busca
estos valores. Cuando se implementa en App Service, no es necesario establecer estos
valores, ya que la identidad administrada asignada por el sistema de la aplicación se
usará en su lugar para autenticarse.

ノ Expandir tabla

Variable Valor

AZURE_TENANT_ID Id. de inquilino de Microsoft Entra (directorio).

AZURE_CLIENT_ID Identificador de cliente (aplicación) de un registro de aplicaciones en el


inquilino.

AZURE_CLIENT_SECRET Secreto de cliente generado para el registro de aplicación.

Para más información, consulte Autenticación de aplicaciones de Python en servicios de


Azure durante el desarrollo local mediante entidades de servicio.

Parte 6: Código de inicio de la aplicación principal >>>


Parte 6: Código de inicio de la
aplicación principal
Artículo • 05/03/2024

Parte anterior: Dependencias y variables de entorno

El código de inicio de la aplicación, que sigue a las instrucciones import , inicializa las
distintas variables usadas en las funciones que controlan las solicitudes HTTP.

En primer lugar, crea el objeto de aplicación flask y recupera la dirección URL del punto
de conexión de api de terceros de la variable de entorno:

Python

app = Flask(__name__)
[Link]["DEBUG"] = True

number_url = [Link]["THIRD_PARTY_API_ENDPOINT"]

A continuación, obtiene el DefaultAzureCredential objeto , que es la credencial


recomendada que se usará al autenticarse con los servicios de Azure. Consulte
Autenticación de aplicaciones hospedadas en Azure con DefaultAzureCredential.

Python

credential = DefaultAzureCredential()

Cuando se ejecuta localmente, DefaultAzureCredential busca las


AZURE_TENANT_ID variables de entorno , AZURE_CLIENT_ID y AZURE_CLIENT_SECRET que

contienen información para la entidad de servicio que usa para el desarrollo local.
Cuando se ejecuta en Azure, DefaultAzureCredential el valor predeterminado es usar la
identidad administrada asignada por el sistema habilitada en la aplicación. Es posible
invalidar el comportamiento predeterminado con la configuración de la aplicación, pero
en este escenario de ejemplo, se usa el comportamiento predeterminado.

El código siguiente recupera la clave de acceso de la API de terceros desde Azure Key
Vault. En el script de aprovisionamiento, el almacén de claves se crea con az keyvault
create y el secreto se almacena con az keyvault secret set.

Se accede al propio recurso de Key Vault mediante una dirección URL, que se carga
desde la variable de entorno KEY_VAULT_URL .
Python

key_vault_url = [Link]["KEY_VAULT_URL"]

Para conectarse al almacén de claves, es necesario crear un objeto de cliente adecuado.


Dado que queremos recuperar un secreto, usamos SecretClient, que requiere la
dirección URL del almacén de claves y el objeto de credenciales que representa la
identidad en la que se ejecuta la aplicación.

Python

keyvault_client = SecretClient(vault_url=key_vault_url,
credential=credential)

La creación del objeto SecretClient no autentica la credencial de ninguna manera.


SecretClient es simplemente una construcción del lado cliente que administra

internamente la dirección URL del recurso y la credencial. La autenticación y la


autorización solo se producen cuando se invoca una operación mediante el cliente,
como get_secret, que genera una llamada de API REST al recurso de Azure.

Python

api_secret_name = [Link]["THIRD_PARTY_API_SECRET_NAME"]
vault_secret = keyvault_client.get_secret(api_secret_name)

# The "secret" from Key Vault is an object with multiple properties. The key
we
# want for the third-party API is in the value property.
access_key = vault_secret.value

Incluso si la identidad de la aplicación está autorizada para acceder al almacén de


claves, todavía debe estar autorizada para acceder a los secretos. De lo contrario, se
produce un error en la llamada a get_secret . Por esta razón, el script de
aprovisionamiento establece una directiva de acceso "obtener secretos" para la
aplicación mediante el comando az keyvault set-policy de la CLI de Azure. Para más
información, consulte Autenticación de Key Vault y Concesión de acceso a la aplicación
a Key Vault. En el último artículo se muestra cómo establecer una directiva de acceso
mediante Azure Portal. (El artículo también se escribe para la identidad administrada,
pero se aplica igualmente a un principio de servicio que se usa en el desarrollo local).

Por último, el código de la aplicación configura el objeto de cliente a través del cual
puede escribir mensajes en una cola de Azure Storage. La dirección URL de la cola está
en la variable de entorno STORAGE_QUEUE_URL .
Python

queue_url = [Link]["STORAGE_QUEUE_URL"]
queue_client = QueueClient.from_queue_url(queue_url=queue_url,
credential=credential)

Como en el caso de Key Vault, usamos un objeto de cliente específico de las bibliotecas
de Azure, QueueClient y su método from_queue_url para conectarse al recurso que se
encuentra en la dirección URL en cuestión. Una vez más, al intentar crear este objeto de
cliente se valida que la identidad de la aplicación representada por la credencial está
autorizada para acceder a la cola. Como se indicó anteriormente, esta autorización se
concedió mediante la asignación del rol "Colaborador de datos de la cola de Storage" a
la aplicación principal.

Suponiendo que todo este código de inicio funciona correctamente, la aplicación tiene
todas las variables internas listas para el trabajo con el punto de conexión de API
/api/v1/getcode.

Parte 7: Punto de conexión de la aplicación principal >>>


Parte 7: Punto de conexión principal de
la API de la aplicación
Artículo • 05/03/2024

Parte anterior: Código de inicio de la aplicación principal

La ruta de acceso url de la aplicación /api/v1/getcode para la API genera una respuesta
JSON que contiene un código alfanumérico y una marca de tiempo.

En primer lugar, el decorador @[Link] indica a Flask que la función get_code


controla las solicitudes a la dirección URL /api/v1/getcode.

Python

@[Link]('/api/v1/getcode', methods=['GET'])
def get_code():

A continuación, la aplicación llama a la API de terceros, la dirección URL de la que se


encuentra en number_url , proporcionando la clave de acceso que recupera del almacén
de claves en el encabezado.

Python

headers = {
'Content-Type': 'application/json',
'x-functions-key': access_key
}

r = [Link](url = number_url, headers = headers)

if (r.status_code != 200):
return "Could not get you a code.", r.status_code

La API de terceros de ejemplo se implementa en el entorno sin servidor de Azure


Functions. La x-functions-key propiedad del encabezado es cómo Azure Functions
espera que aparezca una clave de acceso en un encabezado. Para más información,
consulte Desencadenador HTTP de Azure Functions: claves de autorización. Si se
produce un error en la llamada a la API por cualquier motivo, el código devuelve un
mensaje de error y el código de estado.

Suponiendo que la llamada API se realiza correctamente y devuelve un valor numérico,


la aplicación crea un código más complejo con ese número más algunos caracteres
aleatorios (mediante su propia random_char función).
Python

data = [Link]()
chars1 = random_char(3)
chars2 = random_char(3)
code_value = f"{chars1}-{data['value']}-{chars2}"
code = { "code": code_value, "timestamp" : str([Link]()) }

La code variable aquí contiene la respuesta JSON completa para la API de la aplicación,
que incluye el valor de código y una marca de tiempo. Una respuesta de ejemplo sería
{"code":"ojE-161-pTv","timestamp":"2020-04-15 16:54:48.816549"} .

Sin embargo, antes de devolver esa respuesta, escribe un mensaje en la cola de


almacenamiento mediante el método del send_message cliente de cola:

Python

queue_client.send_message(code)

return jsonify(code)

Procesamiento de los mensajes de la cola


Los mensajes almacenados en la cola se pueden ver y administrar mediante Azure
Portal, con el comando az storage message getde la CLI de Azure o con Explorador de
Azure Storage . El repositorio de ejemplo incluye un script ([Link] y [Link]) para
solicitar un código del punto de conexión de la aplicación y, a continuación, comprobar
la cola de mensajes. También hay un script para borrar la cola con el comando az
storage message clear.

Normalmente, una aplicación como la de este ejemplo tendría otro proceso que extrae
de forma asincrónica los mensajes de la cola para su posterior procesamiento. Como se
mencionó anteriormente, la respuesta generada por este punto de conexión de API
podría usarse en otra parte de la aplicación con autenticación de usuario en dos fases.
En ese caso, la aplicación debe invalidar el código después de un período de tiempo
determinado, por ejemplo, 10 minutos. Una manera sencilla de realizar esta tarea sería
mantener una tabla de códigos de autenticación en dos fases válidos, que usa su
procedimiento de inicio de sesión de usuario. La aplicación tendría entonces un sencillo
proceso de supervisión de la cola con la siguiente lógica (en pseudo-código):
pull a message from the queue and retrieve the code.

if (code is already in the table):


remove the code from the table, thereby invalidating it
else:
add the code to the table, making it valid
call queue_client.send_message(code, visibility_timeout=600)

Este pseudo código emplea el parámetro opcional visibility_timeout del método


send_message, que especifica el número de segundos antes de que el mensaje se
vuelva visible en la cola. Dado que el tiempo de espera predeterminado es cero, los
mensajes escritos inicialmente por el punto de conexión de API se vuelven
inmediatamente visibles para el proceso de supervisión de la cola. Como resultado, ese
proceso los almacena en la tabla de códigos válidos de inmediato. El proceso pone en
cola el mismo mensaje de nuevo con el tiempo de espera, de modo que recibirá el
código de nuevo 10 minutos más tarde, en cuyo momento lo quita de la tabla.

Implementación del punto de conexión de API


de la aplicación principal en Azure Functions
El código mostrado anteriormente en este artículo usa el marco web Flask para crear su
punto de conexión de API. Dado que Flask se debe ejecutar con un servidor web, el
código se debe implementar en Azure App Service o en una máquina virtual.

Una opción de implementación alternativa es el entorno sin servidor de Azure


Functions. En este caso, todo el código de inicio y el código del punto de conexión de
API se incluirán en la misma función, que está enlazada a un desencadenador HTTP. Al
igual que con App Service, se usa la configuración de la aplicación de funciones para
crear las variables de entorno para el código.

Una parte de la implementación que resulta más fácil es autenticarse con Queue
Storage. En lugar de obtener un objeto QueueClient mediante la dirección URL de la
cola y un objeto de credencial, se crea un enlace de Queue Storage para la función. El
enlace controla toda la autenticación en segundo plano. Con este tipo de enlace, la
función recibe un objeto de cliente listo para usar como parámetro. Para más
información y código de ejemplo, consulte Conexión de Azure Functions a Azure Queue
Storage.

Pasos siguientes
A través de este tutorial, ha aprendido cómo las aplicaciones se autentican con otros
servicios de Azure mediante identidad administrada y cómo las aplicaciones pueden
usar Azure Key Vault para almacenar cualquier otro secreto necesario para las API de
terceros.

El mismo patrón que se muestra aquí con Azure Key Vault y Azure Storage se aplica a
todos los demás servicios de Azure. El paso fundamental es asignar el rol correcto para
la aplicación dentro de la página de ese servicio en Azure Portal o a través de la CLI de
Azure. (Consulte Asignación de roles de Azure). Asegúrese de comprobar la
documentación del servicio para ver si necesita configurar otras directivas de acceso.

Recuerde siempre que debe asignar los mismos roles y directivas de acceso a cualquier
entidad de servicio que use para el desarrollo local.

En resumen, si ha completado este tutorial, puede aplicar sus conocimientos a cualquier


otro servicio de Azure y a cualquier otro servicio externo.

Un tema sobre el que no hemos visto en este tutorial es la autenticación de los usuarios.
Para explorar esta área de las aplicaciones web, comience con Autenticación y
autorización de usuarios de un extremo a otro en Azure App Service.

Consulte también
Autenticación y autorización de aplicaciones de Python en Azure
Ejemplo del tutorial: [Link]/Azure-Samples/python-integrated-authentication
Documentación de Microsoft Entra
Documentación de Azure Key Vault
Instalación de los paquetes de
biblioteca de Azure para Python
Artículo • 27/11/2023

El SDK de Azure para Python se compone de muchas bibliotecas individuales que se


pueden instalar en entornos estándar de Python o conda .

Las bibliotecas para entornos estándar de Python se enumeran en el índice de paquetes.

Los paquetes para entornos de Conda se muestran en el canal de Microsoft en


[Link] . Los paquetes de Azure tienen nombres que comienzan por azure- .

Con estas bibliotecas de Azure, puede crear y administrar recursos en los servicios de
Azure (mediante las bibliotecas de administración, cuyos nombres de paquete
comienzan por azure-mgmt ) y conectarse con esos recursos desde el código de la
aplicación (mediante las bibliotecas cliente, cuyos nombres de paquete comienzan solo
azure- por ).

Instalación de la versión más reciente de un


paquete
pip

Símbolo del sistema de Windows

pip install <package>

pip install recupera la versión más reciente de un paquete en el entorno de

Python actual.

En los sistemas Linux, debe instalar un paquete para cada usuario por separado. No
se admite la instalación de paquetes para todos los usuarios con sudo pip install .

Puede usar cualquier nombre de paquete que aparezca en el índice de paquetes. En


la página de índice, busque en la columna Nombre la funcionalidad que necesita y,
a continuación, busque y seleccione el vínculo PyPI en la columna Paquete .
Instalación de versiones de paquetes
específicas
pip

Especifique la versión que desea en la línea de comandos con pip install .

Símbolo del sistema de Windows

pip install <package>==<version>

Puede encontrar números de versión en el índice del paquete. En la página de


índice, busque en la columna Nombre la funcionalidad que necesita y, a
continuación, busque y seleccione el vínculo PyPI en la columna Paquete . Por
ejemplo, para instalar una versión del azure-storage-blob paquete, puede usar: pip
install azure-storage-blob==12.19.0 .

Instalación de paquetes en versión preliminar


pip

Para instalar la versión preliminar más reciente de un paquete, incluya la --pre


marca en la línea de comandos.

Símbolo del sistema de Windows

pip install --pre <package>

Microsoft publica periódicamente paquetes de versión preliminar que admiten


próximas características. Los paquetes en versión preliminar incluyen la advertencia
de que el paquete está sujeto a cambios y no se debe usar en proyectos de
producción.

Puede usar cualquier nombre de paquete que aparezca en el índice de paquetes.

Comprobación de una instalación de paquetes


pip
Para comprobar la instalación de un paquete:

Símbolo del sistema de Windows

pip show <package>

Si el paquete está instalado, pip show muestra la versión y un resumen con otra
información; si no lo está, no muestra nada.

También puede usar pip freeze o pip list para ver todos los paquetes instalados
en el entorno de Python actual.

Puede usar cualquier nombre de paquete que aparezca en el índice de paquetes.

Desinstala un paquete.
pip

Para desinstalar un paquete:

Símbolo del sistema de Windows

pip uninstall <package>

Puede usar cualquier nombre de paquete que aparezca en el índice de paquetes.


Ejemplo: Uso de las bibliotecas de Azure
para crear un grupo de recursos
Artículo • 06/03/2024

En este ejemplo se muestra cómo usar las bibliotecas de administración del SDK de
Azure en un script de Python para crear un grupo de recursos. (El El comando
equivalente de la CLI de Azure se proporciona más adelante en este artículo. Si prefiere
usar Azure Portal, consulte Creación de grupos de recursos).

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. 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
Cree un archivo llamado [Link] con el siguiente contenido:

txt

azure-mgmt-resource
azure-identity

En un terminal o símbolo del sistema con el entorno virtual activado, instale los
requisitos:

Símbolo del sistema de Windows


pip install -r [Link]

3: Escribir código para crear un grupo de


recursos
Cree un archivo de Python llamado provision_rg.py con el siguiente código. Los detalles
se explican en los comentarios:

Python

# Import the needed credential and management objects from the libraries.
import os

from [Link] import DefaultAzureCredential


from [Link] import ResourceManagementClient

# Acquire a credential object using DevaultAzureCredential.


credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.


subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]

# Obtain the management object for resources.


resource_client = ResourceManagementClient(credential, subscription_id)

# Provision the resource group.


rg_result = resource_client.resource_groups.create_or_update(
"PythonAzureExample-rg", {"location": "centralus"}
)

# Within the ResourceManagementClient is an object named resource_groups,


# which is of class ResourceGroupsOperations, which contains methods like
# create_or_update.
#
# The second parameter to create_or_update here is technically a
ResourceGroup
# object. You can create the object directly using ResourceGroup(location=
# LOCATION) or you can express the object as inline JSON as shown here. For
# details, see Inline JSON pattern for object arguments at
# [Link]
# /azure-sdk-library-usage-patterns#inline-json-pattern-for-object-arguments

print(
f"Provisioned resource group {rg_result.name} in the
{rg_result.location} region"
)

# The return value is another ResourceGroup object with all the details of
the
# new group. In this case the call is synchronous: the resource group has
been
# provisioned by the time the call returns.

# To update the resource group, repeat the call with different properties,
such
# as tags:
rg_result = resource_client.resource_groups.create_or_update(
"PythonAzureExample-rg",
{
"location": "centralus",
"tags": {"environment": "test", "department": "tech"},
},
)

print(f"Updated resource group {rg_result.name} with tags")

# Optional lines to delete the resource group. begin_delete is asynchronous.


# poller = resource_client.resource_groups.begin_delete(rg_result.name)
# result = [Link]()

Autenticación en el código
Más adelante en este artículo, inicia sesión en Azure con la CLI de Azure para ejecutar el
código de ejemplo. Si la cuenta tiene permisos para crear y enumerar grupos de
recursos en la suscripción de Azure, el código se ejecutará correctamente.

Para usar este código en un script de producción, puede establecer variables de entorno
para usar un método basado en la entidad de servicio para la autenticación. Para más
información, consulte Autenticación de aplicaciones de Python con servicios de Azure.
Debe asegurarse de que la entidad de servicio tiene permisos suficientes para crear y
enumerar grupos de recursos en la suscripción mediante la asignación de un rol
adecuado en Azure; por ejemplo, el rol Colaborador de la suscripción.

Vínculos de referencia a las clases usadas en el código


DefaultAzureCredential ([Link])
ResourceManagementClient ([Link])

4: Ejecutar el script
1. Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:

Azure CLI
az login

2. Establezca la variable de entorno en el AZURE_SUBSCRIPTION_ID identificador de


suscripción. (Puede ejecutar el comando az account show y obtener el
identificador de suscripción de la id propiedad en la salida):

cmd

Símbolo del sistema de Windows

set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000

3. Ejecute el script:

Símbolo del sistema de Windows

python provision_rg.py

5: Comprobación del grupo de recursos


Puede comprobar que el grupo existe mediante Azure Portal o la CLI de Azure.

Azure Portal: abra Azure Portal , seleccione Grupos de recursos y compruebe que
el grupo aparece en la lista. Si ya tiene el portal abierto, use el comando Refresh
para actualizar la lista.

CLI de Azure: use el comando az group show :

Azure CLI

az group show -n PythonAzureExample-rg

6: Limpieza de recursos
Ejecute el comando az group delete si no es necesario mantener el grupo de recursos
creado en este ejemplo. Los grupos de recursos no incurren en cargos continuos en la
suscripción, pero es posible que los recursos del grupo de recursos sigan generando
cargos. Es recomendable limpiar cualquier grupo que no esté usando activamente. El
argumento --no-wait permite que el comando devuelva el control inmediatamente en
lugar de esperar a que finalice la operación.

Azure CLI

az group delete -n PythonAzureExample-rg --no-wait

También puede usar el método


ResourceManagementClient.resource_groups.begin_delete para eliminar un grupo de
recursos del código. El código comentado en la parte inferior del script de este artículo
muestra el uso.

Como referencia: comando equivalente de la CLI de Azure


El siguiente comando az group create de la CLI de Azure crea un grupo de recursos con
etiquetas igual que el script de Python:

Azure CLI

az group create -n PythonAzureExample-rg -l centralus --tags


"department=tech" "environment=test"

Consulte también
Ejemplo: Enumeración de grupos de recursos en una suscripción
Ejemplo: Creación de Azure Storage
Ejemplo: Uso de Azure Storage
Ejemplo: Creación de una aplicación web e implementación de código
Ejemplo: Creación y consulta de una base de datos
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
Ejemplo: Uso de las bibliotecas de Azure
para enumerar los grupos de recursos y
los recursos
Artículo • 10/03/2024

En este ejemplo se muestra cómo usar las bibliotecas de administración del SDK de
Azure en un script de Python para realizar dos tareas:

Enumerar todos los grupos de recursos de una suscripción de Azure.


Enumerar los recursos de un grupo de recursos específico.

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.

Los comandos equivalentes de la CLI de Azure se enumeran más adelante en este


artículo.

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. 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
Cree un archivo llamado [Link] con el siguiente contenido:

txt

azure-mgmt-resource
azure-identity

En un terminal o símbolo del sistema con el entorno virtual activado, instale los
requisitos:

Consola

pip install -r [Link]

3: Escribir código para trabajar con grupos de


recursos

3a. Enumeración de los grupos de recursos de una


suscripción
Cree un archivo de Python llamado list_groups.py con el siguiente código. Los detalles se
explican en los comentarios:

Python

# Import the needed credential and management objects from the libraries.
from [Link] import DefaultAzureCredential
from [Link] import ResourceManagementClient
import os

# Acquire a credential object.


credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.


subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]

# Obtain the management object for resources.


resource_client = ResourceManagementClient(credential, subscription_id)

# Retrieve the list of resource groups


group_list = resource_client.resource_groups.list()

# Show the groups in formatted output


column_width = 40

print("Resource Group".ljust(column_width) + "Location")


print("-" * (column_width * 2))

for group in list(group_list):


print(f"{[Link]:<{column_width}}{[Link]}")
3b. Enumeración de los recursos de un grupo de recursos
específico
Cree un archivo de Python llamado list_resources.py con el siguiente código. Los detalles
se explican en los comentarios.

De forma predeterminada, el código enumera los recursos de "myResourceGroup". Para


usar otro grupo de recursos, establezca la variable de entorno RESOURCE_GROUP_NAME en
el nombre del grupo deseado.

Python

# Import the needed credential and management objects from the libraries.
from [Link] import DefaultAzureCredential
from [Link] import ResourceManagementClient
import os

# Acquire a credential object.


credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.


subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]

# Retrieve the resource group to use, defaulting to "myResourceGroup".


resource_group = [Link]("RESOURCE_GROUP_NAME", "myResourceGroup")

# Obtain the management object for resources.


resource_client = ResourceManagementClient(credential, subscription_id)

# Retrieve the list of resources in "myResourceGroup" (change to any name


desired).
# The expand argument includes additional properties in the output.
resource_list = resource_client.resources.list_by_resource_group(
resource_group, expand = "createdTime,changedTime")

# Show the groups in formatted output


column_width = 36

print("Resource".ljust(column_width) + "Type".ljust(column_width)
+ "Create date".ljust(column_width) + "Change date".ljust(column_width))
print("-" * (column_width * 4))

for resource in list(resource_list):


print(f"{[Link]:<{column_width}}{[Link]:<{column_width}}"
f"{str(resource.created_time):<{column_width}}
{str(resource.changed_time):<{column_width}}")

Autenticación en el código
Más adelante en este artículo, inicia sesión en Azure con la CLI de Azure para ejecutar el
código de ejemplo. Si la cuenta tiene permisos para crear y enumerar grupos de
recursos en la suscripción de Azure, el código se ejecutará correctamente.

Para usar este código en un script de producción, puede establecer variables de entorno
para usar un método basado en la entidad de servicio para la autenticación. Para más
información, consulte Autenticación de aplicaciones de Python con servicios de Azure.
Debe asegurarse de que la entidad de servicio tiene permisos suficientes para crear y
enumerar grupos de recursos en la suscripción mediante la asignación de un rol
adecuado en Azure; por ejemplo, el rol Colaborador de la suscripción.

Vínculos de referencia a las clases usadas en el código


DefaultAzureCredential ([Link])
ResourceManagementClient ([Link])

4: Ejecutar los scripts


1. Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:

Azure CLI

az login

2. Establezca la variable de entorno en el AZURE_SUBSCRIPTION_ID identificador de


suscripción. (Puede ejecutar el comando az account show y obtener el
identificador de suscripción de la id propiedad en la salida):

cmd

Símbolo del sistema de Windows

set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000

3. Enumerar todos los grupos de recursos de la suscripción:

Consola

python list_groups.py

4. Enumerar todos los recursos de un grupo de recursos:


Consola

python list_resources.py

De forma predeterminada, el código enumera los recursos de "myResourceGroup".


Para usar otro grupo de recursos, establezca la variable de entorno
RESOURCE_GROUP_NAME en el nombre del grupo deseado.

Como referencia: comandos equivalentes de la CLI de


Azure
El siguiente comando de la CLI de Azure enumera los grupos de recursos de una
suscripción:

Azure CLI

az group list

El siguiente comando enumera los recursos dentro de "myResourceGroup" en la región


centralus (el location argumento es necesario para identificar un centro de datos
específico):

Azure CLI

az resource list --resource-group myResourceGroup --location centralus

Consulte también
Ejemplo: Aprovisionamiento de un grupo de recursos
Ejemplo: Aprovisionamiento de Azure Storage
Ejemplo: Uso de Azure Storage
Ejemplo: Aprovisionamiento de una aplicación web e implementación de código
Ejemplo: Aprovisionamiento y consulta de una base de datos
Ejemplo: Aprovisionamiento 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
Ejemplo: Creación de Azure Storage con
las bibliotecas de Azure para Python
Artículo • 26/07/2024

En este artículo, aprenderá a usar las bibliotecas de administración de Azure en un script


de Python para crear un grupo de recursos que contiene una cuenta de Azure Storage y
un contenedor de almacenamiento de blobs.

Después de crear los recursos, consulte Ejemplo: Uso de Azure Storage para aprender a
usar las bibliotecas cliente de Azure en el código de la aplicación de Python para cargar
un archivo en el contenedor de almacenamiento de blobs.

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.

Más adelante en este artículo se indican los comandos equivalentes de la CLI de Azure.
Si prefiere usar Azure Portal, consulte Creación de una cuenta de Azure Storage y
Creación de un contenedor de blobs.

1: Configuración del entorno de desarrollo local


Si aún no lo ha hecho, configure un entorno en el que pueda ejecutar el 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
1. Cree un archivo [Link] en el que se enumeren las bibliotecas de
administración que se usan en este ejemplo:
txt

azure-mgmt-resource
azure-mgmt-storage
azure-identity

2. En el terminal con el entorno virtual activado, instale los requisitos:

Consola

pip install -r [Link]

3: Escritura de código para la creación de


recursos de almacenamiento
Cree un archivo de Python llamado provision_blob.py con el siguiente código. Los
detalles se explican en los comentarios. El script lee el identificador de suscripción de
una variable de entorno, AZURE_SUBSCRIPTION_ID . Esta variable se establece en un paso
posterior. El nombre del grupo de recursos, la ubicación, el nombre de la cuenta de
almacenamiento y el nombre del contenedor se definen como constantes en el código.

Python

import os, random

# Import the needed management objects from the libraries. The [Link]
library
# is installed automatically with the other libraries.
from [Link] import DefaultAzureCredential
from [Link] import ResourceManagementClient
from [Link] import StorageManagementClient

# Acquire a credential object.


credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.


subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]

# Obtain the management object for resources.


resource_client = ResourceManagementClient(credential, 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-Storage-rg"
LOCATION = "centralus"
# Step 1: Provision the resource group.

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 [Link]
resource-group

# Step 2: Provision the storage account, starting with a management object.

storage_client = StorageManagementClient(credential, subscription_id)

STORAGE_ACCOUNT_NAME = f"pythonazurestorage{[Link](1,100000):05}"

# You can replace the storage account here with any unique name. A random
number is used
# by default, but note that the name changes every time you run this script.
# The name must be 3-24 lower case letters and numbers only.

# Check if the account name is available. Storage account names must be


unique across
# Azure because they're used in URLs.
availability_result =
storage_client.storage_accounts.check_name_availability(
{ "name": STORAGE_ACCOUNT_NAME }
)

if not availability_result.name_available:
print(f"Storage name {STORAGE_ACCOUNT_NAME} is already in use. Try
another name.")
exit()

# The name is available, so provision the account


poller = storage_client.storage_accounts.begin_create(RESOURCE_GROUP_NAME,
STORAGE_ACCOUNT_NAME,
{
"location" : LOCATION,
"kind": "StorageV2",
"sku": {"name": "Standard_LRS"}
}
)

# Long-running operations return a poller object; calling [Link]()


# waits for completion.
account_result = [Link]()
print(f"Provisioned storage account {account_result.name}")
# Step 3: Retrieve the account's primary access key and generate a
connection string.
keys = storage_client.storage_accounts.list_keys(RESOURCE_GROUP_NAME,
STORAGE_ACCOUNT_NAME)

print(f"Primary key for storage account: {[Link][0].value}")

conn_string =
f"DefaultEndpointsProtocol=https;EndpointSuffix=[Link];AccountName
={STORAGE_ACCOUNT_NAME};AccountKey={[Link][0].value}"

print(f"Connection string: {conn_string}")

# Step 4: Provision the blob container in the account (this call is


synchronous)
CONTAINER_NAME = "blob-container-01"
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME,
STORAGE_ACCOUNT_NAME, CONTAINER_NAME, {})

# The fourth argument is a required BlobContainer object, but because we


don't need any
# special values there, so we just pass empty JSON.

print(f"Provisioned blob container {[Link]}")

Autenticación en el código
Más adelante en este artículo, debe iniciar sesión en Azure con la CLI de Azure para
ejecutar el código de ejemplo. Si la cuenta tiene permisos para crear grupos de recursos
y recursos de almacenamiento en la suscripción de Azure, el código se ejecutará
correctamente.

Para usar este código en un script de producción, puede establecer variables de entorno
para usar un método basado en la entidad de servicio para la autenticación. Para más
información, consulte Autenticación de aplicaciones de Python con los servicios de
Azure. Debe asegurarse de que la entidad de servicio tenga permisos suficientes para
crear grupos de recursos y recursos de almacenamiento en la suscripción mediante la
asignación de un rol adecuado en Azure; por ejemplo, el rol Colaborador de la
suscripción.

Vínculos de referencia a las clases usadas en el código


DefaultAzureCredential ([Link])
ResourceManagementClient ([Link])
StorageManagementClient ([Link])
4. Ejecución del script
1. Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:

Azure CLI

az login

2. Establezca como valor de la variable de entorno AZURE_SUBSCRIPTION_ID el


identificador de su suscripción. (Puede ejecutar el comando az account show y
obtener el identificador de suscripción de la propiedad id en la salida):

cmd

Símbolo del sistema de Windows

set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000

3. Ejecute el script:

Consola

python provision_blob.py

El script puede tardar un minuto o dos en completarse.

5: Comprobación de los recursos


1. Abra Azure Portal para comprobar que el grupo de recursos y la cuenta de
almacenamiento se hayan creado según lo previsto. Es posible que tenga que
esperar un minuto y también seleccionar Mostrar tipos ocultos en el grupo de
recursos.
2. Seleccione la cuenta de almacenamiento y, a continuación, seleccione
Almacenamiento de datos>Contenedores en el menú de la izquierda para
comprobar que aparece "blob-container-01":

3. Si quiere intentar usar estos recursos aprovisionados desde el código de la


aplicación, continúe con el Ejemplo: Uso de Azure Storage.

Para ver un ejemplo adicional del uso de la biblioteca de administración de Azure


Storage, consulte el ejemplo de administración del almacenamiento de Python.

Como referencia: comandos equivalentes de la CLI de


Azure
Los siguientes comandos de la CLI de Azure realizan los mismos pasos de creación que
el script de Python:
cmd

Azure CLI

rem Provision the resource group

az group create ^
-n PythonAzureExample-Storage-rg ^
-l centralus

rem Provision the storage account

set account=pythonazurestorage%random%
echo Storage account name is %account%

az storage account create ^


-g PythonAzureExample-Storage-rg ^
-l centralus ^
-n %account% ^
--kind StorageV2 ^
--sku Standard_LRS

rem Retrieve the connection string

FOR /F %i IN ('az storage account show-connection-string -g


PythonAzureExample-Storage-rg -n %account% --query connectionString') do
(SET connstr=%i)

rem Provision the blob container

az storage container create ^


--name blob-container-01 ^
--account-name %account% ^
--connection-string %connstr%

6: Limpieza de recursos
Deje los recursos en su lugar si desea seguir el artículo Ejemplo: Uso de Azure Storage
para usar estos recursos en el código de la aplicación. De lo contrario, ejecute el
comando az group delete si no necesita conservar el grupo de recursos y los recursos
de almacenamiento creados en este ejemplo.

Los grupos de recursos no incurren en cargos continuos en la suscripción, pero los


recursos, como las cuentas de almacenamiento en el grupo de recursos pueden incurrir
en cargos. Es recomendable limpiar cualquier grupo que no esté usando activamente. El
argumento --no-wait permite que el comando devuelva el control inmediatamente en
lugar de esperar a que finalice la operación.
Azure CLI

az group delete -n PythonAzureExample-Storage-rg --no-wait

También puede usar el método


ResourceManagementClient.resource_groups.begin_delete para eliminar un grupo de
recursos del código. El código de Ejemplo: Creación de un grupo de recursos muestra el
uso.

Consulte también
Ejemplo: Uso de Azure Storage
Ejemplo: Creación de un grupo de recursos
Ejemplo: Enumeración de los grupos de recursos de una suscripción
Ejemplo: Creación de una aplicación web e implementación de código
Ejemplo: Creación y consulta de una base de datos
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

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Ejemplo: Acceso a Azure Storage con las
bibliotecas de Azure para Python
Artículo • 06/10/2024

En este artículo, aprenderá a usar las bibliotecas cliente de Azure SDK en el código de la
aplicación de Python para cargar un archivo en un contenedor de Azure Blob Storage.
En el artículo se da por supuesto que ha creado los recursos que se muestran en
Ejemplo: Creación de Azure Storage.

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 paquetes de biblioteca


En el archivo [Link], agregue líneas para los paquetes de biblioteca cliente que
necesita y guarde el archivo.

txt

azure-storage-blob
azure-identity

Luego, en el terminal o el símbolo del sistema, instale los requisitos.

Consola
pip install -r [Link]

3. Creación de un archivo para cargar


Cree un archivo de origen denominado [Link]. Este nombre de archivo es lo
que el código espera.

txt

Hello there, Azure Storage. I'm a friendly file ready to be stored in a


blob.

4. Uso de Blob Storage en el código de la


aplicación
Esta sección demuestra dos formas de acceder a los datos en el contenedor blob que
creaste en Ejemplo: Creación de Azure Storage. Para acceder a los datos del contenedor
de blobs, su aplicación debe ser capaz de autenticarse con Azure y estar autorizada para
acceder a los datos del contenedor. Esta sección presenta dos formas de hacerlo:

El método sin contraseña (recomendado) autentica la app usando


DefaultAzureCredential. DefaultAzureCredential es una credencial encadenada
que puede autenticar una aplicación (o un usuario) usando una secuencia de
credenciales diferentes, incluidas las credenciales de la herramienta de desarrollo,
las principales del servicio de aplicaciones y las identidades gestionadas.

El método de Cadena de conexión usa una cadena de conexión para acceder


directamente a la cuenta de almacenamiento.

Por las siguientes razones, entre otras, recomendamos usar el método sin contraseña
siempre que sea posible:

Una cadena de conexión autentica al agente que se conecta con la cuenta de


almacenamiento en lugar de con recursos individuales dentro de esa cuenta. En
consecuencia, una cadena de conexión otorga una autorización más amplia de la
que podría ser necesaria. Con DefaultAzureCredential puede conceder permisos
más granulares y menos privilegiados sobre sus recursos de almacenamiento a la
identidad bajo la que se ejecuta su aplicación usando Azure RBAC.
Una cadena de conexión contiene información de acceso en texto sin formato y,
por lo tanto, presenta posibles vulnerabilidades si no está correctamente
construida o protegida. Si dicha cadena de conexión quedara expuesta, podría
usarse para acceder a una amplia variedad de recursos dentro de la cuenta de
almacenamiento.

Una cadena de conexión normalmente se almacena en una variable de entorno, lo


que la hace vulnerable si un atacante obtiene acceso a su entorno. Muchos de los
tipos de credenciales compatibles con DefaultAzureCredential no requieren
almacenar secretos en su entorno.

Sin contraseña (recomendado)

DefaultAzureCredential es una cadena de credenciales preconfigurada. Está

diseñada para admitir muchos entornos, junto con los flujos de autenticación y las
herramientas de desarrollo más comunes. Una instancia de DefaultAzureCredential
determina para qué tipos de credenciales intentar obtener un token basándose en
una combinación de su entorno en tiempo de ejecución, el valor de ciertas variables
de entorno bien conocidas y, opcionalmente, los parámetros pasados a su
constructor.

En los siguientes pasos, se configura una entidad de seguridad de servicio de


aplicación como identidad de la aplicación. Las entidades de seguridad del servicio
de aplicaciones son adecuadas para su uso tanto durante el desarrollo local como
para aplicaciones alojadas en las instalaciones. Para configurar
DefaultAzureCredential para usar la entidad de seguridad del servicio de

aplicaciones, debe establecer las siguientes variables de entorno: AZURE_CLIENT_ID ,


AZURE_TENANT_ID y AZURE_CLIENT_SECRET .

Observe que se ha configurado un secreto de cliente. Esto es necesario para una


entidad de seguridad de servicio de aplicación, pero, dependiendo de su escenario,
también puede configurar DefaultAzureCredential para usar de credenciales que
no requieran establecer un secreto o contraseña en una variable de entorno.

Por ejemplo, en el desarrollo local, si DefaultAzureCredential no puede obtener un


token usando variables de entorno configuradas, se intenta obtener uno usando el
usuario (ya) registrado en herramientas de desarrollo como Azure CLI; para una
aplicación alojada en Azure, se puede configurar DefaultAzureCredential para usar
una identidad administrada. En todos los casos, el código de su aplicación sigue
siendo el mismo, solo cambia la configuración y/o el entorno de ejecución.
1. Cree un archivo llamado use_blob_auth.py con el código siguiente. Los pasos
se explican en los comentarios.

Python

import os
import uuid

from [Link] import DefaultAzureCredential

# Import the client object from the SDK library


from [Link] import BlobClient

credential = DefaultAzureCredential()

# Retrieve the storage blob service URL, which is of the form


# [Link]
storage_url = [Link]["AZURE_STORAGE_BLOB_URL"]

# Create the client object using the storage URL and the credential
blob_client = BlobClient(
storage_url,
container_name="blob-container-01",
blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt",
credential=credential,
)

# Open a local file and upload its contents to Blob Storage


with open("./[Link]", "rb") as data:
blob_client.upload_blob(data)
print(f"Uploaded [Link] to {blob_client.url}")

Vínculos de referencia:

DefaultAzureCredential ([Link])
BlobClient ([Link])

2. Cree una variable de entorno llamada AZURE_STORAGE_BLOB_URL :

cmd

Símbolo del sistema de Windows

set
AZURE_STORAGE_BLOB_URL=[Link]
[Link]
Reemplace "pythonazurestorage12345" por el nombre de su cuenta de
almacenamiento.

En este ejemplo solo se usa la variable de entorno AZURE_STORAGE_BLOB_URL .


Las bibliotecas de Azure no la usan.

3. Use el comando az ad sp create-for-rbac para crear una entidad de servicio


nueva para la aplicación. El comando crea el registro de aplicación para la
aplicación al mismo tiempo. Asigne a la entidad de servicio un nombre de su
elección.

Azure CLI

az ad sp create-for-rbac --name <service-principal-name>

El resultado de este comando tendrá un aspecto similar al siguiente. Anote


estos valores o mantenga esta ventana abierta, ya que necesitará estos valores
en el paso siguiente y no podrá volver a ver el valor de la contraseña (secreto
del cliente). Sin embargo, si es necesario, se puede agregar una nueva
contraseña posteriormente sin invalidar la entidad de servicio ni las
contraseñas existentes.

JSON

{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "<service-principal-name>",
"password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}

Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o


en una estación de trabajo que tenga la CLI de Azure instalada.

4. Cree variables de entorno para la entidad de servicio de la aplicación:

Cree las siguientes variables de entorno con los valores de la salida del
comando anterior. Estas variables indican a DefaultAzureCredential que debe
usar la entidad de servicio de la aplicación.

AZURE_CLIENT_ID → Valor del id. de la aplicación.

AZURE_TENANT_ID → Valor del id. de inquilino.

AZURE_CLIENT_SECRET → Contraseña o credencial generada para la

aplicación.
cmd

Símbolo del sistema de Windows

set AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
set AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee
set AZURE_CLIENT_SECRET=Aa1Bb~2Cc3.-
Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2

5. Intente ejecutar el código (que produce un error de forma intencionada):

Consola

python use_blob_auth.py

6. Observe el error "Esta solicitud no está autorizada para realizar esta operación
mediante este permiso". Este error es esperado, porque la entidad de servicio
local que se está usando aún no tiene permiso para acceder al contenedor de
blobs.

7. Conceda permisos de Colaborador de Storage Blob Data en el contenedor


blob al service principal usando el comando az role assignment create de
Azure CLI:

Azure CLI

az role assignment create --assignee <AZURE_CLIENT_ID> \


--role "Storage Blob Data Contributor" \
--scope
"/subscriptions/<AZURE_SUBSCRIPTION_ID>/resourceGroups/PythonAzureE
xample-Storage-
rg/providers/[Link]/storageAccounts/pythonazurestorage12
345/blobServices/default/containers/blob-container-01"

El argumento --assignee identifica la entidad de servicio. Reemplace el


marcador de posición <AZURE_CLIENT_ID> por el identificador de aplicación
de la entidad de servicio.

El argumento --scope identifica dónde se aplica esta asignación de roles. En


este ejemplo, concederá el rol "Colaborador de datos de blobs de
almacenamiento" a la entidad de servicio para el contenedor específico
denominado "blob-container-01".
Reemplace PythonAzureExample-Storage-rg y pythonazurestorage12345
por el grupo de recursos que contiene la cuenta de almacenamiento y el
nombre exacto de la cuenta de almacenamiento. Además, ajuste el
nombre del contenedor de blobs, si es necesario. Si usa un nombre
incorrecto, aparecerá el error "No se puede realizar la operación
solicitada en el recurso anidado. No se encontró el recurso primario
'pythonazurestorage12345'".

Reemplace el marcador de posición <AZURE_SUBSCRIPTION_ID> por su


identificador de suscripción de Azure. (Puede ejecutar el comando az
account show y obtener el identificador de suscripción de la propiedad
id en la salida).

 Sugerencia

Si el comando de asignación de roles devuelve un error "No se


encontraron adaptadores de conexión" al usar el shell de Bash, intente
establecer export MSYS_NO_PATHCONV=1 para evitar la traducción de rutas
de acceso. Para más información, consulta esta propuesta .

8. Espere un minuto o dos para que los permisos se propaguen y, después,


vuelva a ejecutar el código para comprobar que ahora funciona. Si vuelve a
ver el error de permisos, espere un poco más y vuelva a probar el código.

Para más información sobre las asignaciones de roles, consulte Incorporación o


eliminación de asignaciones de roles de Azure mediante la CLI de Azure.

) Importante

En los pasos anteriores, su aplicación se ejecutó bajo una entidad de seguridad


de servicio de aplicación. Una entidad de seguridad de servicio de aplicación
requiere un secreto de cliente en su configuración. Sin embargo, puede usar el
mismo código para ejecutar la aplicación bajo diferentes tipos de credenciales
que no requieren que configure explícitamente una contraseña o secreto en el
entorno. Por ejemplo, durante el desarrollo, DefaultAzureCredential puede
usar credenciales de la herramienta para desarrolladores como las credenciales
que usa para iniciar sesión a través de la CLI de Azure; o bien, para las
aplicaciones alojadas en Azure, puede usar una identidad administrada. Para
obtener más información, consulte Autenticar aplicaciones Python en
servicios Azure mediante el SDK de Azure para Python.
5. Comprobación de la creación de blobs
Después de ejecutar el código de cualquiera de los métodos, vaya a Azure Portal , vaya
al contenedor de blobs para comprobar que existe un nuevo blob llamado sample-blob-
{random}.txt con el mismo contenido que el archivo [Link]:

Si creó una variable de entorno denominada AZURE_STORAGE_CONNECTION_STRING , también


Blob Storage puede usar la CLI de Azure para comprobar que el blob existe mediante el
comando az storage blob list:

Azure CLI

az storage blob list --container-name blob-container-01

Si ha seguido las instrucciones para usar la autenticación sin contraseña, puede agregar
el parámetro --connection-string al comando anterior con la cadena de conexión de la
cuenta de almacenamiento. Para obtener la cadena de conexión, use el comando az
storage account show-connection-string.

Azure CLI

az storage account show-connection-string --resource-group


PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv

Use la cadena de conexión completa como valor para el parámetro --connection-


string .
7 Nota

Si su cuenta de usuario Azure tiene el rol "Storage Blob Data Contributor" en el


contenedor, puede usar el siguiente comando para listar los blobs en el
contenedor:

Azure CLI

az storage blob list --container-name blob-container-01 --account-name


pythonazurestorage12345 --auth-mode login

6. Limpieza de recursos
Ejecute el comando az group delete si no necesita conservar el grupo de recursos y los
recursos de almacenamiento usados en este ejemplo. Los grupos de recursos no
incurren en cargos continuos en la suscripción, pero los recursos, como las cuentas de
almacenamiento en el grupo de recursos pueden seguir incurriendo en cargos. Es
recomendable limpiar cualquier grupo que no esté usando activamente. El argumento -
-no-wait permite que el comando devuelva el control inmediatamente en lugar de

esperar a que finalice la operación.

Azure CLI

az group delete -n PythonAzureExample-Storage-rg --no-wait

También puede usar el método


ResourceManagementClient.resource_groups.begin_delete para eliminar un grupo de
recursos del código. El código de Ejemplo: Creación de un grupo de recursos muestra el
uso.

Si ha seguido las instrucciones para usar la autenticación sin contraseña, es


recomendable eliminar la entidad de servicio de la aplicación que creó. Puede usar el
comando az ad app delete. Reemplace el marcador de posición <AZURE_CLIENT_ID>
por el identificador de aplicación de la entidad de servicio.

Azure CLI

az ad app delete --id <AZURE_CLIENT_ID>


Consulte también
Inicio rápido: Biblioteca cliente de Azure Blob Storage para Python
Ejemplo: Creación de un grupo de recursos
Ejemplo: Enumeración de los grupos de recursos de una suscripción
Ejemplo: Creación de una aplicación web e implementación de código
Ejemplo: Creación de Azure Storage
Ejemplo: Creación y consulta de una base de datos
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

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Ejemplo: Uso de las bibliotecas de Azure
para crear e implementar una aplicación
web
Artículo • 26/07/2024

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 [Link] con el siguiente contenido:
txt

azure-mgmt-resource
azure-mgmt-web
azure-identity

En un terminal o símbolo del sistema con el entorno virtual activado, instale los
requisitos:

Símbolo del sistema de Windows

pip install -r [Link]

3: Bifurcación del repositorio de ejemplo


Visite [Link] 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:

cmd

Símbolo del sistema de Windows

set REPO_URL=<url_of_your_fork>
set AZURE_SUBSCRIPTION_ID=<subscription_id>

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.

Python

import random, os
from [Link] import AzureCliCredential
from [Link] import ResourceManagementClient
from [Link] import WebSiteManagementClient

# Acquire a credential object using CLI-based authentication.


credential = AzureCliCredential()

# Retrieve subscription ID from environment variable


subscription_id = [Link]["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 [Link]
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 = [Link]("WEB_APP_NAME", f"PythonAzureExample-WebApp-
{[Link](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_N
AME,
SERVICE_PLAN_NAME,
{
"location": LOCATION,
"reserved": True,
"sku" : {"name" : "B1"}
}
)

plan_result = [Link]()

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 = [Link]()

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,
# [Link]
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 = [Link]["REPO_URL"]
poller =
app_service_client.web_apps.begin_create_or_update_source_control(RESOURCE_G
ROUP_NAME,
WEB_APP_NAME,
{
"location": "GitHub",
"repo_url": REPO_URL,
"branch": "master",
"is_manual_integration": True
}
)

sc_result = [Link]()

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 ([Link])
ResourceManagementClient ([Link])
WebSiteManagementClient ([Link] import)
5: Ejecución del script
Símbolo del sistema de Windows

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:

Azure CLI

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:

1. Vaya a Azure Portal .


2. Seleccione Grupos de recursos y busque el grupo de recursos que ha creado.
3. 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.
4. Seleccione el App Service y, a continuación, seleccione Centro de implementación.
5. 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:

Azure CLI

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:

1. Vaya a Azure Portal .


2. Seleccione Grupos de recursos y busque el grupo de recursos que ha creado.
3. 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.
4. Seleccione el App Service y, a continuación, seleccione Centro de implementación.
5. En el menú superior, seleccione Sincronizar para implementar el código.

8: Limpieza de recursos
Azure CLI

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:

cmd

Azure CLI

rem Replace <your_github_user_name> with the account name of the fork.

set repoUrl=[Link]
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

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Ejemplo: Uso de las bibliotecas de Azure
para crear una base de datos
Artículo • 26/07/2024

En este ejemplo se muestra cómo usar las bibliotecas de administración del SDK de
Azure en un script de Python para crear una base de datos y una instancia de servidor
flexible de Azure Database for MySQL. También proporciona un script sencillo para
consultar la base de datos mediante la biblioteca mysql-connector, que no forma parte
de Azure SDK. Puede usar código similar para crear una instancia de servidor flexible y
una base de datos Azure Database for PostgreSQL.

Más adelante en este artículo se indican los comandos equivalentes de la CLI de Azure.
Si prefiere usar Azure Portal, consulte Creación de un servidor MySQL o Creación de un
servidor PostgreSQL.

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 el 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 [Link] con el siguiente contenido:

txt
azure-mgmt-resource
azure-mgmt-rdbms
azure-identity
mysql-connector-python

En un terminal con el entorno virtual activado, instale los requisitos:

Consola

pip install -r [Link]

7 Nota

En Windows, si intenta instalar la biblioteca de MySQL en una biblioteca de Python


de 32 bits, se produce un error con el archivo mysql.h. En este caso, instale una
versión de 64 bits de Python e inténtelo de nuevo.

3: Escritura de código para crear la base de


datos
Cree un archivo de Python llamado provision_db.py con el siguiente código. Los detalles
se explican en los comentarios. En concreto, especifique variables de entorno para
AZURE_SUBSCRIPTION_ID y PUBLIC_IP_ADDRESS . Esta última variable es la dirección IP de la

estación de trabajo para que se ejecute este ejemplo. Puede usar WhatsIsMyIP para
buscar la dirección IP.

Python

import random, os
from [Link] import DefaultAzureCredential
from [Link] import ResourceManagementClient
from [Link].mysql_flexibleservers import MySQLManagementClient
from [Link].mysql_flexibleservers.models import Server,
ServerVersion

# Acquire a credential object using CLI-based authentication.


credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable


subscription_id = [Link]["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-DB-rg'
LOCATION = "southcentralus"

# 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 [Link]
resource-group

# Step 2: Provision the database server

# We use a random number to create a reasonably unique database server name.


# If you've already provisioned a database and need to re-run the script,
set
# the DB_SERVER_NAME environment variable to that name instead.
#
# Also set DB_USER_NAME and DB_USER_PASSWORD variables to avoid using the
defaults.

db_server_name = [Link]("DB_SERVER_NAME", f"python-azure-example-


mysql-{[Link](1,100000):05}")
db_admin_name = [Link]("DB_ADMIN_NAME", "azureuser")
db_admin_password = [Link]("DB_ADMIN_PASSWORD", "ChangePa$$w0rd24")

# Obtain the management client object


mysql_client = MySQLManagementClient(credential, subscription_id)

# Provision the server and wait for the result


poller = mysql_client.servers.begin_create(RESOURCE_GROUP_NAME,
db_server_name,
Server(
location=LOCATION,
administrator_login=db_admin_name,
administrator_login_password=db_admin_password,
version=ServerVersion.FIVE7
)
)

server = [Link]()

print(f"Provisioned MySQL server {[Link]}")

# Step 3: Provision a firewall rule to allow the local workstation to


connect

RULE_NAME = "allow_ip"
ip_address = [Link]["PUBLIC_IP_ADDRESS"]

# For the above code, create an environment variable named PUBLIC_IP_ADDRESS


that
# contains your workstation's public IP address as reported by a site like
# [Link]

# Provision the rule and wait for completion


poller =
mysql_client.firewall_rules.begin_create_or_update(RESOURCE_GROUP_NAME,
db_server_name, RULE_NAME,
{ "start_ip_address": ip_address, "end_ip_address": ip_address }
)

firewall_rule = [Link]()

print(f"Provisioned firewall rule {firewall_rule.name}")

# Step 4: Provision a database on the server

db_name = [Link]("DB_NAME", "example-db1")

poller = mysql_client.databases.begin_create_or_update(RESOURCE_GROUP_NAME,
db_server_name, db_name, {})

db_result = [Link]()

print(f"Provisioned MySQL database {db_result.name} with ID {db_result.id}")

Autenticación en el código
Más adelante en este artículo, debe iniciar sesión en Azure con la CLI de Azure para
ejecutar el código de ejemplo. Si la cuenta tiene permisos para crear grupos de recursos
y recursos de almacenamiento en la suscripción de Azure, el código se ejecutará
correctamente.

Para usar este código en un script de producción, puede establecer variables de entorno
para usar un método basado en la entidad de servicio para la autenticación. Para más
información, consulte Autenticación de aplicaciones de Python con los servicios de
Azure. Debe asegurarse de que la entidad de servicio tenga permisos suficientes para
crear grupos de recursos y recursos de almacenamiento en la suscripción mediante la
asignación de un rol adecuado en Azure; por ejemplo, el rol Colaborador de la
suscripción.

Vínculos de referencia a las clases usadas en el código


ResourceManagementClient ([Link])
MySQLManagementClient ([Link].mysql_flexibleservers)
Server ([Link].mysql_flexibleservers.models)
ServerVersion ([Link].mysql_flexibleservers.models)

Para el servidor de bases de datos PostreSQL, consulte:

PostgreSQLManagementClient ([Link].postgresql_flexibleservers)

4: Ejecución del script


1. Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:

Azure CLI

az login

2. Establezca las variables de entorno AZURE_SUBSCRIPTION_ID y PUBLIC_IP_ADDRESS .


Puede ejecutar el comando az account show para obtener el identificador de
suscripción de la propiedad id en la salida. Puede usar WhatsIsMyIP para buscar
la dirección IP.

cmd

Símbolo del sistema de Windows

set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
set PUBLIC_IP_ADDRESS=<Your public IP address>

3. Opcionalmente, establezca las variables de entorno DB_SERVER_NAME ,


DB_ADMIN_NAME y DB_ADMIN_PASSWORD ; de lo contrario, se usan los valores

predeterminados de código.

4. Ejecute el script:

Consola

python provision_db.py

5: Inserción de un registro y consulta de la base


de datos
Cree un archivo llamado use_db.py con el código siguiente. Tenga en cuenta las
dependencias de las variables de entorno DB_SERVER_NAME , DB_ADMIN_NAME y
DB_ADMIN_PASSWORD . Estos valores se obtienen de la salida de la ejecución del código

anterior provision_db.py o en el propio código.

Este código solo funciona para MySQL; use bibliotecas diferentes para PostgreSQL.

Python

import os
import [Link]

db_server_name = [Link]["DB_SERVER_NAME"]
db_admin_name = [Link]("DB_ADMIN_NAME", "azureuser")
db_admin_password = [Link]("DB_ADMIN_PASSWORD", "ChangePa$$w0rd24")

db_name = [Link]("DB_NAME", "example-db1")


db_port = [Link]("DB_PORT", 3306)

connection = [Link](user=db_admin_name,
password=db_admin_password, host=f"
{db_server_name}.[Link]",
port=db_port, database=db_name,
ssl_ca='./[Link]')

cursor = [Link]()

"""
# Alternate pyodbc connection; include pyodbc in [Link]
import pyodbc

driver = "{MySQL ODBC 5.3 UNICODE Driver}"

connect_string = f"DRIVER={driver};PORT=3306;SERVER=
{db_server_name}.[Link];" \
f"DATABASE={DB_NAME};UID={db_admin_name};PWD=
{db_admin_password}"

connection = [Link](connect_string)
"""

table_name = "ExampleTable1"

sql_create = f"CREATE TABLE {table_name} (name varchar(255), code int)"

[Link](sql_create)
print(f"Successfully created table {table_name}")

sql_insert = f"INSERT INTO {table_name} (name, code) VALUES ('Azure', 1)"


insert_data = "('Azure', 1)"

[Link](sql_insert)
print("Successfully inserted data into table")
sql_select_values= f"SELECT * FROM {table_name}"

[Link](sql_select_values)
row = [Link]()

while row:
print(str(row[0]) + " " + str(row[1]))
row = [Link]()

[Link]()

Todo este código usa la API [Link]. El único elemento específico de Azure es
el dominio host completo del servidor MySQL ([Link]).

A continuación, descargue el certificado necesario para comunicarse mediante TSL/SSL


con el servidor de Azure Database for MySQL de
[Link] y guarde el
archivo de certificado en la misma carpeta que el archivo de Python. Para más
información, consulte Obtención de un certificado SSL en la documentación de Azure
Database for MySQL.

Finalmente, ejecute el código:

Símbolo del sistema de Windows

python use_db.py

Si ve un error que indica que la dirección IP del cliente no está permitida, compruebe
que ha definido correctamente la variable de entorno PUBLIC_IP_ADDRESS . Si ya ha
creado el servidor MySQL con la dirección IP incorrecta, puede agregar otro en Azure
Portal . En el portal, seleccione el servidor MySQL y, a continuación, seleccione
Seguridad de conexión. Agregue la dirección IP de la estación de trabajo a la lista de
direcciones IP permitidas.

6: Limpieza de recursos
Ejecute el comando az group delete si no necesita conservar el grupo de recursos y los
recursos de almacenamiento creados en este ejemplo.

Los grupos de recursos no incurren en cargos continuos en la suscripción, pero los


recursos, como las cuentas de almacenamiento en el grupo de recursos pueden seguir
incurriendo en cargos. Es recomendable limpiar cualquier grupo que no esté usando
activamente. El argumento --no-wait permite que el comando devuelva el control
inmediatamente en lugar de esperar a que finalice la operación.

Azure CLI

az group delete -n PythonAzureExample-DB-rg --no-wait

También puede usar el método


ResourceManagementClient.resource_groups.begin_delete para eliminar un grupo de
recursos del código. El código de Ejemplo: Creación de un grupo de recursos muestra el
uso.

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. Para una base de datos postgreSQL, use
comandos az postgres flexible-server.

cmd

Azure CLI

az group create --location southcentralus --name PythonAzureExample-DB-


rg

az mysql flexible-server create --location southcentralus --resource-


group PythonAzureExample-DB-rg ^
--name python-azure-example-mysql-12345 --admin-user azureuser --
admin-password ChangePa$$w0rd24 ^
--sku-name Standard_B1ms --version 5.7 --yes

# Change the IP address to the public IP address of your workstation,


that is, the address shown
# by a site like [Link]

az mysql flexible-server firewall-rule create --resource-group


PythonAzureExample-DB-rg --name python-azure-example-mysql-12345 ^
--rule-name allow_ip --start-ip-address [Link] --end-ip-address
[Link]

az mysql flexible-server db create --resource-group PythonAzureExample-


DB-rg --server-name python-azure-example-mysql-12345 ^
--database-name example-db1
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 e implementación de una aplicación web
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

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Ejemplo: Uso de las bibliotecas de Azure
para crear una máquina virtual
Artículo • 26/07/2024

Este artículo le mostrará cómo usar las bibliotecas de administración de Azure SDK en
un script de Python para crear un grupo de recursos que contiene una máquina virtual
Linux.

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.

Más adelante en este artículo se indican los comandos equivalentes de la CLI de Azure.
Si prefiere usar Azure Portal, consulte Creación de una máquina virtual Linux y Creación
de una máquina virtual Windows.

7 Nota

La creación de una máquina virtual mediante código es un proceso de varios pasos


que implica el aprovisionamiento de una serie de recursos que la máquina virtual
requiere. Si simplemente ejecuta ese código desde la línea de comandos, es mucho
más sencillo usar el comando az vm create, que aprovisiona automáticamente
estos recursos secundarios con valores predeterminados para cualquier valor que
decida omitir. Los únicos argumentos necesarios son un grupo de recursos, el
nombre de la máquina virtual, el nombre de la imagen y las credenciales de inicio
de sesión. Para más información, consulte Creación rápida de una máquina virtual
con la CLI de Azure.

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 [Link] en el que se enumeren las bibliotecas de
administración que se usan en este ejemplo:

txt

azure-mgmt-resource
azure-mgmt-compute
azure-mgmt-network
azure-identity

Luego, en el terminal o el símbolo del sistema con el entorno virtual activado, instale las
bibliotecas de administración enumeradas en [Link]:

Consola

pip install -r [Link]

3: Escritura de código para crear una máquina


virtual
Cree un archivo de Python llamado provision_vm.py con el siguiente código. Los detalles
se explican en los comentarios:

Python

# Import the needed credential and management objects from the libraries.
import os

from [Link] import DefaultAzureCredential


from [Link] import ComputeManagementClient
from [Link] import NetworkManagementClient
from [Link] import ResourceManagementClient

print(
"Provisioning a virtual machine...some operations might take a \
minute or two."
)
# Acquire a credential object.
credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.


subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]

# Step 1: Provision a resource group

# Obtain the management object for resources.


resource_client = ResourceManagementClient(credential, 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-VM-rg"
LOCATION = "westus2"

# Provision the resource group.


rg_result = resource_client.resource_groups.create_or_update(
RESOURCE_GROUP_NAME, {"location": LOCATION}
)

print(
f"Provisioned resource group {rg_result.name} in the \
{rg_result.location} region"
)

# For details on the previous code, see Example: Provision a resource


# group at [Link]
# azure-sdk-example-resource-group

# Step 2: provision a virtual network

# A virtual machine requires a network interface client (NIC). A NIC


# requires a virtual network and subnet along with an IP address.
# Therefore we must provision these downstream components first, then
# provision the NIC, after which we can provision the VM.

# Network and IP address names


VNET_NAME = "python-example-vnet"
SUBNET_NAME = "python-example-subnet"
IP_NAME = "python-example-ip"
IP_CONFIG_NAME = "python-example-ip-config"
NIC_NAME = "python-example-nic"

# Obtain the management object for networks


network_client = NetworkManagementClient(credential, subscription_id)

# Provision the virtual network and wait for completion


poller = network_client.virtual_networks.begin_create_or_update(
RESOURCE_GROUP_NAME,
VNET_NAME,
{
"location": LOCATION,
"address_space": {"address_prefixes": ["[Link]/16"]},
},
)

vnet_result = [Link]()

print(
f"Provisioned virtual network {vnet_result.name} with address \
prefixes {vnet_result.address_space.address_prefixes}"
)

# Step 3: Provision the subnet and wait for completion


poller = network_client.subnets.begin_create_or_update(
RESOURCE_GROUP_NAME,
VNET_NAME,
SUBNET_NAME,
{"address_prefix": "[Link]/24"},
)
subnet_result = [Link]()

print(
f"Provisioned virtual subnet {subnet_result.name} with address \
prefix {subnet_result.address_prefix}"
)

# Step 4: Provision an IP address and wait for completion


poller = network_client.public_ip_addresses.begin_create_or_update(
RESOURCE_GROUP_NAME,
IP_NAME,
{
"location": LOCATION,
"sku": {"name": "Standard"},
"public_ip_allocation_method": "Static",
"public_ip_address_version": "IPV4",
},
)

ip_address_result = [Link]()

print(
f"Provisioned public IP address {ip_address_result.name} \
with address {ip_address_result.ip_address}"
)

# Step 5: Provision the network interface client


poller = network_client.network_interfaces.begin_create_or_update(
RESOURCE_GROUP_NAME,
NIC_NAME,
{
"location": LOCATION,
"ip_configurations": [
{
"name": IP_CONFIG_NAME,
"subnet": {"id": subnet_result.id},
"public_ip_address": {"id": ip_address_result.id},
}
],
},
)

nic_result = [Link]()

print(f"Provisioned network interface client {nic_result.name}")

# Step 6: Provision the virtual machine

# Obtain the management object for virtual machines


compute_client = ComputeManagementClient(credential, subscription_id)

VM_NAME = "ExampleVM"
USERNAME = "azureuser"
PASSWORD = "ChangePa$$w0rd24"

print(
f"Provisioning virtual machine {VM_NAME}; this operation might \
take a few minutes."
)

# Provision the VM specifying only minimal arguments, which defaults


# to an Ubuntu 18.04 VM on a Standard DS1 v2 plan with a public IP address
# and a default virtual network/subnet.

poller = compute_client.virtual_machines.begin_create_or_update(
RESOURCE_GROUP_NAME,
VM_NAME,
{
"location": LOCATION,
"storage_profile": {
"image_reference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "16.04.0-LTS",
"version": "latest",
}
},
"hardware_profile": {"vm_size": "Standard_DS1_v2"},
"os_profile": {
"computer_name": VM_NAME,
"admin_username": USERNAME,
"admin_password": PASSWORD,
},
"network_profile": {
"network_interfaces": [
{
"id": nic_result.id,
}
]
},
},
)
vm_result = [Link]()

print(f"Provisioned virtual machine {vm_result.name}")

Autenticación en el código
Más adelante en este artículo, debe iniciar sesión en Azure con la CLI de Azure para
ejecutar el código de ejemplo. Si la cuenta tiene permisos para crear grupos de recursos
y recursos de red y de proceso en la suscripción de Azure, el código se ejecutará
correctamente.

Para usar este código en un script de producción, puede establecer variables de entorno
para usar un método basado en la entidad de servicio para la autenticación. Para más
información, consulte Autenticación de aplicaciones de Python con los servicios de
Azure. Debe asegurarse de que la entidad de servicio tenga permisos suficientes para
crear grupos de recursos y red y recursos de proceso en la suscripción mediante la
asignación de un rol adecuado en Azure; por ejemplo, el rol Colaborador de la
suscripción.

Vínculos de referencia a las clases usadas en el código


DefaultAzureCredential ([Link])
ResourceManagementClient ([Link])
NetworkManagementClient ([Link])
ComputeManagementClient ([Link])

4. Ejecución del script


1. Si aún no lo ha hecho, inicie sesión en Azure mediante la CLI de Azure:

Azure CLI

az login

2. Establezca como valor de la variable de entorno AZURE_SUBSCRIPTION_ID el


identificador de su suscripción. (Puede ejecutar el comando az account show y
obtener el identificador de suscripción de la propiedad id en la salida):

cmd
Símbolo del sistema de Windows

set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000

3. Ejecute el script:

Consola

python provision_vm.py

El proceso de aprovisionamiento tarda algunos minutos en completarse.

5. Comprobación de los recursos


Abra Azure Portal , navegue hasta el grupo de recursos "PythonAzureExample-VM-rg"
y anote la máquina virtual, el disco virtual, el grupo de seguridad de red, la dirección IP
pública, la interfaz de red y la red virtual.

También puede usar la CLI de Azure para comprobar que la máquina virtual existe con el
comando az vm list:

Azure CLI

az vm list --resource-group PythonAzureExample-VM-rg


Comandos equivalentes de la CLI de Azure

cmd

Azure CLI

rem Provision the resource group

az group create -n PythonAzureExample-VM-rg -l westus2

rem Provision a virtual network and subnet

az network vnet create -g PythonAzureExample-VM-rg -n python-example-


vnet ^
--address-prefix [Link]/16 --subnet-name python-example-subnet ^
--subnet-prefix [Link]/24

rem Provision a public IP address

az network public-ip create -g PythonAzureExample-VM-rg -n python-


example-ip ^
--allocation-method Dynamic --version IPv4

rem Provision a network interface client

az network nic create -g PythonAzureExample-VM-rg --vnet-name python-


example-vnet ^
--subnet python-example-subnet -n python-example-nic ^
--public-ip-address python-example-ip

rem Provision the virtual machine

az vm create -g PythonAzureExample-VM-rg -n ExampleVM -l "westus2" ^


--nics python-example-nic --image UbuntuLTS --public-ip-sku Standard
^
--admin-username azureuser --admin-password ChangePa$$w0rd24

Si recibe un error sobre restricciones de capacidad, puede probar otro tamaño o región.
Para más información, consulte Resolución de los errores de no disponibilidad de la
SKU.

6: Limpieza de recursos
Deje los recursos en su lugar si desea seguir usando la máquina virtual y la red que creó
en este artículo. De lo contrario, ejecute el comando az group delete para eliminar el
grupo de recursos.
Los grupos de recursos no incurren en cargos continuos en la suscripción, pero es
posible que los recursos contenidos en el grupo de recursos, como las máquinas
virtuales, sigan generando cargos. Es recomendable limpiar cualquier grupo que no esté
usando activamente. El argumento --no-wait permite que el comando devuelva el
control inmediatamente en lugar de esperar a que finalice la operación.

Azure CLI

az group delete -n PythonAzureExample-VM-rg --no-wait

También puede usar el método


ResourceManagementClient.resource_groups.begin_delete para eliminar un grupo de
recursos del código. El código de Ejemplo: Creación de un grupo de recursos muestra el
uso.

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 de una aplicación web e implementación de código
Ejemplo: Creación y consulta de una base de datos
Uso de Azure Managed Disks con máquinas virtuales
Realización de una breve encuesta sobre el SDK de Azure para Python

Los siguientes recursos incluyen ejemplos más completos del uso de Python para crear
una máquina virtual:

Ejemplos de administración de Azure Virtual Machines: Python (GitHub). El


ejemplo muestra más operaciones de administración, como el inicio y el reinicio de
una máquina virtual, la detención y eliminación de una máquina virtual, el
aumento del tamaño del disco y la administración de discos de datos.

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Uso de Azure Managed Disks con las
bibliotecas de Azure (SDK) para Python
Artículo • 16/03/2024

Azure Managed Disks son un almacenamiento en bloques duradero y de alto


rendimiento diseñado para usarse con Azure Virtual Machines y Azure VMware Solution.
Azure Managed Disks proporciona administración simplificada de discos, escalabilidad
mejorada, seguridad mejorada y mejor escalado sin tener que trabajar directamente con
cuentas de almacenamiento. Para más información, consulte Azure Managed Disks.

La biblioteca se usa azure-mgmt-compute para administrar Managed Disks para una


máquina virtual existente.

Para obtener un ejemplo de cómo crear una máquina virtual con la azure-mgmt-compute
biblioteca, consulte Ejemplo: Creación de una máquina virtual.

Los ejemplos de código de este artículo muestran cómo realizar algunas tareas comunes
con discos administrados mediante la azure-mgmt-compute biblioteca. No se pueden
ejecutar tal como está, pero están diseñados para incorporarse en su propio código.
Puede consultar Ejemplo: Creación de una máquina virtual para obtener información
sobre cómo crear una instancia de [Link] ComputeManagementClient en el
código para ejecutar los ejemplos.

Para obtener ejemplos más completos de cómo usar la azure-mgmt-compute biblioteca,


consulte Ejemplos de Azure SDK para Python para el proceso en GitHub.

Discos administrados independientes


Puede crear discos administrados independientes de muchas maneras, como se muestra
en las secciones siguientes.

Crear un disco administrado vacío


Python

from [Link] import DiskCreateOption

poller = compute_client.disks.begin_create_or_update(
'my_resource_group',
'my_disk_name',
{
'location': 'eastus',
'disk_size_gb': 20,
'creation_data': {
'create_option': [Link]
}
}
)
disk_resource = [Link]()

Crear un disco administrado a partir de Blob Storage


El disco administrado se crea a partir de un disco duro virtual (VHD) almacenado como
un blob.

Python

from [Link] import DiskCreateOption

poller = compute_client.disks.begin_create_or_update(
'my_resource_group',
'my_disk_name',
{
'location': 'eastus',
'creation_data': {
'create_option': [Link],
'storage_account_id': '/subscriptions/<subscription-
id>/resourceGroups/<resource-group-
name>/providers/[Link]/storageAccounts/<storage-account-name>',
'source_uri': '[Link]
name>.[Link]/vm-images/[Link]'
}
}
)
disk_resource = [Link]()

Crear una imagen de disco administrado a partir de Blob


Storage
La imagen de disco administrado se crea a partir de un disco duro virtual (VHD)
almacenado como un blob.

Python

from [Link] import OperatingSystemStateTypes,


HyperVGeneration

poller = compute_client.images.begin_create_or_update(
'my_resource_group',
'my_image_name',
{
'location': 'eastus',
'storage_profile': {
'os_disk': {
'os_type': 'Linux',
'os_state': [Link],
'blob_uri': '[Link]
name>.[Link]/vm-images/[Link]',
'caching': "ReadWrite",
},
},
'hyper_v_generation': HyperVGeneration.V2,
}
)
image_resource = [Link]()

Crear un disco administrado a partir de una imagen de su


propiedad
Python

from [Link] import DiskCreateOption

# If you don't know the id, do a 'get' like this to obtain it


managed_disk = compute_client.[Link](self.group_name, 'myImageDisk')

poller = compute_client.disks.begin_create_or_update(
'my_resource_group',
'my_disk_name',
{
'location': 'eastus',
'creation_data': {
'create_option': [Link],
'source_resource_id': managed_disk.id
}
}
)

disk_resource = [Link]()

Máquina virtual con discos administrados


Puede crear una máquina virtual con un disco administrado implícito para una imagen
de disco específica, lo que le evita tener que especificar todos los detalles.

Un disco administrado se crea implícitamente al crear una máquina virtual a partir de


una imagen del sistema operativo en Azure. En el parámetro storage_profile , el
elemento os_disk es opcional y no es necesario crear una cuenta de almacenamiento
como condición previa necesaria para crear una máquina virtual.

Python

storage_profile = [Link](
image_reference = [Link](
publisher='Canonical',
offer='UbuntuServer',
sku='16.04-LTS',
version='latest'
)
)

Para obtener un ejemplo completo sobre cómo crear una máquina virtual mediante las
bibliotecas de administración de Azure, para Python, consulte Ejemplo: Creación de una
máquina virtual. En el ejemplo de creación, se usa el storage_profile parámetro .

También puede crear una storage_profile con sus propias imágenes.

Python

# If you don't know the id, do a 'get' like this to obtain it


image = compute_client.[Link](self.group_name, 'myImageDisk')

storage_profile = [Link](
image_reference = [Link](
id = [Link]
)
)

Puede conectar fácilmente un disco administrado aprovisionado anteriormente:

Python

vm = compute_client.virtual_machines.get(
'my_resource_group',
'my_vm'
)
managed_disk = compute_client.[Link]('my_resource_group', 'myDisk')

vm.storage_profile.data_disks.append({
'lun': 12, # You choose the value, depending of what is available for
you
'name': managed_disk.name,
'create_option': [Link],
'managed_disk': {
'id': managed_disk.id
}
})

async_update = compute_client.virtual_machines.begin_create_or_update(
'my_resource_group',
[Link],
vm,
)
async_update.wait()

Conjuntos de escalado de máquinas virtuales


con discos administrados
Antes de los discos administrados, había que crear manualmente una cuenta de
almacenamiento para todas las máquinas virtuales que quería dentro del conjunto de
escalado y, a continuación, usar el parámetro de lista vhd_containers para proporcionar
el nombre de todas las cuentas de almacenamiento a la API de REST del conjunto de
escalado.

Dado que no tiene que administrar cuentas de almacenamiento con Azure Managed
Disks, el storage_profile para virtual Machine Scale Sets ahora puede ser exactamente
el mismo que el usado en la creación de máquinas virtuales:

Python

'storage_profile': {
'image_reference': {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "16.04-LTS",
"version": "latest"
}
},

El ejemplo completo es el siguiente:

Python

naming_infix = "PyTestInfix"

vmss_parameters = {
'location': [Link],
"overprovision": True,
"upgrade_policy": {
"mode": "Manual"
},
'sku': {
'name': 'Standard_A1',
'tier': 'Standard',
'capacity': 5
},
'virtual_machine_profile': {
'storage_profile': {
'image_reference': {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "16.04-LTS",
"version": "latest"
}
},
'os_profile': {
'computer_name_prefix': naming_infix,
'admin_username': 'Foo12',
'admin_password': 'BaR@123!!!!',
},
'network_profile': {
'network_interface_configurations' : [{
'name': naming_infix + 'nic',
"primary": True,
'ip_configurations': [{
'name': naming_infix + 'ipconfig',
'subnet': {
'id': [Link]
}
}]
}]
}
}
}

# Create VMSS test


result_create =
compute_client.virtual_machine_scale_sets.begin_create_or_update(
'my_resource_group',
'my_scale_set',
vmss_parameters,
)
vmss_result = result_create.result()

Otras operaciones con discos administrados

Cambio del tamaño de un disco administrado


Python

managed_disk = compute_client.[Link]('my_resource_group', 'myDisk')


managed_disk.disk_size_gb = 25
async_update = self.compute_client.disks.begin_create_or_update(
'my_resource_group',
'myDisk',
managed_disk
)
async_update.wait()

Actualización del tipo de cuenta de almacenamiento de


los discos administrados
Python

from [Link] import StorageAccountTypes

managed_disk = compute_client.[Link]('my_resource_group', 'myDisk')


managed_disk.account_type = StorageAccountTypes.STANDARD_LRS

async_update = self.compute_client.disks.begin_create_or_update(
'my_resource_group',
'myDisk',
managed_disk
)
async_update.wait()

Crear una imagen a partir de un almacenamiento de


blobs
Python

async_create_image = compute_client.images.create_or_update(
'my_resource_group',
'myImage',
{
'location': 'eastus',
'storage_profile': {
'os_disk': {
'os_type': 'Linux',
'os_state': "Generalized",
'blob_uri': '[Link]
name>.[Link]/vm-images/[Link]',
'caching': "ReadWrite",
}
}
}
)
image = async_create_image.result()
Creación de una instantánea de un disco administrado
que esté asociado actualmente a una máquina virtual
Python

managed_disk = compute_client.[Link]('my_resource_group', 'myDisk')

async_snapshot_creation =
self.compute_client.snapshots.begin_create_or_update(
'my_resource_group',
'mySnapshot',
{
'location': 'eastus',
'creation_data': {
'create_option': 'Copy',
'source_uri': managed_disk.id
}
}
)
snapshot = async_snapshot_creation.result()

Consulte también
Ejemplo: Creación de una máquina virtual
Ejemplo: Creación de un grupo de recursos
Ejemplo: Enumeración de grupos de recursos en una suscripción
Ejemplo: Creación de Azure Storage
Ejemplo: Uso de Azure Storage
Ejemplo: Creación y uso de una base de datos MySQL
Realización de una breve encuesta sobre el SDK de Azure para Python
Configuración del registro en las
bibliotecas de Azure para Python
Artículo • 01/02/2024

Las bibliotecas de Azure para Python basadas en [Link] proporcionan resultados de


registro mediante la biblioteca de registro estándar de Python .

Este es el proceso general para trabajar con el registro:

1. Adquiera el objeto de registro de la biblioteca deseada y establezca el nivel de


registro.
2. Registre un controlador para el flujo de registro.
3. Para incluir información de HTTP, pase un parámetro logging_enable=True a un
constructor de objetos de cliente, un constructor de objetos de credencial o un
método específico.

En las restantes secciones del artículo encontrará más información al respecto.

Como norma general, el mejor recurso para comprender el uso del registro dentro de
las bibliotecas es examinar el código fuente del SDK en [Link]/Azure/azure-sdk-
for-python . Se recomienda clonar este repositorio de forma local para que pueda
buscar fácilmente los detalles cuando sea necesario, como se sugiere en las siguientes
secciones.

Establecimiento de los niveles de registro


Python

import logging

# ...

# Acquire the logger for a library ([Link] in this example)


logger = [Link]('[Link]')

# Set the desired logging level


[Link]([Link])

En este ejemplo se adquiere el registrador de la biblioteca [Link] y,


a continuación, se establece el nivel de registro en [Link] .
Puede llamar a [Link] en cualquier momento para cambiar el nivel de
registro de los distintos segmentos de código.
Para establecer un nivel para una biblioteca diferente, utilice el nombre de esa biblioteca
en la llamada a [Link] . Por ejemplo, la biblioteca azure-eventhubs
proporciona un registrador llamado [Link] , la biblioteca azure-storage-queue
proporciona un registrador llamado [Link] , etc. (El código fuente del SDK
usa con frecuencia la instrucción [Link](__name__) , que adquiere un
registrador con el nombre del módulo contenedor).

También puede utilizar espacios de nombres más generales. Por ejemplo,

Python

import logging

# Set the logging level for all azure-storage-* libraries


logger = [Link]('[Link]')
[Link]([Link])

# Set the logging level for all azure-* libraries


logger = [Link]('azure')
[Link]([Link])

Algunas bibliotecas usan el azure registrador en lugar de un registrador específico. Por


ejemplo, la biblioteca azure-storage-blob usa el registrador azure .

puede usar el método [Link] para comprobar si está habilitado un nivel


de registro determinado:

Python

# Direct logging output to stdout. Without adding a handler,


# no logging output is visible.
handler = [Link](stream=[Link])
[Link](handler)

print(

Los niveles de registro son los mismos que los niveles de la biblioteca de registro
estándar . En la tabla siguiente se describe el uso general de estos niveles de registro
en las bibliotecas de Azure para Python:

ノ Expandir tabla

Nivel de registro Uso típico

[Link] Errores en los que no es probable que la aplicación se recupere (por


ejemplo, memoria insuficiente).
Nivel de registro Uso típico

[Link] Una función no puede realizar la tarea deseada (pero no cuando la función
(predeterminado) se puede recuperar, como al volver a intentar una llamada a la API REST).
Normalmente, las funciones registran una advertencia al generar
excepciones. El nivel de advertencia habilita automáticamente el nivel de
error.

[Link] La función opera con normalidad o se cancela una llamada de servicio. Los
eventos de información suelen incluir solicitudes, respuestas y
encabezados. El nivel de información habilita automáticamente los niveles
de error y de advertencia.

[Link] Información detallada que se usa normalmente para solucionar problemas


e incluye un seguimiento de la pila para las excepciones. El nivel de
depuración habilita automáticamente los niveles de información, de
advertencia y de error. PRECAUCIÓN: Si también establece
logging_enable=True , el nivel de depuración incluye información
confidencial, como claves de cuenta en encabezados y otras credenciales.
Asegúrese de proteger estos registros para evitar poner en peligro la
seguridad.

[Link] Deshabilita todos los registros.

Comportamiento del nivel de registro específico de la


biblioteca
El comportamiento de registro exacto en cada nivel depende de la biblioteca en
cuestión. Algunas bibliotecas, como [Link], realizan un registro extenso,
mientras que otras bibliotecas no lo hacen.

La mejor manera de examinar el registro exacto de una biblioteca es buscar los niveles
de registro en el código fuente de Azure SDK para Python:

1. En la carpeta del repositorio, vaya a la carpeta sdk y, a continuación, vaya a la


carpeta del servicio específico de su interés.

2. En esa carpeta, busque cualquiera de las siguientes cadenas:

_LOGGER.error

_LOGGER.warning
_LOGGER.info

_LOGGER.debug
Registro de un controlador del flujo de
registros
Para capturar la salida del registro, debe registrar al menos un controlador del flujo de
registros en el código:

Python

import logging
f"Logger enabled for ERROR={[Link]([Link])}, "
f"WARNING={[Link]([Link])}, "
f"INFO={[Link]([Link])}, "
f"DEBUG={[Link]([Link])}"
)

En este ejemplo se registra un controlador que dirige la salida del registro a stdout.
Puede usar otros tipos de controladores, como se describe en [Link] en la
documentación de Python, o bien usar el método [Link] .

Habilitación del registro HTTP para un objeto o


una operación de cliente
De forma predeterminada, el registro en las bibliotecas de Azure no incluye información
HTTP. Para incluir información HTTP en la salida del registro (como nivel DEBUG), debe
pasar logging_enable=True explícitamente a un constructor de objeto de cliente o
credencial o a un método específico.

U Precaución

El registro HTTP puede revelar información confidencial, como las claves de cuenta,
en encabezados y otras credenciales. Asegúrese de proteger estos registros para
evitar poner en peligro la seguridad.

Habilitación del registro HTTP para un objeto de cliente


(nivel de depuración)
Python

from [Link] import BlobClient


from [Link] import DefaultAzureCredential
# Enable HTTP logging on the client object when using DEBUG level
# endpoint is the Blob storage URL.
client = BlobClient(endpoint, DefaultAzureCredential(), logging_enable=True)

La habilitación del registro HTTP para un objeto de cliente habilita el registro de todas
las operaciones invocadas mediante ese objeto.

Habilitación del registro HTTP para un objeto de


credencial (nivel de depuración)
Python

from [Link] import BlobClient


from [Link] import DefaultAzureCredential

# Enable HTTP logging on the credential object when using DEBUG level
credential = DefaultAzureCredential(logging_enable=True)

# endpoint is the Blob storage URL.


client = BlobClient(endpoint, credential)

Al habilitar el registro HTTP para un objeto de credencial, se habilita el registro para


todas las operaciones invocadas a través de ese objeto, pero no para las operaciones de
un objeto cliente que no implican autenticación.

Habilitación del registro para un método individual (nivel


de depuración)
Python

from [Link] import BlobClient


from [Link] import DefaultAzureCredential

# endpoint is the Blob storage URL.


client = BlobClient(endpoint, DefaultAzureCredential())

# Enable HTTP logging for only this operation when using DEBUG level
client.create_container("container01", logging_enable=True)

Ejemplo de salida del registro


El siguiente código es el que se muestra en Ejemplo: Uso de una cuenta de
almacenamiento, al que se ha agregado la habilitación del registro de DEBUG y HTTP:
Python

import logging
import os
import sys
import uuid

from [Link] import exceptions


from [Link] import DefaultAzureCredential
from [Link] import BlobClient

logger = [Link]("azure")
[Link]([Link])

# Set the logging level for the [Link] library


logger = [Link]("[Link]")
[Link]([Link])

# Direct logging output to stdout. Without adding a handler,


# no logging output is visible.
handler = [Link](stream=[Link])
[Link](handler)

print(
f"Logger enabled for ERROR={[Link]([Link])}, "
f"WARNING={[Link]([Link])}, "
f"INFO={[Link]([Link])}, "
f"DEBUG={[Link]([Link])}"
)

try:
credential = DefaultAzureCredential()
storage_url = [Link]["AZURE_STORAGE_BLOB_URL"]
unique_str = str(uuid.uuid4())[0:5]

# Enable logging on the client object


blob_client = BlobClient(
storage_url,
container_name="blob-container-01",
blob_name=f"sample-blob-{unique_str}.txt",
credential=credential,
)

with open("./[Link]", "rb") as data:


blob_client.upload_blob(data, logging_body=True,
logging_enable=True)

except (
[Link],
[Link]
) as e:
print([Link])
La salida es como sigue:

Output

Logger enabled for ERROR=True, WARNING=True, INFO=True, DEBUG=True


Request URL: '[Link]
container-01/[Link]'
Request method: 'PUT'
Request headers:
'Content-Length': '77'
'x-ms-blob-type': 'BlockBlob'
'If-None-Match': '*'
'x-ms-version': '2023-11-03'
'Content-Type': 'application/octet-stream'
'Accept': 'application/xml'
'User-Agent': 'azsdk-python-storage-blob/12.19.0 Python/3.10.11
(Windows-10-10.0.22631-SP0)'
'x-ms-date': 'Fri, 19 Jan 2024 19:25:53 GMT'
'x-ms-client-request-id': '8f7b1b0b-b700-11ee-b391-782b46f5c56b'
'Authorization': '*****'
Request body:
b"Hello there, Azure Storage. I'm a friendly file ready to be stored in a
blob."
Response status: 201
Response headers:
'Content-Length': '0'
'Content-MD5': 'SUytm0872jZh+KYqtgjbTA=='
'Last-Modified': 'Fri, 19 Jan 2024 19:25:54 GMT'
'ETag': '"0x8DC1924749AE3C3"'
'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
'x-ms-request-id': '7ac499fa-601e-006d-3f0d-4bdf28000000'
'x-ms-client-request-id': '8f7b1b0b-b700-11ee-b391-782b46f5c56b'
'x-ms-version': '2023-11-03'
'x-ms-content-crc64': 'rtHLUlztgxc='
'x-ms-request-server-encrypted': 'true'
'Date': 'Fri, 19 Jan 2024 19:25:53 GMT'
Response content:
b''

7 Nota

Si recibe un error de autorización, asegúrese de que a la identidad en la que se


ejecuta se le asigna el rol "Colaborador de datos de Storage Blob" en el contenedor
de blobs. Para más información, consulte Uso de Blob Storage con autenticación.
Configuración de servidores proxy para
El SDK de Azure para Python
Artículo • 08/02/2024

Si su organización requiere el uso de un servidor proxy para acceder a los recursos de


Internet, deberá establecer una variable de entorno con la información del servidor
proxy para usar el SDK de Azure para Python. Establecer las variables de entorno
(HTTP_PROXY y HTTPS_PROXY) hace que Azure SDK para Python use el servidor proxy
en tiempo de ejecución.

Una dirección URL del servidor proxy tiene el formato http[s]://[username:password@]


<ip_address_or_domain>:<port>/ en el que la combinación de nombre de usuario y

contraseña es opcional.

Después, puede configurar un proxy globalmente mediante variables de entorno, o


puede especificar un proxy pasando un argumento llamado proxies a un método de
operación o constructor de cliente individual.

Configuración global
Para configurar un proxy globalmente para el script o la aplicación, defina variables de
entorno HTTP_PROXY o HTTPS_PROXY con la dirección URL del servidor. Estas variables
funcionan con cualquier versión de las bibliotecas de Azure. Tenga en cuenta que
HTTPS_PROXY no significa HTTPS proxy, pero el proxy para https:// las solicitudes.

Estas variables de entorno se omiten si se pasa el parámetro use_env_settings=False a


un constructor de objetos de cliente o a un método de operación.

Establecer desde la línea de comandos

cmd

Símbolo del sistema de Windows

rem Non-authenticated HTTP server:


set HTTP_PROXY=[Link]

rem Authenticated HTTP server:


set HTTP_PROXY=[Link]

rem Non-authenticated HTTPS server:


set HTTPS_PROXY=[Link]

rem Authenticated HTTPS server:


set HTTPS_PROXY=[Link]

Establecer en código de Python


Puede establecer la configuración de proxy mediante variables de entorno, sin
necesidad de configuración personalizada.

Python

import os
[Link]["HTTP_PROXY"] = "[Link]

# Alternate URL and variable forms:


# [Link]["HTTP_PROXY"] = "[Link]
# [Link]["HTTPS_PROXY"] = "[Link]
# [Link]["HTTPS_PROXY"] = "[Link]

Configuración personalizada

Establecer en código de Python por cliente o por método


Para la configuración personalizada, puede especificar un proxy para un objeto de
cliente específico o un método de operación. Especifique un servidor proxy con un
argumento denominado proxies .

Por ejemplo, el código siguiente del artículo Ejemplo: Uso de las bibliotecas de Azure
con Azure Storage especifica un proxy HTTPS con credenciales de usuario con el
constructor BlobClient . En este caso, el objeto procede de la biblioteca
[Link], que se basa en [Link].

Python

from [Link] import DefaultAzureCredential

# Import the client object from the SDK library


from [Link] import BlobClient

credential = DefaultAzureCredential()

storage_url = "[Link]
blob_client = BlobClient(storage_url, container_name="blob-container-01",
blob_name="[Link]", credential=credential,
proxies={ "https": "[Link] }
)

# Other forms that the proxy URL might take:


# proxies={ "http": "[Link] }
# proxies={ "http": "[Link] }
# proxies={ "https": "[Link] }
Multinube: Conectar a todas las
regiones con las bibliotecas de Azure
para Python
Artículo • 12/12/2023

Puede usar las bibliotecas de Azure para Python para conectarse a todas las regiones en
las que Azure está disponible .

De forma predeterminada, las bibliotecas de Azure están configuradas para conectarse a


la nube global de Azure.

Uso de constantes de nube soberana


predefinidas
El módulo de la [Link] biblioteca proporciona AzureAuthorityHosts constantes
de nube soberana predefinidas:

AZURE_CHINA

AZURE_GOVERNMENT
AZURE_PUBLIC_CLOUD

Para usar una definición, importe la constante adecuada desde


[Link] y aplíquela al crear objetos de cliente.

Al usar DefaultAzureCredential, como se muestra en el ejemplo siguiente, puede


especificar la nube mediante el valor adecuado de [Link] .

Python

import os
from [Link] import ResourceManagementClient, SubscriptionClient
from [Link] import DefaultAzureCredential, AzureAuthorityHosts

authority = AzureAuthorityHosts.AZURE_CHINA
resource_manager = "[Link]

# Set environment variable AZURE_SUBSCRIPTION_ID as well as environment


variables
# for DefaultAzureCredential. For combinations of environment variables, see
# [Link]
python/tree/main/sdk/identity/azure-identity#environment-variables
subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]
# When using sovereign domains (that is, any cloud other than
AZURE_PUBLIC_CLOUD),
# you must use an authority with DefaultAzureCredential.
credential = DefaultAzureCredential(authority=authority)

resource_client = ResourceManagementClient(
credential, subscription_id,
base_url=resource_manager,
credential_scopes=[resource_manager + "/.default"])

subscription_client = SubscriptionClient(
credential,
base_url=resource_manager,
credential_scopes=[resource_manager + "/.default"])

Mediante su propia definición de nube


En el código siguiente, reemplace los valores de las authority variables , endpoint y
audience por los valores adecuados para la nube privada.

Python

import os
from [Link] import ResourceManagementClient, SubscriptionClient
from [Link] import DefaultAzureCredential
from [Link] import KnownProfiles

# Set environment variable AZURE_SUBSCRIPTION_ID as well as environment


variables
# for DefaultAzureCredential. For combinations of environment variables, see
# [Link]
python/tree/main/sdk/identity/azure-identity#environment-variables
subscription_id = [Link]["AZURE_SUBSCRIPTION_ID"]

authority = "<your authority>"


endpoint = "<your endpoint>"
audience = "<your audience>"

# When using a private cloud, you must use an authority with


DefaultAzureCredential.
# The active_directory endpoint should be a URL like
[Link]
credential = DefaultAzureCredential(authority=authority)

resource_client = ResourceManagementClient(
credential, subscription_id,
base_url=endpoint,
profile=KnownProfiles.v2019_03_01_hybrid,
credential_scopes=[audience])
subscription_client = SubscriptionClient(
credential,
base_url=endpoint,
profile=KnownProfiles.v2019_03_01_hybrid,
credential_scopes=[audience])

Por ejemplo, para Azure Stack, puede usar el comando az cloud show cli para devolver
los detalles de una nube registrada. En la salida siguiente se muestran los valores
devueltos para la nube pública de Azure, pero la salida de una nube privada de Azure
Stack debe ser similar.

Resultados

{
"endpoints": {
"activeDirectory": "[Link]
"activeDirectoryDataLakeResourceId": "[Link]
"activeDirectoryGraphResourceId": "[Link]
"activeDirectoryResourceId": "[Link]
"appInsightsResourceId": "[Link]
"appInsightsTelemetryChannelResourceId":
"[Link]
"attestationResourceId": "[Link]
"azmirrorStorageAccountResourceId": null,
"batchResourceId": "[Link]
"gallery": "[Link]
"logAnalyticsResourceId": "[Link]
"management": "[Link]
"mediaResourceId": "[Link]
"microsoftGraphResourceId": "[Link]
"ossrdbmsResourceId": "[Link]
"portal": "[Link]
"resourceManager": "[Link]
"sqlManagement": "[Link]
"synapseAnalyticsResourceId": "[Link]
"vmImageAliasDoc": "[Link]
api-specs/main/arm-compute/quickstart-templates/[Link]"
},
"isActive": true,
"name": "AzureCloud",
"profile": "latest",
"suffixes": {
"acrLoginServerEndpoint": ".[Link]",
"attestationEndpoint": ".[Link]",
"azureDatalakeAnalyticsCatalogAndJobEndpoint":
"[Link]",
"azureDatalakeStoreFileSystemEndpoint": "[Link]",
"keyvaultDns": ".[Link]",
"mariadbServerEndpoint": ".[Link]",
"mhsmDns": ".[Link]",
"mysqlServerEndpoint": ".[Link]",
"postgresqlServerEndpoint": ".[Link]",
"sqlServerHostname": ".[Link]",
"storageEndpoint": "[Link]",
"storageSyncEndpoint": "[Link]",
"synapseAnalyticsEndpoint": ".[Link]"
}
}

En el código anterior, puede establecer authority en el valor de la


[Link] propiedad , endpoint en el valor de la

[Link] propiedad y audience en el valor de


[Link] property + ".default".

Para más información, consulte Uso de la CLI de Azure con Azure Stack Hub y Obtención
de información de autenticación para Azure Stack Hub.
Índice de paquetes de las bibliotecas de
Azure
Artículo • 13/08/2024

Los paquetes del SDK de Python de Azure se publican en PyPI , así como las versiones
beta designadas con la letra "b" siguientes a la versión. Para obtener más información,
consulte Versiones de SDK de Azure: Python .

Si busca información sobre cómo usar un paquete específico:

Busque el paquete en la tabla y seleccione el vínculo de GitHub en la columna


Origen. Este vínculo le llevará al código fuente del paquete. Cada repositorio de
paquetes tiene un archivo [Link] con algunos ejemplos de código para
empezar.
Busque el paquete en la tabla y seleccione el vínculo de la documentación en la
columna Documentos. Este vínculo le lleva a la documentación de la API. La
página de documentación de la API incluye información general sobre el paquete y
es útil si busca información general sobre todas las clases de un paquete y le hace
resumen general de todos los métodos de una clase.
Consulte la documentación de Azure para desarrolladores de Python. En estos
documentos, puede consultar más ejemplos del uso de paquetes, así como guías
de inicio rápido y tutoriales. Por ejemplo, para obtener información sobre cómo
instalar paquetes, consulte Cómo instalar paquetes de biblioteca de Azure para
Python.

La columna Nombre incluye un nombre descriptivo para cada paquete. Para buscar el
nombre que necesita usar para instalar el paquete con pip , use los vínculos de las
columnas Paquete (Package), Documentos (Docs) u Origen (Source) . Por ejemplo, la
columna Nombre (Name) del paquete de Azure Blob Storage es "Blobs" mientras que el
nombre del paquete es azure-storage-blob.

7 Nota

En el caso de las bibliotecas de Conda, consulte el canal de Microsoft en


[Link] .

Bibliotecas que usan [Link]


ノ Expandir tabla

Nombre Paquete Docs Source

IA generativa PyPI 1.0.0b8 Documentación GitHub 1.0.0b8

Inferencia de modelos por IA PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Recursos de IA PyPI 1.0.0b8 Documentación GitHub 1.0.0b8

Anomaly Detector PyPI 3.0.0b6 Documentación GitHub 3.0.0b6

App Configuration PyPI 1.6.0 Documentación GitHub 1.6.0

Proveedor de App Configuration PyPI 1.2.0 docs GitHub 1.2.0

Atestación PyPI 1.0.0 docs GitHub 1.0.0

Azure AI Search PyPI 11.4.0 Documentación GitHub 11.4.0


PyPI 11.6.0b4 GitHub 11.6.0b4

SDK de Visión de Azure AI PyPI 0.15.1b1 GitHub 0.15.1b1

Almacén de puntos de control de PyPI 1.1.4 Documentación GitHub 1.1.4


Azure Blob Storage

AIO de almacén de puntos de control PyPI 1.1.4 Documentación GitHub 1.1.4


de Azure Blob Storage

Azure Monitor OpenTelemetry PyPI 1.6.1 Documentación GitHub 1.6.1

Azure Remote Rendering PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Automatización de llamadas de PyPI 1.2.0 docs GitHub 1.2.0


comunicación PyPI 1.3.0b1 GitHub 1.3.0b1

Communication Chat PyPI 1.3.0 docs GitHub 1.3.0

Correo electrónico de comunicación PyPI 1.0.0 docs GitHub 1.0.0

Identidad de comunicación PyPI 1.5.0 Documentación GitHub 1.5.0

JobRouter de comunicaciones PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Mensajes de comunicación PyPI 1.0.0 docs GitHub 1.0.0

Communication Network Traversal PyPI 1.1.0b2 Documentación GitHub 1.1.0b2

Communication Phone Numbers PyPI 1.1.0 docs GitHub 1.1.0


PyPI 1.2.0b3 GitHub 1.2.0b3

Salas de comunicación PyPI 1.1.0 docs GitHub 1.1.0


Nombre Paquete Docs Source

Communication Sms PyPI 1.0.1 docs GitHub 1.0.1

Confidential Ledger PyPI 1.1.1 docs GitHub 1.1.1

Container Registry PyPI 1.2.0 docs GitHub 1.2.0

Content Safety PyPI 1.0.0 docs GitHub 1.0.0

Reconocimiento del lenguaje PyPI 1.1.0 docs GitHub 1.1.0


conversacional

Core - Cliente - Core PyPI 1.30.2 Documentación GitHub 1.30.2

Core - Cliente - Core HTTP PyPI 1.0.0b5 Documentación GitHub 1.0.0b5

Core - Cliente - Experimental PyPI 1.0.0b4 Documentación GitHub 1.0.0b4

Core - Cliente - Seguimiento de PyPI 1.0.0b11 Documentación GitHub 1.0.0b11


Opentelemetry

Seguimiento básico de Opencensus PyPI 1.0.0b9 Documentación GitHub 1.0.0b9

Cosmos DB PyPI 4.7.0 Documentación GitHub 4.7.0

Defender EASM PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Centro de desarrollo PyPI 1.0.0 docs GitHub 1.0.0

Actualización de dispositivos PyPI 1.0.0 docs GitHub 1.0.0

Digital Twins PyPI 1.2.0 docs GitHub 1.2.0

Documento de inteligencia PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Traducción de documentos PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Event Grid PyPI 4.20.0 Documentación GitHub 4.20.0

Event Hubs PyPI 5.12.1 Documentación GitHub 5.12.1


PyPI 5.13.0b1 GitHub 5.13.0b1

Face PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Face PyPI 0.6.0 Documentación GitHub 0.6.0

FarmBeats PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Form Recognizer PyPI 3.3.3 Documentación GitHub 3.3.3

Desidentificación de estado PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Nombre Paquete Docs Source

Generación de perfiles de cáncer de PyPI Documentación GitHub


Health Insights 1.0.0b1.post1 1.0.0b1.post1

Coincidencia clínica de Health PyPI Documentación GitHub


Insights 1.0.0b1.post1 1.0.0b1.post1

Información de radiología de Health PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Insights

Identidad PyPI 1.17.1 Documentación GitHub 1.17.1


PyPI 1.18.0b2 GitHub 1.18.0b2

Agente de identidad PyPI 1.1.0 docs GitHub 1.1.0

Análisis de imágenes PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Key Vault: Administración PyPI 4.4.0 Documentación GitHub 4.4.0

Key Vault: certificados PyPI 4.8.0 Documentación GitHub 4.8.0

Key Vault: claves PyPI 4.9.0 Documentación GitHub 4.9.0

Key Vault: secretos PyPI 4.8.0 Documentación GitHub 4.8.0

Pruebas de carga PyPI 1.0.0 docs GitHub 1.0.0

Machine Learning PyPI 1.19.0 Documentación GitHub 1.19.0

Machine Learning - Almacén de PyPI 1.0.1 GitHub 1.0.1


características

Puntos de conexión privados PyPI 0.4.0 Documentación GitHub 0.4.0


administrados

Geolocalización de mapas PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Representación de mapas PyPI 2.0.0b1 Documentación GitHub 2.0.0b1

Ruta de mapas PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Búsqueda de mapas PyPI 2.0.0b1 Documentación GitHub 2.0.0b1

Media Analytics Edge PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Metrics Advisor PyPI 1.0.0 docs GitHub 1.0.0

Autenticación de Azure Mixed Reality PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Supervisión de la ingesta PyPI 1.0.4 Documentación GitHub 1.0.4

Monitor Query PyPI 1.4.0 docs GitHub 1.4.0


Nombre Paquete Docs Source

Exportador de OpenTelemetry PyPI 1.0.0b28 Documentación GitHub 1.0.0b28

Personalizer PyPI 1.0.0b1 GitHub 1.0.0b1

Cuenta de Purview PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Purview Catalog PyPI 1.0.0b4 Documentación GitHub 1.0.0b4

Asignación de datos de Purview PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Purview Scanning PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Recurso compartido de Purview PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Flujo de trabajo de Purview PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Respuesta a preguntas PyPI 1.1.0 docs GitHub 1.1.0

Registro de esquema PyPI 1.2.0 docs GitHub 1.2.0


PyPI 1.3.0b3 GitHub 1.3.0b3

Registro de esquema: Avro PyPI 1.0.0 docs GitHub 1.0.0

Registro de esquema: Avro PyPI Documentación GitHub


1.0.0b4.post1 1.0.0b4.post1

Service Bus PyPI 7.12.2 Documentación GitHub 7.12.2


PyPI 7.13.0b1 GitHub 7.13.0b1

Spark PyPI 0.7.0 Documentación GitHub 0.7.0

Almacenamiento: Blobs PyPI 12.22.0 Documentación GitHub 12.22.0


PyPI 12.23.0b1 GitHub 12.23.0b1

Storage: Blobs Changefeed PyPI 12.0.0b5 Documentación GitHub 12.0.0b5

Storage: lago de datos de archivos PyPI 12.16.0 Documentación GitHub 12.16.0


PyPI 12.17.0b1 GitHub 12.17.0b1

Storage: recursos compartidos de PyPI 12.17.0 Documentación GitHub 12.17.0


archivos PyPI 12.18.0b1 GitHub 12.18.0b1

- Colas de almacenamiento PyPI 12.11.0 Documentación GitHub 12.11.0


PyPI 12.12.0b1 GitHub 12.12.0b1

Synapse: AccessControl PyPI 0.7.0 Documentación GitHub 0.7.0

Synapse: Artifacts PyPI 0.19.0 Documentación GitHub 0.19.0

Synapse: supervisión PyPI 0.2.0 Documentación GitHub 0.2.0


Nombre Paquete Docs Source

Tablas PyPI 12.5.0 Documentación GitHub 12.5.0

Text Analytics PyPI 5.3.0 docs GitHub 5.3.0

Traducción del texto PyPI 1.0.1 docs GitHub 1.0.1

unknown PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

unknown PyPI 1.1.0 docs GitHub 1.1.0

unknown PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Video Analyzer Edge PyPI 1.0.0b4 Documentación GitHub 1.0.0b4

Web PubSub PyPI 1.2.1 Documentación GitHub 1.2.1

Core - Administración - Core PyPI 1.4.0 docs GitHub 1.4.0

Administración de recursos - Astro PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Administración de recursos: centro PyPI 1.1.0 docs GitHub 1.1.0


de desarrollo

Administración de recursos - Elastic PyPI 1.0.0 docs GitHub 1.0.0


SAN

Administración de recursos: centro PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


de seguridad

Administración de recursos: Advisor PyPI 9.0.0 Documentación GitHub 9.0.0


PyPI 10.0.0b1 GitHub 10.0.0b1

Administración de recursos: Agrifood PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Administración de recursos: Agrifood PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Administración de recursos - Centro PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


para desarrolladores de AKS

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


administración de alertas PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: Centro PyPI 1.0.0 docs GitHub 1.0.0


API

Administración de recursos: API PyPI 4.0.1 Documentación GitHub 4.0.1


Management

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


automatización del cumplimiento de
aplicaciones
Nombre Paquete Docs Source

Administración de recursos: App PyPI 3.0.0 Documentación GitHub 3.0.0


Configuration

Administración de recursos: App PyPI 9.1.0 Documentación GitHub 9.1.0


Platform PyPI 9.1.0.post2 GitHub 9.1.0.post2

Administración de recursos: App PyPI 7.3.0 Documentación GitHub 7.3.0


Service

Administración de recursos: PyPI 4.0.0 Documentación GitHub 4.0.0


Application Insights

Administración de recursos - Datos PyPI 1.0.0 docs GitHub 1.0.0


de Arc PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


atestación PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 4.0.0 Documentación GitHub 4.0.0


autorización

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Automanage PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Automation PyPI 1.1.0b3 GitHub 1.1.0b3

Administración de recursos- Azure PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


AD B2C

Administración de recursos: PyPI 9.1.0 Documentación GitHub 9.1.0


Búsqueda de Azure AI PyPI 9.2.0b2 GitHub 9.2.0b2

Administración de recursos: Azure PyPI 1.0.0 docs GitHub 1.0.0


Stack PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Azure PyPI 7.0.0 Documentación GitHub 7.0.0


Stack HCI PyPI 8.0.0b3 GitHub 8.0.0b3

Administración de recursos: Azure PyPI 8.0.0 Documentación GitHub 8.0.0


VMware Solution PyPI 9.0.0b1 GitHub 9.0.0b1

Administración de recursos - PyPI 1.0.0 docs GitHub 1.0.0


Infraestructura BareMetal PyPI 1.1.0b2 GitHub 1.1.0b2

Administración de recursos: Batch PyPI 17.3.0 Documentación GitHub 17.3.0

Administración de recursos: Batch AI PyPI 2.0.0 Documentación GitHub 2.0.0


PyPI 7.0.0b1
Nombre Paquete Docs Source

Administración de recursos: PyPI 6.0.0 Documentación GitHub 6.0.0


facturación PyPI 6.1.0b1 GitHub 6.1.0b1

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Billingbenefits

Administración de recursos: Bot PyPI 2.0.0 Documentación GitHub 2.0.0


Service

Administración de recursos: Change PyPI 1.0.0 docs GitHub 1.0.0


Analysis

Administración de recursos: Chaos PyPI 1.1.0 docs GitHub 1.1.0

Administración de recursos: PyPI 13.5.0 Documentación GitHub 13.5.0


Cognitive Services

Administración de recursos: PyPI 6.0.0 Documentación GitHub 6.0.0


Commerce PyPI 6.1.0b1 GitHub 6.1.0b1

Administración de recursos: PyPI 2.1.0 Documentación GitHub 2.1.0


comunicación

Administración de recursos: Compute PyPI 32.0.0 Documentación GitHub 32.0.0

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Computefleet

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Confidential Ledger PyPI 2.0.0b4 GitHub 2.0.0b4

Administración de recursos: PyPI 2.1.0 Documentación GitHub 2.1.0


confluente

Administración de recursos - PyPI 1.0.0 docs GitHub 1.0.0


VMWare conectado

Administración de recursos: consumo PyPI 10.0.0 Documentación GitHub 10.0.0


PyPI 11.0.0b1 GitHub 11.0.0b1

Administración de recursos: PyPI 3.1.0 Documentación GitHub 3.1.0


Container Apps

Administración de recursos: PyPI 10.1.0 Documentación GitHub 10.1.0


Container Instances

Administración de recursos: PyPI 10.3.0 Documentación GitHub 10.3.0


Container Registry

Administración de recursos: servicio PyPI 31.0.0 Documentación GitHub 31.0.0


Nombre Paquete Docs Source

de contenedor

Administración de recursos: flota de PyPI 2.0.0 Documentación GitHub 2.0.0


servicio de contenedor

Administración de recursos: Content PyPI 13.1.1 Documentación GitHub 13.1.1


Delivery Network

Administración de recursos: PyPI 9.5.1 Documentación GitHub 9.5.1


Cosmos DB PyPI 10.0.0b3 GitHub 10.0.0b3

Administración de recursos: Cosmos PyPI 1.0.0 docs GitHub 1.0.0


DB para PostgreSQL PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Cost PyPI 4.0.1 Documentación GitHub 4.0.1


Management

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


proveedores personalizados PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Data Box PyPI 2.0.0 Documentación GitHub 2.0.0

Administración de recursos: Data Box PyPI 1.0.0 docs GitHub 1.0.0


Edge PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Data PyPI 8.0.0 Documentación GitHub 8.0.0


Factory

Administración de recursos: Data PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Lake Analytics

Administración de recursos: Data PyPI 1.0.0 docs GitHub 1.0.0


Lake Store PyPI 1.1.0b1

Administración de recursos: PyPI 10.0.0 Documentación GitHub 10.0.0


migración de datos PyPI 10.1.0b1 GitHub 10.1.0b1

Administración de recursos: PyPI 1.4.0 docs GitHub 1.4.0


protección de datos

Administración de recursos: Data PyPI 1.0.0 docs GitHub 1.0.0


Share PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 2.0.0 Documentación GitHub 2.0.0


Databricks

Administración de recursos: Datadog PyPI 2.1.0 Documentación GitHub 2.1.0

Administración de recursos: Defender PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


EASM
Nombre Paquete Docs Source

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Deployment Manager PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


virtualización de escritorio

Administración de recursos: Dev PyPI 1.0.0b3 Documentación GitHub 1.0.0b3


Spaces

Administración de recursos: Device PyPI 1.1.0 docs GitHub 1.1.0


Provisioning Service PyPI 1.2.0b2

Administración de recursos - Registro PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


de dispositivos

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


actualización de dispositivos

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Infraestructura de DevOps

Administración de recursos: DevTest PyPI 9.0.0 Documentación GitHub 9.0.0


Labs PyPI 10.0.0b1 GitHub 10.0.0b1

Administración de recursos: Digital PyPI 6.4.0 Documentación GitHub 6.4.0


Twins

Administración de recursos: DNS PyPI 8.1.0 Documentación GitHub 8.1.0

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


solucionador DNS PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 2.0.0 Documentación GitHub 2.0.0


Dynatrace

Administración de recursos: orden PyPI 1.0.0 docs GitHub 1.0.0


perimetral PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos - PyPI Documentación GitHub


Edgezones 1.0.0b1.post2 1.0.0b1.post2

Administración de recursos - PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Education

Administración de recursos: elástico PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b3 GitHub 1.1.0b3

Administración de recursos: Event PyPI 10.2.0 Documentación GitHub 10.2.0


Grid PyPI 10.3.0b4 GitHub 10.3.0b4
Nombre Paquete Docs Source

Administración de recursos: Event PyPI 11.0.0 Documentación GitHub 11.0.0


Hubs

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


ubicación ampliada PyPI 1.2.0b1 GitHub 1.2.0 B1

Administración de recursos: Fluid PyPI 1.0.0 docs GitHub 1.0.0


Relay PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Front PyPI 1.2.0 docs GitHub 1.2.0


Door

Administración de recursos: Servicios PyPI 1.0.0 docs GitHub 1.0.0


de Graph

Administración de recursos: PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


configuración de invitados

Administración de recursos: HANA en PyPI 1.0.0 docs GitHub 1.0.0


Azure PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: módulos PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


de seguridad de hardware

Administración de recursos: PyPI 9.0.0 Documentación GitHub 9.0.0


HDInsight

Administración de recursos: PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Contenedores HDInsight

Administración de recursos: Health PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Bot

Administración de recursos: API de PyPI 2.1.0 Documentación GitHub 2.1.0


sanidad

Administración de recursos - PyPI 1.0.0b1 GitHub 1.0.0b1


Healthdataaiservices

Administración de recursos: proceso PyPI 8.0.0 Documentación GitHub 8.0.0


híbrido PyPI 9.0.0b4 GitHub 9.0.0b4

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


conectividad híbrida

Administración de recursos: Servicio PyPI 1.0.0 docs GitHub 1.0.0


de contenedor híbrido

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


Kubernetes híbrido PyPI 1.2.0b1 GitHub 1.2.0 B1
Nombre Paquete Docs Source

Administración de recursos: red PyPI 2.0.0 Documentación GitHub 2.0.0


híbrida

Administración de recursos: Image PyPI 1.4.0 docs GitHub 1.4.0


Builder

Administración de recursos - PyPI 1.0.0 docs GitHub 1.0.0


Informatica Data Management

Administración de recursos: IoT PyPI 9.0.0 Documentación GitHub 9.0.0


Central PyPI 10.0.0b2 GitHub 10.0.0b2

Administración de recursos: IoT PyPI 1.0.0 docs GitHub 1.0.0


Firmware Defense

Administración de recursos: IoT Hub PyPI 3.0.0 Documentación GitHub 3.0.0

Administración de recursos: Key Vault PyPI 10.3.1 Documentación GitHub 10.3.1

Administración de recursos: PyPI 3.1.0 Documentación GitHub 3.1.0


configuración de Kubernetes

Administración de recursos: Kusto PyPI 3.3.0 Documentación GitHub 3.3.0

Administración de recursos: servicios PyPI 2.0.0 Documentación GitHub 2.0.0


de laboratorio PyPI 2.1.0b1 GitHub 2.1.0b1

Administración de recursos: instancia PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


grande

Administración de recursos: prueba PyPI 1.0.0 docs GitHub 1.0.0


de carga

Administración de recursos: Log PyPI 12.0.0 Documentación GitHub 12.0.0


Analytics PyPI 13.0.0b6 GitHub 13.0.0b6

Administración de recursos: Logic PyPI 10.0.0 Documentación GitHub 10.0.0


Apps PyPI 10.1.0b1 GitHub 10.1.0b1

Administración de recursos - Logz PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Proceso PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


de Machine Learning

Administración de recursos: Machine PyPI 1.0.0 docs GitHub 1.0.0


Learning Services PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: PyPI 2.1.0 Documentación GitHub 2.1.0


mantenimiento PyPI 2.2.0b2 GitHub 2.2.0b2
Nombre Paquete Docs Source

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


aplicaciones administradas

Administración de recursos: Grafana PyPI 1.1.0 docs GitHub 1.1.0


administrado

Administración de recursos: tejido de PyPI 1.0.0 docs GitHub 1.0.0


red administrada

Administración de recursos: PyPI 7.0.0 Documentación GitHub 7.0.0


identidad de servicio administrado PyPI 7.1.0b1 GitHub 7.1.0b1

Administración de recursos: servicios PyPI 6.0.0 Documentación GitHub 6.0.0


administrados PyPI 7.0.0b1 GitHub 7.0.0b1

Administración de recursos: Grupos PyPI 1.0.0 docs GitHub 1.0.0


de administración PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: asociado PyPI 1.0.0 docs GitHub 1.0.0


de administración PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Maps PyPI 2.1.0 Documentación GitHub 2.1.0

Administración de recursos: pedidos PyPI 1.1.0 docs GitHub 1.1.0


de Marketplace PyPI 1.2.0b1 GitHub 1.2.0 B1

Administración de recursos: Media PyPI 10.2.0 Documentación GitHub 10.2.0


Services

Administración de recursos - SAP de PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


detección de migración

Administración de recursos: Mixed PyPI 1.0.0 docs GitHub 1.0.0


Reality PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: red PyPI 3.3.0 Documentación GitHub 3.3.0


móvil

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Mongocluster

Administración de recursos: Monitor PyPI 6.0.2 Documentación GitHub 6.0.2

Administración de recursos: NetApp PyPI 13.1.0 Documentación GitHub 13.1.0


Files

Administración de recursos: Red PyPI 26.0.0 Documentación GitHub 26.0.0

Administración de recursos: análisis PyPI 1.0.0 docs GitHub 1.0.0


de red
Nombre Paquete Docs Source

Administración de recursos: función PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


de red

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Networkcloud

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


observabilidad de New Relic

Administración de recursos: Nginx PyPI 3.0.0 Documentación GitHub 3.0.0


PyPI 3.1.0b1 GitHub 3.1.0b1

Administración de recursos: PyPI 8.0.0 Documentación GitHub 8.0.0


Notification Hubs PyPI 8.1.0b2 GitHub 8.1.0b2

Administración de recursos - Oep PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


administración de operaciones PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos - Oracle PyPI 1.0.0 docs GitHub 1.0.0


Database PyPI 1.0.0.post2 GitHub 1.0.0.post2

Administración de recursos: Orbital PyPI 2.0.0 Documentación GitHub 2.0.0

Administración de recursos: Palo Alto PyPI 1.0.0 docs GitHub 1.0.0


Networks - Firewall de próxima PyPI 2.0.0b1 GitHub 2.0.0b1
generación

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


emparejamiento PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos - PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Playwright Testing

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


conclusión de Policy PyPI 1.1.0b4 GitHub 1.1.0b4

Administración de recursos - Portal PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 10.1.0 Documentación GitHub 10.1.0


PostgreSQL PyPI 10.2.0b17 GitHub 10.2.0b17

Administración de recursos: Power BI PyPI 1.0.0 docs GitHub 1.0.0


dedicado PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: DNS PyPI 1.1.0 docs GitHub 1.1.0


privado
Nombre Paquete Docs Source

Administración de recursos: Purview PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 1.0.0b5 Documentación GitHub 1.0.0b5


Quantum

Administración de recursos: Qumulo PyPI 1.0.0 docs GitHub 1.0.0

Administración de recursos: cuota PyPI 1.1.0 docs GitHub 1.1.0


PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Recovery PyPI 3.0.0 Documentación GitHub 3.0.0


Services

Administración de recursos: copia de PyPI 9.1.0 Documentación GitHub 9.1.0


seguridad de Recovery Services

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


replicación de datos de Recovery
Services

Administración de recursos: Site PyPI 1.2.0 docs GitHub 1.2.0


Recovery de Recovery Services

Administración de recursos: Red Hat PyPI 1.5.0 Documentación GitHub 1.5.0


OpenShift

Administración de recursos: Redis PyPI 14.4.0 Documentación GitHub 14.4.0

Administración de recursos: Redis PyPI 3.0.0 Documentación GitHub 3.0.0


Enterprise PyPI 3.1.0b1 GitHub 3.1.0b1

Administración de recursos: traslado PyPI 1.0.0b1 GitHub 1.0.0b1


de región

Administración de recursos: Relay PyPI 1.1.0 docs GitHub 1.1.0


PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: reservas PyPI 2.3.0 Documentación GitHub 2.3.0

Administración de recursos: Conector PyPI 1.0.0 docs GitHub 1.0.0


de recursos

Administración de recursos: Resource PyPI 8.0.0 Documentación GitHub 8.0.0


Graph PyPI 8.1.0b3 GitHub 8.1.0b3

Administración de recursos: Resource PyPI 1.0.0b5 Documentación GitHub 1.0.0b5


Health

Administración de recursos: Resource PyPI 1.1.0 docs GitHub 1.1.0


Nombre Paquete Docs Source

Mover

Administración de recursos: Recursos PyPI 23.1.1 Documentación GitHub 23.1.1

Administración de recursos: Recursos PyPI 23.1.1 Documentación GitHub 23.1.1

Administración de recursos: PyPI 2.0.0 Documentación GitHub 2.0.0


Scheduler PyPI 7.0.0b1

Administración de recursos - Scvmm PyPI 1.0.0 docs GitHub 1.0.0

Administración de recursos: PyPI 7.0.0 Documentación GitHub 7.0.0


seguridad

Administración de recursos: Security PyPI 1.0.0 docs GitHub 1.0.0


Insights PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


autoayuda PyPI 2.0.0b4 GitHub 2.0.0b4

Administración de recursos: consola PyPI 1.0.0 docs GitHub 1.0.0


serie PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Service PyPI 8.2.0 Documentación GitHub 8.2.0


Bus

Administración de recursos: Service PyPI 2.1.0 Documentación GitHub 2.1.0


Fabric PyPI 2.2.0b1 GitHub 2.2.0b1

Administración de recursos: clústeres PyPI 2.0.0 Documentación GitHub 2.0.0


administrados de Service Fabric

Administración de recursos: Service PyPI 1.1.0 docs GitHub 1.1.0


Linker PyPI 1.2.0b2 GitHub 1.2.0b2

Administración de recursos: Redes de PyPI 1.0.0 docs GitHub 1.0.0


servicio

Administración de recursos: SignalR PyPI 1.2.0 docs GitHub 1.2.0


PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: Sphere PyPI 1.0.0 docs GitHub 1.0.0

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Detección de aplicaciones de Spring

Administración de recursos: SQL PyPI 3.0.1 Documentación GitHub 3.0.1


PyPI 4.0.0b18 GitHub 4.0.0b18

Administración de recursos: máquina PyPI 1.0.0b6 Documentación GitHub 1.0.0b6


virtual de SQL
Nombre Paquete Docs Source

Administración de recursos - Grupo PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


en espera

Administración de recursos: Storage PyPI 21.2.1 Documentación GitHub 21.2.1

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Acciones de almacenamiento

Administración de recursos: caché de PyPI 2.0.0 Documentación GitHub 2.0.0


almacenamiento

Administración de recursos: PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


importación y exportación de
almacenamiento

Administración de recursos: Storage PyPI 2.1.0 Documentación GitHub 2.1.0


Mover

Administración de recursos: grupo de PyPI 1.0.0 docs GitHub 1.0.0


almacenamiento PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


sincronización de almacenamiento PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Stream PyPI 1.0.0 docs GitHub 1.0.0


Analytics PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: PyPI 3.1.1 Documentación GitHub 3.1.1


suscripciones PyPI 3.2.0b1 GitHub 3.2.0b1

Administración de recursos: soporte PyPI 7.0.0 Documentación GitHub 7.0.0


técnico

Administración de recursos: Synapse PyPI 2.0.0 Documentación GitHub 2.0.0


PyPI 2.1.0b7 GitHub 2.1.0b7

Administración de recursos - Base de PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


pruebas

Administración de recursos: Time PyPI 1.0.0 docs GitHub 1.0.0


Series Insights PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Traffic PyPI 1.1.0 docs GitHub 1.1.0


Manager

Administración de recursos: VMware PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Solution by CloudSimple

Administración de recursos: Servicios PyPI 1.0.0 docs GitHub 1.0.0


de Voice
Nombre Paquete Docs Source

Administración de recursos: Web PyPI 1.1.0 docs GitHub 1.1.0


PubSub PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: monitor PyPI 1.0.0b4 Documentación GitHub 1.0.0b4


de carga de trabajo

Administración de recursos: cargas PyPI 1.0.0 docs GitHub 1.0.0


de trabajo

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Instancia virtual SAP de cargas de
trabajo

Todas las bibliotecas


ノ Expandir tabla

Nombre Paquete Docs Source

IA generativa PyPI 1.0.0b8 Documentación GitHub 1.0.0b8

Inferencia de modelos por IA PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Recursos de IA PyPI 1.0.0b8 Documentación GitHub 1.0.0b8

Anomaly Detector PyPI 3.0.0b6 Documentación GitHub 3.0.0b6

App Configuration PyPI 1.6.0 Documentación GitHub 1.6.0

Proveedor de App Configuration PyPI 1.2.0 docs GitHub 1.2.0

Atestación PyPI 1.0.0 docs GitHub 1.0.0

Azure AI Search PyPI 11.4.0 Documentación GitHub 11.4.0


PyPI 11.6.0b4 GitHub 11.6.0b4

Almacén de puntos de control de PyPI 1.1.4 Documentación GitHub 1.1.4


Azure Blob Storage

AIO de almacén de puntos de control PyPI 1.1.4 Documentación GitHub 1.1.4


de Azure Blob Storage

Azure Monitor OpenTelemetry PyPI 1.6.1 Documentación GitHub 1.6.1

Azure Remote Rendering PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Automatización de llamadas de PyPI 1.2.0 docs GitHub 1.2.0


comunicación PyPI 1.3.0b1 GitHub 1.3.0b1
Nombre Paquete Docs Source

Communication Chat PyPI 1.3.0 docs GitHub 1.3.0

Correo electrónico de comunicación PyPI 1.0.0 docs GitHub 1.0.0

Identidad de comunicación PyPI 1.5.0 Documentación GitHub 1.5.0

JobRouter de comunicaciones PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Mensajes de comunicación PyPI 1.0.0 docs GitHub 1.0.0

Communication Phone Numbers PyPI 1.1.0 docs GitHub 1.1.0


PyPI 1.2.0b3 GitHub 1.2.0b3

Salas de comunicación PyPI 1.1.0 docs GitHub 1.1.0

Communication Sms PyPI 1.0.1 docs GitHub 1.0.1

Confidential Ledger PyPI 1.1.1 docs GitHub 1.1.1

Container Registry PyPI 1.2.0 docs GitHub 1.2.0

Content Safety PyPI 1.0.0 docs GitHub 1.0.0

Reconocimiento del lenguaje PyPI 1.1.0 docs GitHub 1.1.0


conversacional

Core - Cliente - Core PyPI 1.30.2 Documentación GitHub 1.30.2

Core - Cliente - Core HTTP PyPI 1.0.0b5 Documentación GitHub 1.0.0b5

Core - Cliente - Experimental PyPI 1.0.0b4 Documentación GitHub 1.0.0b4

Core - Cliente - Seguimiento de PyPI 1.0.0b11 Documentación GitHub 1.0.0b11


Opentelemetry

Seguimiento básico de Opencensus PyPI 1.0.0b9 Documentación GitHub 1.0.0b9

Cosmos DB PyPI 4.7.0 Documentación GitHub 4.7.0

Defender EASM PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Centro de desarrollo PyPI 1.0.0 docs GitHub 1.0.0

Actualización de dispositivos PyPI 1.0.0 docs GitHub 1.0.0

Digital Twins PyPI 1.2.0 docs GitHub 1.2.0

Documento de inteligencia PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Traducción de documentos PyPI 1.0.0 docs GitHub 1.0.0


Nombre Paquete Docs Source

PyPI 1.1.0b1 GitHub 1.1.0b1

Event Grid PyPI 4.20.0 Documentación GitHub 4.20.0

Event Hubs PyPI 5.12.1 Documentación GitHub 5.12.1


PyPI 5.13.0b1 GitHub 5.13.0b1

Face PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Face PyPI 0.6.0 Documentación GitHub 0.6.0

FarmBeats PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Form Recognizer PyPI 3.3.3 Documentación GitHub 3.3.3

Desidentificación de estado PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Generación de perfiles de cáncer de PyPI Documentación GitHub


Health Insights 1.0.0b1.post1 1.0.0b1.post1

Coincidencia clínica de Health PyPI Documentación GitHub


Insights 1.0.0b1.post1 1.0.0b1.post1

Información de radiología de Health PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Insights

Identidad PyPI 1.17.1 Documentación GitHub 1.17.1


PyPI 1.18.0b2 GitHub 1.18.0b2

Agente de identidad PyPI 1.1.0 docs GitHub 1.1.0

Análisis de imágenes PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Key Vault: Administración PyPI 4.4.0 Documentación GitHub 4.4.0

Key Vault: certificados PyPI 4.8.0 Documentación GitHub 4.8.0

Key Vault: claves PyPI 4.9.0 Documentación GitHub 4.9.0

Key Vault: secretos PyPI 4.8.0 Documentación GitHub 4.8.0

Pruebas de carga PyPI 1.0.0 docs GitHub 1.0.0

Machine Learning PyPI 1.19.0 Documentación GitHub 1.19.0

Machine Learning - Almacén de PyPI 1.0.1 GitHub 1.0.1


características

Puntos de conexión privados PyPI 0.4.0 Documentación GitHub 0.4.0


administrados
Nombre Paquete Docs Source

Geolocalización de mapas PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Representación de mapas PyPI 2.0.0b1 Documentación GitHub 2.0.0b1

Ruta de mapas PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Búsqueda de mapas PyPI 2.0.0b1 Documentación GitHub 2.0.0b1

Media Analytics Edge PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Metrics Advisor PyPI 1.0.0 docs GitHub 1.0.0

Autenticación de Azure Mixed Reality PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Supervisión de la ingesta PyPI 1.0.4 Documentación GitHub 1.0.4

Monitor Query PyPI 1.4.0 docs GitHub 1.4.0

Exportador de OpenTelemetry PyPI 1.0.0b28 Documentación GitHub 1.0.0b28

Personalizer PyPI 1.0.0b1 GitHub 1.0.0b1

Cuenta de Purview PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Asignación de datos de Purview PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Purview Scanning PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Recurso compartido de Purview PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Flujo de trabajo de Purview PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Respuesta a preguntas PyPI 1.1.0 docs GitHub 1.1.0

Registro de esquema PyPI 1.2.0 docs GitHub 1.2.0


PyPI 1.3.0b3 GitHub 1.3.0b3

Registro de esquema: Avro PyPI 1.0.0 docs GitHub 1.0.0

Azure Service Bus PyPI 7.12.2 Documentación GitHub 7.12.2


PyPI 7.13.0b1 GitHub 7.13.0b1

Spark PyPI 0.7.0 Documentación GitHub 0.7.0

Almacenamiento: Blobs PyPI 12.22.0 Documentación GitHub 12.22.0


PyPI 12.23.0b1 GitHub 12.23.0b1

Storage: Blobs Changefeed PyPI 12.0.0b5 Documentación GitHub 12.0.0b5

Storage: lago de datos de archivos PyPI 12.16.0 Documentación GitHub 12.16.0


PyPI 12.17.0b1 GitHub 12.17.0b1
Nombre Paquete Docs Source

Storage: recursos compartidos de PyPI 12.17.0 Documentación GitHub 12.17.0


archivos PyPI 12.18.0b1 GitHub 12.18.0b1

- Colas de almacenamiento PyPI 12.11.0 Documentación GitHub 12.11.0


PyPI 12.12.0b1 GitHub 12.12.0b1

Synapse: AccessControl PyPI 0.7.0 Documentación GitHub 0.7.0

Synapse: Artifacts PyPI 0.19.0 Documentación GitHub 0.19.0

Synapse: supervisión PyPI 0.2.0 Documentación GitHub 0.2.0

Tablas PyPI 12.5.0 Documentación GitHub 12.5.0

Text Analytics PyPI 5.3.0 docs GitHub 5.3.0

Traducción del texto PyPI 1.0.1 docs GitHub 1.0.1

unknown PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

unknown PyPI 1.1.0 docs GitHub 1.1.0

unknown PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Video Analyzer Edge PyPI 1.0.0b4 Documentación GitHub 1.0.0b4

Web PubSub PyPI 1.2.1 Documentación GitHub 1.2.1

Core - Administración - Core PyPI 1.4.0 docs GitHub 1.4.0

Administración de recursos - Astro PyPI 1.0.0b1 Documentación GitHub 1.0.0b1

Administración de recursos: centro PyPI 1.1.0 docs GitHub 1.1.0


de desarrollo

Administración de recursos - Elastic PyPI 1.0.0 docs GitHub 1.0.0


SAN

Administración de recursos: centro PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


de seguridad

Administración de recursos: Advisor PyPI 9.0.0 Documentación GitHub 9.0.0


PyPI 10.0.0b1 GitHub 10.0.0b1

Administración de recursos: Agrifood PyPI 1.0.0b3 Documentación GitHub 1.0.0b3

Administración de recursos - Centro PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


para desarrolladores de AKS

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


administración de alertas PyPI 2.0.0b2 GitHub 2.0.0b2
Nombre Paquete Docs Source

Administración de recursos: Centro PyPI 1.0.0 docs GitHub 1.0.0


API

Administración de recursos: API PyPI 4.0.1 Documentación GitHub 4.0.1


Management

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


automatización del cumplimiento de
aplicaciones

Administración de recursos: App PyPI 3.0.0 Documentación GitHub 3.0.0


Configuration

Administración de recursos: App PyPI 9.1.0 Documentación GitHub 9.1.0


Platform PyPI 9.1.0.post2 GitHub 9.1.0.post2

Administración de recursos: App PyPI 7.3.0 Documentación GitHub 7.3.0


Service

Administración de recursos: PyPI 4.0.0 Documentación GitHub 4.0.0


Application Insights

Administración de recursos - Datos PyPI 1.0.0 docs GitHub 1.0.0


de Arc PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


atestación PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 4.0.0 Documentación GitHub 4.0.0


autorización

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Automanage PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Automation PyPI 1.1.0b3 GitHub 1.1.0b3

Administración de recursos: PyPI 9.1.0 Documentación GitHub 9.1.0


Búsqueda de Azure AI PyPI 9.2.0b2 GitHub 9.2.0b2

Administración de recursos: Azure PyPI 1.0.0 docs GitHub 1.0.0


Stack PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Azure PyPI 7.0.0 Documentación GitHub 7.0.0


Stack HCI PyPI 8.0.0b3 GitHub 8.0.0b3

Administración de recursos: Azure PyPI 8.0.0 Documentación GitHub 8.0.0


VMware Solution PyPI 9.0.0b1 GitHub 9.0.0b1
Nombre Paquete Docs Source

Administración de recursos - PyPI 1.0.0 docs GitHub 1.0.0


Infraestructura BareMetal PyPI 1.1.0b2 GitHub 1.1.0b2

Administración de recursos: Batch PyPI 17.3.0 Documentación GitHub 17.3.0

Administración de recursos: PyPI 6.0.0 Documentación GitHub 6.0.0


facturación PyPI 6.1.0b1 GitHub 6.1.0b1

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Billingbenefits

Administración de recursos: Bot PyPI 2.0.0 Documentación GitHub 2.0.0


Service

Administración de recursos: Change PyPI 1.0.0 docs GitHub 1.0.0


Analysis

Administración de recursos: Chaos PyPI 1.1.0 docs GitHub 1.1.0

Administración de recursos: PyPI 13.5.0 Documentación GitHub 13.5.0


Cognitive Services

Administración de recursos: PyPI 6.0.0 Documentación GitHub 6.0.0


Commerce PyPI 6.1.0b1 GitHub 6.1.0b1

Administración de recursos: PyPI 2.1.0 Documentación GitHub 2.1.0


comunicación

Administración de recursos: Compute PyPI 32.0.0 Documentación GitHub 32.0.0

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Computefleet

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Confidential Ledger PyPI 2.0.0b4 GitHub 2.0.0b4

Administración de recursos: PyPI 2.1.0 Documentación GitHub 2.1.0


confluente

Administración de recursos - PyPI 1.0.0 docs GitHub 1.0.0


VMWare conectado

Administración de recursos: consumo PyPI 10.0.0 Documentación GitHub 10.0.0


PyPI 11.0.0b1 GitHub 11.0.0b1

Administración de recursos: PyPI 3.1.0 Documentación GitHub 3.1.0


Container Apps

Administración de recursos: PyPI 10.1.0 Documentación GitHub 10.1.0


Container Instances
Nombre Paquete Docs Source

Administración de recursos: PyPI 10.3.0 Documentación GitHub 10.3.0


Container Registry

Administración de recursos: servicio PyPI 31.0.0 Documentación GitHub 31.0.0


de contenedor

Administración de recursos: flota de PyPI 2.0.0 Documentación GitHub 2.0.0


servicio de contenedor

Administración de recursos: Content PyPI 13.1.1 Documentación GitHub 13.1.1


Delivery Network

Administración de recursos: PyPI 9.5.1 Documentación GitHub 9.5.1


Cosmos DB PyPI 10.0.0b3 GitHub 10.0.0b3

Administración de recursos: Cosmos PyPI 1.0.0 docs GitHub 1.0.0


DB para PostgreSQL PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Cost PyPI 4.0.1 Documentación GitHub 4.0.1


Management

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


proveedores personalizados PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Data Box PyPI 2.0.0 Documentación GitHub 2.0.0

Administración de recursos: Data Box PyPI 1.0.0 docs GitHub 1.0.0


Edge PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Data PyPI 8.0.0 Documentación GitHub 8.0.0


Factory

Administración de recursos: Data PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Lake Analytics

Administración de recursos: Data PyPI 1.0.0 docs GitHub 1.0.0


Lake Store PyPI 1.1.0b1

Administración de recursos: PyPI 10.0.0 Documentación GitHub 10.0.0


migración de datos PyPI 10.1.0b1 GitHub 10.1.0b1

Administración de recursos: PyPI 1.4.0 docs GitHub 1.4.0


protección de datos

Administración de recursos: Data PyPI 1.0.0 docs GitHub 1.0.0


Share PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 2.0.0 Documentación GitHub 2.0.0


Databricks
Nombre Paquete Docs Source

Administración de recursos: Datadog PyPI 2.1.0 Documentación GitHub 2.1.0

Administración de recursos: Defender PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


EASM

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Deployment Manager PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


virtualización de escritorio

Administración de recursos: Dev PyPI 1.0.0b3 Documentación GitHub 1.0.0b3


Spaces

Administración de recursos: Device PyPI 1.1.0 docs GitHub 1.1.0


Provisioning Service PyPI 1.2.0b2

Administración de recursos - Registro PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


de dispositivos

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


actualización de dispositivos

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Infraestructura de DevOps

Administración de recursos: DevTest PyPI 9.0.0 Documentación GitHub 9.0.0


Labs PyPI 10.0.0b1 GitHub 10.0.0b1

Administración de recursos: Digital PyPI 6.4.0 Documentación GitHub 6.4.0


Twins

Administración de recursos: DNS PyPI 8.1.0 Documentación GitHub 8.1.0

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


solucionador DNS PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 2.0.0 Documentación GitHub 2.0.0


Dynatrace

Administración de recursos: orden PyPI 1.0.0 docs GitHub 1.0.0


perimetral PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos - PyPI Documentación GitHub


Edgezones 1.0.0b1.post2 1.0.0b1.post2

Administración de recursos - PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Education

Administración de recursos: elástico PyPI 1.0.0 docs GitHub 1.0.0


Nombre Paquete Docs Source

PyPI 1.1.0b3 GitHub 1.1.0b3

Administración de recursos: Event PyPI 10.2.0 Documentación GitHub 10.2.0


Grid PyPI 10.3.0b4 GitHub 10.3.0b4

Administración de recursos: Event PyPI 11.0.0 Documentación GitHub 11.0.0


Hubs

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


ubicación ampliada PyPI 1.2.0b1 GitHub 1.2.0 B1

Administración de recursos: Fluid PyPI 1.0.0 docs GitHub 1.0.0


Relay PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Front PyPI 1.2.0 docs GitHub 1.2.0


Door

Administración de recursos: Servicios PyPI 1.0.0 docs GitHub 1.0.0


de Graph

Administración de recursos: PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


configuración de invitados

Administración de recursos: HANA en PyPI 1.0.0 docs GitHub 1.0.0


Azure PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: módulos PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


de seguridad de hardware

Administración de recursos: PyPI 9.0.0 Documentación GitHub 9.0.0


HDInsight

Administración de recursos: PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Contenedores HDInsight

Administración de recursos: Health PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Bot

Administración de recursos: API de PyPI 2.1.0 Documentación GitHub 2.1.0


sanidad

Administración de recursos - PyPI 1.0.0b1 GitHub 1.0.0b1


Healthdataaiservices

Administración de recursos: proceso PyPI 8.0.0 Documentación GitHub 8.0.0


híbrido PyPI 9.0.0b4 GitHub 9.0.0b4

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


conectividad híbrida
Nombre Paquete Docs Source

Administración de recursos: Servicio PyPI 1.0.0 docs GitHub 1.0.0


de contenedor híbrido

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


Kubernetes híbrido PyPI 1.2.0b1 GitHub 1.2.0 B1

Administración de recursos: red PyPI 2.0.0 Documentación GitHub 2.0.0


híbrida

Administración de recursos: Image PyPI 1.4.0 docs GitHub 1.4.0


Builder

Administración de recursos - PyPI 1.0.0 docs GitHub 1.0.0


Informatica Data Management

Administración de recursos: IoT PyPI 9.0.0 Documentación GitHub 9.0.0


Central PyPI 10.0.0b2 GitHub 10.0.0b2

Administración de recursos: IoT PyPI 1.0.0 docs GitHub 1.0.0


Firmware Defense

Administración de recursos: IoT Hub PyPI 3.0.0 Documentación GitHub 3.0.0

Administración de recursos: Key Vault PyPI 10.3.1 Documentación GitHub 10.3.1

Administración de recursos: PyPI 3.1.0 Documentación GitHub 3.1.0


configuración de Kubernetes

Administración de recursos: Kusto PyPI 3.3.0 Documentación GitHub 3.3.0

Administración de recursos: servicios PyPI 2.0.0 Documentación GitHub 2.0.0


de laboratorio PyPI 2.1.0b1 GitHub 2.1.0b1

Administración de recursos: instancia PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


grande

Administración de recursos: prueba PyPI 1.0.0 docs GitHub 1.0.0


de carga

Administración de recursos: Log PyPI 12.0.0 Documentación GitHub 12.0.0


Analytics PyPI 13.0.0b6 GitHub 13.0.0b6

Administración de recursos: Logic PyPI 10.0.0 Documentación GitHub 10.0.0


Apps PyPI 10.1.0b1 GitHub 10.1.0b1

Administración de recursos - Logz PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Proceso PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


de Machine Learning
Nombre Paquete Docs Source

Administración de recursos: Machine PyPI 1.0.0 docs GitHub 1.0.0


Learning Services PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: PyPI 2.1.0 Documentación GitHub 2.1.0


mantenimiento PyPI 2.2.0b2 GitHub 2.2.0b2

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


aplicaciones administradas

Administración de recursos: Grafana PyPI 1.1.0 docs GitHub 1.1.0


administrado

Administración de recursos: tejido de PyPI 1.0.0 docs GitHub 1.0.0


red administrada

Administración de recursos: PyPI 7.0.0 Documentación GitHub 7.0.0


identidad de servicio administrado PyPI 7.1.0b1 GitHub 7.1.0b1

Administración de recursos: servicios PyPI 6.0.0 Documentación GitHub 6.0.0


administrados PyPI 7.0.0b1 GitHub 7.0.0b1

Administración de recursos: Grupos PyPI 1.0.0 docs GitHub 1.0.0


de administración PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: asociado PyPI 1.0.0 docs GitHub 1.0.0


de administración PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Maps PyPI 2.1.0 Documentación GitHub 2.1.0

Administración de recursos: pedidos PyPI 1.1.0 docs GitHub 1.1.0


de Marketplace PyPI 1.2.0b1 GitHub 1.2.0 B1

Administración de recursos: Media PyPI 10.2.0 Documentación GitHub 10.2.0


Services

Administración de recursos - SAP de PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


detección de migración

Administración de recursos: Mixed PyPI 1.0.0 docs GitHub 1.0.0


Reality PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: red PyPI 3.3.0 Documentación GitHub 3.3.0


móvil

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Mongocluster

Administración de recursos: Monitor PyPI 6.0.2 Documentación GitHub 6.0.2

Administración de recursos: NetApp PyPI 13.1.0 Documentación GitHub 13.1.0


Nombre Paquete Docs Source

Files

Administración de recursos: Red PyPI 26.0.0 Documentación GitHub 26.0.0

Administración de recursos: análisis PyPI 1.0.0 docs GitHub 1.0.0


de red

Administración de recursos: función PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


de red

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


Networkcloud

Administración de recursos: PyPI 1.1.0 docs GitHub 1.1.0


observabilidad de New Relic

Administración de recursos: Nginx PyPI 3.0.0 Documentación GitHub 3.0.0


PyPI 3.1.0b1 GitHub 3.1.0b1

Administración de recursos: PyPI 8.0.0 Documentación GitHub 8.0.0


Notification Hubs PyPI 8.1.0b2 GitHub 8.1.0b2

Administración de recursos - Oep PyPI 1.0.0b2 Documentación GitHub 1.0.0b2

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


administración de operaciones PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos - Oracle PyPI 1.0.0 docs GitHub 1.0.0


Database PyPI 1.0.0.post2 GitHub 1.0.0.post2

Administración de recursos: Orbital PyPI 2.0.0 Documentación GitHub 2.0.0

Administración de recursos: Palo Alto PyPI 1.0.0 docs GitHub 1.0.0


Networks - Firewall de próxima PyPI 2.0.0b1 GitHub 2.0.0b1
generación

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


emparejamiento PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos - PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Playwright Testing

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


conclusión de Policy PyPI 1.1.0b4 GitHub 1.1.0b4

Administración de recursos - Portal PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 10.1.0 Documentación GitHub 10.1.0


PostgreSQL PyPI 10.2.0b17 GitHub 10.2.0b17
Nombre Paquete Docs Source

Administración de recursos: Power BI PyPI 1.0.0 docs GitHub 1.0.0


dedicado PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: DNS PyPI 1.1.0 docs GitHub 1.1.0


privado

Administración de recursos: Purview PyPI 1.0.0 docs GitHub 1.0.0


PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 1.0.0b5 Documentación GitHub 1.0.0b5


Quantum

Administración de recursos: Qumulo PyPI 1.0.0 docs GitHub 1.0.0

Administración de recursos: cuota PyPI 1.1.0 docs GitHub 1.1.0


PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Recovery PyPI 3.0.0 Documentación GitHub 3.0.0


Services

Administración de recursos: copia de PyPI 9.1.0 Documentación GitHub 9.1.0


seguridad de Recovery Services

Administración de recursos: PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


replicación de datos de Recovery
Services

Administración de recursos: Site PyPI 1.2.0 docs GitHub 1.2.0


Recovery de Recovery Services

Administración de recursos: Red Hat PyPI 1.5.0 Documentación GitHub 1.5.0


OpenShift

Administración de recursos: Redis PyPI 14.4.0 Documentación GitHub 14.4.0

Administración de recursos: Redis PyPI 3.0.0 Documentación GitHub 3.0.0


Enterprise PyPI 3.1.0b1 GitHub 3.1.0b1

Administración de recursos: Relay PyPI 1.1.0 docs GitHub 1.1.0


PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: reservas PyPI 2.3.0 Documentación GitHub 2.3.0

Administración de recursos: Conector PyPI 1.0.0 docs GitHub 1.0.0


de recursos

Administración de recursos: Resource PyPI 8.0.0 Documentación GitHub 8.0.0


Graph PyPI 8.1.0b3 GitHub 8.1.0b3

Administración de recursos: Resource PyPI 1.0.0b5 Documentación GitHub 1.0.0b5


Nombre Paquete Docs Source

Health

Administración de recursos: Resource PyPI 1.1.0 docs GitHub 1.1.0


Mover

Administración de recursos: Recursos PyPI 23.1.1 Documentación GitHub 23.1.1

Administración de recursos: Recursos PyPI 23.1.1 Documentación GitHub 23.1.1

Administración de recursos: PyPI 2.0.0 Documentación GitHub 2.0.0


Scheduler PyPI 7.0.0b1

Administración de recursos - Scvmm PyPI 1.0.0 docs GitHub 1.0.0

Administración de recursos: PyPI 7.0.0 Documentación GitHub 7.0.0


seguridad

Administración de recursos: Security PyPI 1.0.0 docs GitHub 1.0.0


Insights PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


autoayuda PyPI 2.0.0b4 GitHub 2.0.0b4

Administración de recursos: consola PyPI 1.0.0 docs GitHub 1.0.0


serie PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: Service PyPI 8.2.0 Documentación GitHub 8.2.0


Bus

Administración de recursos: Service PyPI 2.1.0 Documentación GitHub 2.1.0


Fabric PyPI 2.2.0b1 GitHub 2.2.0b1

Administración de recursos: clústeres PyPI 2.0.0 Documentación GitHub 2.0.0


administrados de Service Fabric

Administración de recursos: Service PyPI 1.1.0 docs GitHub 1.1.0


Linker PyPI 1.2.0b2 GitHub 1.2.0b2

Administración de recursos: Redes de PyPI 1.0.0 docs GitHub 1.0.0


servicio

Administración de recursos: SignalR PyPI 1.2.0 docs GitHub 1.2.0


PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: Sphere PyPI 1.0.0 docs GitHub 1.0.0

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Detección de aplicaciones de Spring

Administración de recursos: SQL PyPI 3.0.1 Documentación GitHub 3.0.1


PyPI 4.0.0b18 GitHub 4.0.0b18
Nombre Paquete Docs Source

Administración de recursos: máquina PyPI 1.0.0b6 Documentación GitHub 1.0.0b6


virtual de SQL

Administración de recursos - Grupo PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


en espera

Administración de recursos: Storage PyPI 21.2.1 Documentación GitHub 21.2.1

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Acciones de almacenamiento

Administración de recursos: caché de PyPI 2.0.0 Documentación GitHub 2.0.0


almacenamiento

Administración de recursos: Storage PyPI 2.1.0 Documentación GitHub 2.1.0


Mover

Administración de recursos: grupo de PyPI 1.0.0 docs GitHub 1.0.0


almacenamiento PyPI 1.1.0b1 GitHub 1.1.0b1

Administración de recursos: PyPI 1.0.0 docs GitHub 1.0.0


sincronización de almacenamiento PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Stream PyPI 1.0.0 docs GitHub 1.0.0


Analytics PyPI 2.0.0b2 GitHub 2.0.0b2

Administración de recursos: PyPI 3.1.1 Documentación GitHub 3.1.1


suscripciones PyPI 3.2.0b1 GitHub 3.2.0b1

Administración de recursos: soporte PyPI 7.0.0 Documentación GitHub 7.0.0


técnico

Administración de recursos: Synapse PyPI 2.0.0 Documentación GitHub 2.0.0


PyPI 2.1.0b7 GitHub 2.1.0b7

Administración de recursos: Time PyPI 1.0.0 docs GitHub 1.0.0


Series Insights PyPI 2.0.0b1 GitHub 2.0.0b1

Administración de recursos: Traffic PyPI 1.1.0 docs GitHub 1.1.0


Manager

Administración de recursos: VMware PyPI 1.0.0b2 Documentación GitHub 1.0.0b2


Solution by CloudSimple

Administración de recursos: Servicios PyPI 1.0.0 docs GitHub 1.0.0


de Voice

Administración de recursos: Web PyPI 1.1.0 docs GitHub 1.1.0


PubSub PyPI 2.0.0b2 GitHub 2.0.0b2
Nombre Paquete Docs Source

Administración de recursos: cargas PyPI 1.0.0 docs GitHub 1.0.0


de trabajo

Administración de recursos - PyPI 1.0.0b1 Documentación GitHub 1.0.0b1


Instancia virtual SAP de cargas de
trabajo

azure-communication-administration PyPI 1.0.0b4

Autosuggest PyPI 0.2.1 GitHub 0.2.1

azureml-fsspec PyPI 1.0.0

Batch PyPI 14.2.0 Documentación GitHub 14.2.0

Computer Vision PyPI 0.9.0 Documentación GitHub 0.9.0

Content Safety PyPI 1.0.0 GitHub 1.0.0

Reconocimiento del lenguaje PyPI 0.7.0 Documentación GitHub 0.7.0


conversacional

Custom Image Search PyPI 0.2.1 GitHub 0.2.1

Búsqueda personalizada PyPI 0.3.1 GitHub 0.3.1

Custom Vision PyPI 3.1.0 Documentación GitHub 3.1.0

Servicios Device Provisioning PyPI 1.0.0b1

Servicios Device Provisioning PyPI 1.2.0

Entity Search PyPI 2.0.1 GitHub 2.0.1

Image Search PyPI 2.0.1 GitHub 2.0.1

Ink Recognizer PyPI 1.0.0b1 GitHub 1.0.0b1

Dispositivo IoT PyPI 2.12.0


PyPI 3.0.0b2

IoT Hub PyPI 2.6.1

iotedgedev PyPI 3.3.7

iotedgehubdev PyPI 0.14.18

Key Vault PyPI 4.2.0 GitHub 4.2.0

Kusto Data PyPI 2.0.0


Nombre Paquete Docs Source

Machine Learning PyPI 1.2.0

Machine Learning - Tabla PyPI 1.3.0

Supervisión de Machine Learning PyPI 0.1.0a3

News Search PyPI 2.0.0 GitHub 2.0.0

Personalizer PyPI 0.1.0 GitHub 0.1.0

Respuesta a preguntas PyPI 0.3.1 Documentación GitHub 0.3.1

Service Fabric PyPI [Link] Documentación GitHub [Link]

Voz PyPI 1.14.0

Corrector ortográfico PyPI 2.0.0 GitHub 2.0.0

Storage PyPI 0.37.0 GitHub 0.37.0

Storage: lago de datos de archivos PyPI 0.0.51

Synapse PyPI 0.1.1 Documentación GitHub 0.1.1

Text Analytics PyPI 1.0.2

Uamqp PyPI 1.6.9 GitHub 1.6.9

Video Search PyPI 2.0.1 GitHub 2.0.1

Visual Search PyPI 0.2.0 GitHub 0.2.0

Web Search PyPI 2.0.1 GitHub 2.0.1

azure-agrifood-nspkg PyPI 1.0.0

azure-ai-language-nspkg PyPI 1.0.0

azure-ai-translation-nspkg PyPI 1.0.0

azure-iot-nspkg PyPI 1.0.1

azure-media-nspkg PyPI 1.0.0

azure-messaging-nspkg PyPI 1.0.0

azure-mixedreality-nspkg PyPI 1.0.0

azure-monitor-nspkg PyPI 1.0.0

azure-purview-nspkg PyPI 2.0.0


Nombre Paquete Docs Source

azure-security-nspkg PyPI 1.0.0

Paquete de espacio de nombres de PyPI 3.0.0 GitHub 3.0.0


conocimiento de Cognitive Services

Paquete de espacio de nombres de PyPI 3.0.1 GitHub 3.0.1


idiomas de Cognitive Services

Paquete de espacio de nombres de PyPI 3.0.1 GitHub 3.0.1


Cognitive Services

Paquete de espacio de nombres de PyPI 3.0.1 GitHub 3.0.1


búsqueda de Cognitive Services

Paquete de espacio de nombres de PyPI 3.0.1 GitHub 3.0.1


visión de Cognitive Services

Paquete de espacio de nombres de PyPI 0.0.0b1 Documentación


comunicación

Paquete de espacio de nombres PyPI 3.0.2 GitHub 3.0.2


principal

Paquete de espacio de nombres de PyPI 1.0.0 Documentación


datos

Paquete de espacio de nombres de PyPI 1.0.0


Digital Twins

Paquete de espacio de nombres de PyPI 1.0.0 GitHub 1.0.0


Key Vault

Paquete de espacio de nombres de PyPI 1.0.0 GitHub 1.0.0


búsqueda

Paquete de espacio de nombres de PyPI 3.1.0 GitHub 3.1.0


Storage

Paquete de espacio de nombres de PyPI 1.0.0 GitHub 1.0.0


Synapse

Paquete de espacio de nombres de PyPI 1.0.0 GitHub 1.0.0


Text Analytics

Administración de recursos PyPI 5.0.0 GitHub 5.0.0

Administración de recursos: común PyPI 0.20.0

Administración de servicios: PyPI 0.20.7 GitHub 0.20.7


heredada
Nombre Paquete Docs Source

Herramientas de desarrollo PyPI 1.2.0 GitHub 1.2.0

Doc Warden PyPI 0.7.2 GitHub 0.7.2

Tox Monorepo PyPI 0.1.2 GitHub 0.1.2

Nombre para mostrar desconocido PyPI 0.3.7

Nombre para mostrar desconocido PyPI 0.0.8

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A


Reference

Services
Active Directory

Advisor

Authorization

Batch AI

Batch

Billing

CDN

Cognitive Services

Commerce

Consumption

Container Instance

Container Registry

Container Service

Cosmos DB

Data Box Edge / Data Box Gateway

Data Factory

Data Lake Analytics

Data Lake Store

Deployment Manager

DevTest Labs

DNS

Event Hub

Event Grid
Functions

Graph RBAC

Management Groups

Hana on Azure

HDInsight

IoT

Key Vault

Lab Services

Log Analytics

Logic Apps

Managed Services

Media Services

Mixed Reality

Monitoring

PostgreSQL/MySQL

Network

Notification Hubs

Policy

Power BI

Recovery Services

Recovery Services Backup

Redis

Relay

Resources

Resource Graph

Scheduler

Search

Service Bus
Service Fabric

SQL

Storage

Virtual Machines

Traffic Manager

Web Apps

Other
Hospedaje de aplicaciones de Python en
Azure
Artículo • 23/01/2024

Azure proporciona varias maneras diferentes de hospedar la aplicación en función de


sus necesidades. En el artículo Hospedaje de aplicaciones en Azure se proporciona
información general sobre las distintas opciones.

Por lo general, elegir una opción de hospedaje de Azure es cuestión de elegir el


continuo de control frente a responsabilidad. Cuanto más control necesite, mayor será
la responsabilidad que asuma para la administración de los recursos. En este continuo,
se recomienda comenzar con App de Azure Servicio, con la menor responsabilidad
administrativa por su parte. A continuación, tenga en cuenta otras opciones en el
proceso continuo para asumir más responsabilidad administrativa de los recursos de
Azure. Al otro extremo del continuum de App Service se encuentra Azure Virtual
Machines, donde tiene la mayor responsabilidad administrativa y control para mantener
los recursos.

Las secciones de este artículo se organizan aproximadamente desde opciones más


administradas (menos sobrecarga de administración por usted) a menos opciones
administradas (más control por usted).

Hospedaje de aplicaciones web con App de Azure Service:


Inicio rápido: implementación de una aplicación web de Python (Django o Flask)
en Azure App Service
Implementación de una aplicación web de Python (Django o Flask) con
PostgreSQL en Azure
Creación e implementación de una aplicación web de Flask en Azure con una
identidad administrada asignada por el sistema
Configuración de una aplicación de Python para App de Azure Service

Red de entrega de contenido con aplicaciones web estáticas de Azure


Hospedaje de sitios web estáticos en Azure Storage
Inicio rápido: creación del primer sitio estático con Azure Static Web Apps

Hospedaje sin servidor con Azure Functions:


Inicio rápido: Creación de una función de Python en Azure desde la línea de
comandos
Inicio rápido: Creación de una función en Azure con Python mediante
Visual Studio Code
Conexión de Azure Functions a Azure Storage mediante herramientas de línea
de comandos
Conexión de Azure Functions a Azure Storage mediante Visual Studio Code

Hospedaje de contenedores con Azure:


Introducción a python Container Apps en Azure
Implementación de un contenedor en App Service
Implementación de un contenedor en Azure Container Apps
Inicio rápido: Implementación de un clúster de Azure Kubernetes Service
mediante la CLI de Azure
Implementación de un contenedor en Azure Container Instances mediante la
CLI de Azure
Cree la primera aplicación de contenedor de Service Fabric en Linux

Proceso intensivo y operaciones de larga duración con Azure Batch:


Uso de Python para crear y ejecutar un trabajo de Azure Batch
Tutorial: Ejecución de una carga de trabajo de procesamiento de archivos
paralelos con Azure Batch mediante Python
Tutorial: Ejecución de scripts de Python mediante Azure Data Factory mediante
Azure Batch

Recursos informáticos escalables a petición con Azure Virtual Machines:


Inicio rápido: Uso de la CLI de Azure para implementar una máquina virtual
Linux en Azure
Ejemplos de administración de Azure Virtual Machines: Python
Soluciones de datos para aplicaciones
de Python en Azure
Artículo • 16/03/2024

Azure ofrece una opción de bases de datos relacionales, NoSQL y en memoria


totalmente administradas, que abarcan motores propietarios y de código abierto,
además de servicios de almacenamiento para el almacenamiento de objetos, bloques y
archivos. Los artículos siguientes le ayudarán a empezar a trabajar con soluciones de
datos de Python en Azure.

Bases de datos
PostgreSQL: cree aplicaciones escalables, seguras y totalmente administradas para
la empresa en PostgreSQL de código abierto, escale horizontalmente PostgreSQL
de un solo nodo con un alto rendimiento o migre cargas de trabajo de PostgreSQL
y Oracle a la nube.
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for PostgreSQL: servidor flexible
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for PostgreSQL: servidor único
Implementación de una aplicación web de Python (Django o Flask) con
PostgreSQL en App de Azure Service

MySQL: cree aplicaciones que se escalen con una base de datos SQL administrada
e inteligente en la nube.
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for MySQL: servidor flexible
Inicio rápido: Uso de Python para conectarse y consultar datos en Azure
Database for MySQL

Azure SQL: cree aplicaciones que se escalen con una base de datos SQL
administrada e inteligente en la nube.
Inicio rápido: Uso de Python para consultar una base de datos en Azure SQL
Database o Azure SQL Instancia administrada

NoSQL, blobs, tablas, archivos, grafos y


memorias caché
Cosmos DB: compile aplicaciones con baja latencia garantizada y alta
disponibilidad en cualquier lugar, a cualquier escala o migre Cassandra, MongoDB
y otras cargas de trabajo noSQL a la nube.
Inicio rápido: Biblioteca cliente de Azure Cosmos DB for NoSQL para Python
Inicio rápido: Azure Cosmos DB para MongoDB para Python con el controlador
de MongoDB
Inicio rápido: Compilación de una aplicación de Cassandra con el SDK de
Python y Azure Cosmos DB
Inicio rápido: Creación de una aplicación de API para Table con el SDK de
Python y Azure Cosmos DB
Inicio rápido: Biblioteca de Azure Cosmos DB for Apache Gremlin para Python

Blob Storage: almacenamiento de objetos escalable y seguro de forma masiva


para cargas de trabajo nativas de la nube, archivos, lagos de datos, informática de
alto rendimiento y aprendizaje automático.
Inicio rápido: Biblioteca cliente de Azure Blob Storage para Python
Ejemplos de Azure Storage con bibliotecas cliente de Python v12

Azure Data Lake Storage Gen2: lago de datos escalable y seguro de forma masiva
para las cargas de trabajo de análisis de alto rendimiento.
Uso de Python para administrar directorios y archivos en Azure Data Lake
Storage Gen2
Uso de Python para administrar listas de control de acceso (ACL) en Azure Data
Lake Storage Gen2

Almacenamiento de archivos: recursos compartidos de archivos en la nube


sencillos, seguros y sin servidor.
Desarrollo para Azure Files con Python

Redis Cache: aplicaciones escalables y rápidas de energía con un almacén de datos


en memoria compatible con código abierto.
Inicio rápido: Uso de Azure Cache for Redis con Python

Macrodatos y análisis
Análisis de Azure Data Lake: un servicio de análisis de pago por trabajo
totalmente administrado a petición con seguridad, auditoría y soporte técnico de
nivel empresarial.
Administración de Azure Data Lake Analytics con Python
Desarrollo de U-SQL con Python para Azure Data Lake Analytics en Visual
Studio Code
Azure Data Factory: un servicio de integración de datos para orquestar y
automatizar el movimiento y la transformación de datos.
Inicio rápido: Creación de una factoría de datos y una canalización con Python
Transformación de datos mediante la ejecución de una actividad de Python en
Azure Databricks

Azure Event Hubs: un servicio de ingesta de telemetría de hiperescale que


recopila, transforma y almacena millones de eventos.
Envío o recepción de eventos desde Event Hubs mediante Python
Capturar datos de Event Hubs en Azure Storage y leerlos mediante Python
(azure-eventhub)

HDInsight: un servicio spark y Hadoop en la nube totalmente administrado


respaldado por un Acuerdo de Nivel de Servicio del 99,9 % para su empresa
Usar las herramientas Spark y Hive para Visual Studio Code

Azure Databricks: una plataforma de análisis basada en Apache® Spark™


totalmente administrada, rápida, sencilla y colaborativa optimizada para Azure.
Conectarse a Azure Databricks desde Excel, Python o R
Introducción a Azure Databricks
Tutorial: Azure Data Lake Storage Gen2, Azure Databricks y Spark

Azure Synapse Analytics: un servicio de análisis ilimitado que reúne el


almacenamiento de datos empresariales y el análisis de macrodatos.
Inicio rápido: Uso de Python para consultar una base de datos en Azure SQL
Database o Azure SQL Instancia administrada (incluye Azure Synapse Analytics)
Administración de identidades y acceso
para aplicaciones de Python en Azure
Artículo • 12/03/2024

La administración de identidades y acceso para aplicaciones de Python en Azure se


centra fundamentalmente en la autenticación de la identidad de un usuario, grupo,
aplicación o servicio y autorización de esa identidad para realizar acciones solicitadas en
los recursos de Azure. Hay diferentes opciones de administración de identidades y
acceso entre las que puede elegir en función de las necesidades de seguridad y
aplicación. En este artículo se proporcionan vínculos a recursos que le ayudarán a
empezar.

Para obtener información general sobre la autenticación y autorización en Azure,


consulte Recomendaciones para la administración de identidades y acceso.

Conexiones sin contraseña


Siempre que sea posible, se recomienda usar identidades administradas para simplificar
la administración general y mejorar la seguridad. En concreto, use conexiones sin
contraseña para evitar el uso de la inserción de datos confidenciales, como contraseñas
en código o variables de entorno.

Información general: Conexión sin contraseña para los servicios de Azure

Autenticación de aplicaciones de Python en servicios de Azure mediante el SDK de


Azure para Python

Uso de DefaultAzureCredential en una aplicación

Inicio rápido: Biblioteca cliente de Azure Blob Storage para Python con conexiones
sin contraseña

Inicio rápido: Envío y recepción de mensajes de colas de Azure Service Bus con
conexiones sin contraseña

Creación e implementación de una aplicación web de Flask en Azure con una


identidad administrada asignada por el sistema

Creación e implementación de una aplicación web de Django en Azure con una


identidad administrada asignada por el usuario
Los recursos enumerados muestran cómo usar el SDK de Python de Azure y las
conexiones sin contraseña con DefaultAzureCredential . DefaultAzureCredential es
adecuado para la mayoría de las aplicaciones que se ejecutarán en Azure porque
combina credenciales de producción comunes con credenciales de desarrollo.

Conector de servicio
Es probable que muchos recursos de Azure se usen con para las aplicaciones de Python
que habiliten el servicio Service Conectar or. Service Conectar or le ayuda a configurar la
configuración de red y la información de conexión entre servicios de Azure, como App
Service y Container Apps y otros servicios, como el almacenamiento o las bases de
datos.

Inicio rápido: Creación de una conexión de servicio en App Service desde Azure
Portal

Tutorial: Uso de Service Connector para compilar una aplicación de Django con
Postgres en Azure App Service

Key Vault
El uso de una solución de administración de claves como Azure Key Vault proporciona
más control, pero con un aumento de la complejidad de la administración.

Inicio rápido: Biblioteca cliente de certificados de Azure Key Vault para Python

Inicio rápido: Biblioteca cliente de claves de Azure Key Vault para Python

Inicio rápido: Biblioteca cliente secreta de Azure Key Vault para Python

Autenticación e identidad para iniciar sesión de


usuarios en aplicaciones
Puede crear aplicaciones de Python que permitan a los usuarios y clientes iniciar sesión
con sus identidades de Microsoft o cuentas sociales. La aplicación autoriza el acceso a
sus propias API o API de Microsoft, como Microsoft Graph.

Inicio rápido: Inicio de sesión de usuarios y llamada a Microsoft Graph API desde
una aplicación web de Python

Temas de autenticación de aplicaciones web


Inicio rápido: Adquisición de un token y llamada a Microsoft Graph desde una
aplicación demonio de Python

Temas sobre el servicio back-end, el demonio y la autenticación de scripts


Aprendizaje automático para
aplicaciones de Python en Azure
Artículo • 16/03/2024

Los artículos siguientes le ayudarán a empezar a trabajar con Azure Machine Learning.
Las API REST de Azure Machine Learning v2, la extensión de la CLI de Azure y el SDK de
Python aceleran el ciclo de vida de aprendizaje automático de producción. Los vínculos
de este artículo tienen como destino la versión 2, que se recomienda si va a iniciar un
nuevo proyecto de aprendizaje automático.

Introducción
El área de trabajo es el recurso de nivel superior para Azure Machine Learning, que
proporciona un lugar centralizado para trabajar con todos los artefactos que crea al usar
Azure Machine Learning.

Inicio rápido: Introducción a Azure Machine Learning


Administración de áreas de trabajo de Azure Machine Learning en el portal o con
el SDK de Python (v2)
Ejecución de cuadernos de Jupyter en el área de trabajo
Tutorial: Desarrollo de modelos en una estación de trabajo en la nube

Implementación de modelos
Implemente modelos de Machine Learning para la inferencia en tiempo real.

Tutorial: Diseñador: Implementación de un modelo de Machine Learning


Implementación y puntuación de un modelo de aprendizaje automático mediante
un punto de conexión en línea

Automated Machine Learning


El aprendizaje automático automatizado, también denominado ML automatizado o
AutoML, es el proceso de automatizar las tareas lentas e iterativas del desarrollo de
modelos de Machine Learning.

Entrenamiento de un modelo de regresión con AutoML y Python (SDK v1)


Configuración del entrenamiento de AutoML para datos tabulares con la CLI de
Azure Machine Learning y el SDK de Python (v2)
Acceso a datos
Con Azure Machine Learning puede traer datos de una máquina local o de un
almacenamiento basado en la nube existente.

Creación y administración de recursos de datos


Tutorial: Carga, acceso y exploración de los datos en Azure Machine Learning
Acceso a datos en un trabajo

Canalizaciones de aprendizaje automático


Use canalizaciones de aprendizaje automático para crear un flujo de trabajo que une
varias fases de APRENDIZAJE automático.

Uso de Azure Pipelines con Azure Machine Learning


Creación y ejecución de canalizaciones de aprendizaje automático mediante
componentes con el SDK de Azure Machine Learning v2
Tutorial: Creación de canalizaciones de ML de producción con el SDK v2 de Python
en un cuaderno de Jupyter Notebook
Servicios de inteligencia artificial para
aplicaciones de Python en Azure
Artículo • 08/03/2024

Servicios de Azure AI es un servicio de inteligencia artificial (IA) basado en la nube que


ayuda a los desarrolladores a crear inteligencia cognitiva en las aplicaciones sin tener
aptitudes o conocimientos directos de IA o ciencia de datos. Hay servicios de
inteligencia artificial listos para computer vision e procesamiento de imágenes, análisis
de lenguaje y traducción, voz, toma de decisiones, búsqueda y Azure OpenAI que puede
usar en las aplicaciones de Python.

Debido a la naturaleza dinámica de los servicios de Azure AI, la mejor manera de


encontrar material de introducción para Python es comenzar en la página del centro de
servicios de Azure AI y, a continuación, encontrar el servicio específico que busca.

1. En la página central, seleccione un servicio para ir a su página de aterrizaje de


documentación. Por ejemplo, para Azure AI Vision.

2. En la página de aterrizaje, seleccione una categoría del servicio. Por ejemplo, en


Computer Vision, seleccione Análisis de imágenes.

3. En la documentación, busque Inicios rápidos en la tabla de contenido. Por


ejemplo, en la documentación de Análisis de imágenes, en Inicios rápidos, hay una
guía de inicio rápido de la versión 4.0 (versión preliminar).

4. En los artículos de inicio rápido, elija el lenguaje de programación Python si existe


o la API REST.

Si no ve un inicio rápido, en el cuadro de búsqueda de la tabla de contenido,


escriba Python para buscar artículos relacionados con Python.

Además, puede ir a los módulos de Azure Cognitive Services para Información general
de Python para obtener información sobre los módulos de SDK de Python disponibles.
(Azure Cognitive Services es el nombre anterior de los servicios de Azure AI. La
documentación se está actualizando actualmente para reflejar el cambio).

Vaya a la página del centro de servicios de Azure AI. >>>

La documentación de Azure AI Search se encuentra en una parte independiente de la


documentación:

Inicio rápido: Búsqueda de texto completo con los SDK de Azure


Uso de Python e IA para generar contenido que permita búsquedas desde blobs
de Azure
Mensajería, eventos e IoT para
aplicaciones de Python en Azure
Artículo • 12/03/2024

Los siguientes artículos le ayudarán a empezar a trabajar con los servicios de mensajería,
ingesta y procesamiento de eventos e Internet de las cosas (IoT) en Azure.

Mensajería
Los servicios de mensajería de Azure proporcionan interconectividad entre aplicaciones
y componentes que están escritos en lenguajes diferentes y hospedados en la misma
nube, en varias nubes o en el entorno local.

Notificaciones
Uso de Notification Hubs desde Python

Colas
Inicio rápido: Biblioteca cliente de Azure Queue Storage para Python
Inicio rápido: Envío y recepción de mensajes desde colas de Azure Service Bus
(Python)
Envío de mensajes a un tema de Azure Service Bus y recepción de mensajes de
suscripciones al tema (Python)

Funcionalidad web en tiempo real (SignalR)


Inicio rápido: Creación de una aplicación sin servidor con Azure Functions y
Azure SignalR Service en Python

Azure Web PubSub


Creación de un con WebPubSubServiceClient Python e Identidad de Azure

Eventos
Event Hubs es una plataforma de streaming de macrodatos y un servicio de ingesta de
eventos. Event Grid es un agente de eventos escalable y sin servidor que puede usar
para integrar aplicaciones mediante eventos.

Event Hubs
Inicio rápido: Envío o recepción de eventos desde Event Hubs mediante Python
Inicio rápido: Captura de datos de Event Hubs en Azure Storage y léelo
mediante Python (azure-eventhub)
Event Grid
Inicio rápido: Enrutamiento de eventos personalizados al punto de conexión de
web con la CLI de Azure y Event Grid
Ejemplos de Python de la biblioteca cliente de Azure Event Grid

Internet de las cosas (IoT)


Internet de las cosas o IoT hace referencia a una colección de servicios administrados y
de plataforma en todo el perímetro y la nube que conectan, supervisan y controlan los
recursos de IoT. IoT también incluye sistemas operativos y de seguridad para
dispositivos y datos y análisis que le ayudan a crear, implementar y administrar
aplicaciones de IoT.

IoT Hub
Inicio rápido: Envío de telemetría desde un dispositivo IoT Plug and Play a Azure
IoT Hub
Envío de mensajes de nube a dispositivo con IoT Hub
Carga de archivos de un dispositivo a la nube con IoT Hub
Programar y difundir trabajos
Inicio rápido: Control de un dispositivo conectado a IoT Hub

Aprovisionamiento de dispositivos
Inicio rápido: Aprovisionamiento de un dispositivo simulado de certificado
X.509
Tutorial: Aprovisionamiento de dispositivos mediante grupos de inscripción de
clave simétrica
Tutorial: Aprovisionamiento de varios dispositivos X.509 mediante grupos de
inscripción

IoT Central/IoT Edge


Tutorial: Creación y conexión de un aplicación cliente a la aplicación de Azure
IoT Central
Tutorial: Desarrollo de módulos de IoT Edge mediante Visual Studio Code
Otros servicios para aplicaciones de
Python en Azure
Artículo • 04/07/2024

Los servicios a los que se hace referencia en este artículo para Python se especializan o
se centran en resolver un problema específico. Por otros servicios, significamos servicios
que no sean los servicios principales de proceso, redes, almacenamiento y base de
datos. Las referencias de este artículo incluyen servicios de administración y gobernanza,
medios, genómicos e Internet de las cosas. Para obtener una lista completa de los
servicios, consulte Productos de Azure.

Streaming multimedia:
Conexión a la API de Azure Media Services v3

Automatización:
Tutorial: Creación de un runbook de Python

DevOps:
Uso de CI/CD con Acciones de GitHub para implementar una aplicación web de
Python en Azure App Service en Linux
Compilación e implementación de una aplicación en la nube de Python con la
herramienta de código abierto de la CLI para desarrolladores de Azure (azd)
Compilación, prueba e implementación de aplicaciones de Python con Azure
Pipelines

Internet de las cosas y la asignación geográfica:


Tutorial: Enrutamiento de vehículos eléctricos mediante Azure Notebooks
Tutorial: Unión de datos de sensor con datos de previsión meteorológica
mediante Azure Notebooks

Burrows-Wheeler Aligner (BWA) y el kit de herramientas de análisis genómico


(GATK):
Inicio rápido: Ejecución de un flujo de trabajo mediante el servicio Microsoft
Genomics

Administración de recursos:
Inicio rápido: Ejecución de la primera consulta de Resource Graph mediante
Python

Administración de máquinas virtuales:


Ejemplo: Uso de las bibliotecas de Azure para crear una máquina virtual
Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Obtener ayuda en Microsoft Q&A

También podría gustarte