Streamlit sobre Azure
La implementación de una aplicación de Streamlit sobre Azure no está libre de complejidades iniciales, las cuales tuve y muchas, pero una vez ajustadas el camino es llano. En este artículo presento una manera aceitada para instalar sin complicaciones y aplicar CI/CD sobre el despliegue de Streamlit en Azure Platform.
En primer lugar, para conocer algo de la construcción básica de aplicaciones remitase al artículo base de Streamlit, para luego revisar los conceptos necesarios para un correcto despliegue en Azure.
Fase uno: Azure
Uno de los mayores proveedores de servicios en la nube, Microsoft con Azure Services ofrece una miriada de servicios de toda índole. Para este tema en particular me centraré en las App Services que permiten la creación de aplicaciones sin servidor (serverless).
Los pasos para la creación de una app de este tipo pueden partir de dos fuentes distintas, en primer lugar se puede crear desde el Portal Azure (el sitio web de Azure) o directamente desde Visual Studio Code si se han instalado las extensiones adecuadas. Mostraré ambas alternativas de creación de app para que elijas la que mejor conviene a tus preferencias.
Cabe hacer notar que estos servicios en la nube en general no son económicos, y es muy fácil salirse de presupuesto, ya que todo servicio en la nube del proveedor que sea se cobra por todo, desde almacén hasta tránsito de datos. Hay que estar muy atentos.
Portal Azure
Asumo que tienes una cuenta en Azure y algún tipo de servicio contratado. Así que ingresando a tu cuenta personal en Portal Azure y activando App Service accederá a la opción de crear una nueva aplicación.
Las opciones de creación para este tipo de servicios son:
- Aplicación web:
Esta será la elegida siendo la más versátil ya que permite elegir o no base de datos. - Aplicación web estática:
Las aplicaciones web estáticas son aquellas de tipo directo, que pasan del código a la producción directamente, son rápidas de implementar y cada vez que se actualiza el repositorio que lo contiene (GitHub por ejemplo) se actualiza en el servicio. Se utiliza principalmente para aplicaciones web de tipo html y javascript. - Aplicación web + base de datos:
Esta es la opción de mayor valor porque incluye la utilización de bases de datos, privada y no accesible a Internet, como medida recomendada de seguridad. Que por lo general se añade sin indicarte precios, solo te muestra básico o estándar, si es necesario te subirá el plan, y por cierto también te añadirá una red para conectar a la base de datos que por supuesto tiene costo adicional. - WordPress en App Service:
Este es un servicio especialmente indicado para la construcción y mantención de sitios web WordPress, uno de los gestores de contenidos más utilizados en la web. Esta opción incluye la selección de un plan de hospedaje (hosting) según los requerimientos de almacenamiento y complejidad que se trate. Donde tendrá que seleccionar el plan de servicio y de base de datos acorde.
NOTA: No es la mejor selección costo rendimiento para un blog, es bastante más caro que contratar un hosting «normal» en cualquier proveedor nacional. A tener en cuenta.
La creación de una App Services requiere de una serie de pasos entre los que podemos considerar: el nombre único que inicialmente participa del dominio nombre_app.azurewebsites.net que luego puede cambiarse a un dominio propio (con un pago de por medio obviamente).
El tipo de entorno de ejecución indica el lenguaje utilizado para la aplicación y esto es a elección del usuario dentro de las opciones disponibles en Azure, que dispone de .NET, Java, Node, PHP y Python
Los pasos siguientes pasan por configurar:
- Base de datos. Si el plan lo contempla, de lo contrario deberá ampliar el plan y seleccionar el tipo de base de datos.
- Implementación o despliegue continuo, imprescindible para ambientes de producción, para mantener actualizado el código de la aplicación y para entornos de multiples desarrolladores.
- Redes, Siempre activado si es una aplicación disponible en Internet.
- Supervisión. Control del rendimiento de la aplicación mediante Azure Monitor Application Insights. Para detección de anomalías, problemas de rendimiento o detección de problemas. Es un servicio adicional de pago.
- Etiquetas. son pares de nombre-valor para identificar los diferentes recursos. Es meramente informativa.
Una vez creada estará disponible dentro de los recursos de la cuenta Azure.
Una vez instalada la aplicación se debe configurar para que se comporte como una aplicación web independiente. En primer lugar y para el caso de aplicaciones Streamlit se debe seleccionar en Configuración->Configuración de la pila la versión de Python (v12 para este caso) y un comando de inicio que le indicará a Streamlit utilizar el puerto 8000 y con acceso desde todos los puertos.
python -m streamlit run Inicio.py --server.port 8000 --server.address 0.0.0.0
Dos variables de entorno recomendables a adicionar mediante Configuración->Variables de entorno son
WEBSITE_HTTPLOGGING_RETENTION_DAYS: 7
Período de retención en días de los registros del servidor web para aplicaciones nativas de Windows, si los registros del servidor web están habilitados.
SCM_DO_BUILD_DURING_DEPLOYMENT: true
De manera predeterminada, el motor de implementación asume que un paquete ZIP está listo para ejecutarse tal como está y no ejecuta ninguna automatización de compilación. Para habilitar la misma automatización de compilación que en una implementación de Git, configure la variable de la aplicación SCM_DO_BUILD_DURING_DEPLOYMENT a true.
Visual Studio Code
La creación por esta vía es más directa y menos controlada, sin embargo, requiere que se encuentren instaladas las siguientes extensiones dentro de Visual Studio:
- Azure Tools
- Azure App Service
Una vez instaladas las extensiones de Azure se debe ingresar a la cuenta de Azure, no se permiten más de una cuenta a la vez, así que como desarrollador debo intercambiar cuentas según la cuenta Azure sobre la que trabajo.
Una vez ingresados a la cuenta disponemos de los recursos contratados, sobre los cuales se puede crear una nueva App Service. Para crear una nueva App con el clic derecho sobre App Services seleccionamos Create New Web App (Advance) ya que permite un mayor control sobre las opciones disponibles.
Donde los pasos a recorrer son:
- Asignar un nombre único a la nueva aplicación
- Seleccionar el grupo de recursos
- La pila de trabajo (Python v12)
- El plan de trabajo contratado
- El plan de monitoreo mediante Azure Monitor Application Insights (opcional incluye pago adicional asi que sugiero omitirlo «skip for now»)
Eso finaliza la creación de la aplicación. Ahora corresponde implementar el código de la aplicación.
Fase dos: Streamlit
Por supuesto que se requiere que la aplicación esté construida libre de errores, cualquier tipo de error se verá reflejado en una alerta de aplicación y no se ejecutará en Azure. En este sentido es bastante sensible, por lo que se debe evaluar muy bien en forma local en búsqueda de errores o incongruencias también en las versiones de las librerías utilizadas.
A modo de ejemplo, si se utliza duckdb en su version 1.0.0 (la más reciente), es incompatible si además utiliza Pygwalker, ya que esta utiliza la versión 0.10.3 de duckdb
Fase tres: Despliegue continuo
Finalmente, con el uso de GitHub podemos asegurarnos de un despliegue continuo, ya que cada vez
Para asegurar que esta implementación se efectue en forma automática hay que ajustarla en al área de Implementación->Centro de Implementación, donde en Configuración al elegir GitHub y establecer la organización, el repositorio y la rama respectiva (main, developer u otra), se generará un flujo de trabajo de accioines de Github.
A partir del paso anterior, toda vez que se establezca un commit a la rama definida, provocará que se actualice el código de la aplicación. Obteniendo un historial de actualizaciones en GitHub.