Cree un portal personalizado con aplicaciones Amazon SageMaker AI MLflow integradas

A medida que crecen los equipos de aprendizaje automático, integrar las aplicaciones MLflow de IA de Amazon SageMaker en un portal personalizado requiere un enfoque escalable para la administración del acceso. La distribución de URL prefirmadas no se adapta a equipos con docenas de científicos de datos, y otorgar acceso individual a AWS Management Console agrega una sobrecarga operativa para los administradores que administran los controles de acceso. Los equipos que dependen de portales internos integrados con SSO necesitan que se pueda acceder al seguimiento de experimentos de MLflow junto con otras aplicaciones internas a través de una única URL que se pueda marcar como favorita. Con un portal personalizado, reduce el tiempo de incorporación de nuevos miembros del equipo, simplifica la administración del acceso y brinda a los científicos de datos una experiencia consistente en todas sus herramientas internas.

Con esta solución, brinda a sus equipos de aprendizaje automático (ML) una URL persistente y que se puede marcar como favorita para la interfaz de usuario web completa de MLflow sin URL prefirmadas ni acceso a la Consola de administración de AWS. Puede integrar la interfaz de usuario de seguimiento de experimentos de MLflow directamente en el portal interno o panel personalizado integrado con SSO de su organización, para que los usuarios se autentiquen una vez y accedan al seguimiento de experimentos junto con otras herramientas internas. Sus secuencias de comandos de automatización y canalizaciones de integración continua y entrega continua (CI/CD) pueden interactuar con las API REST de MLflow mediante programación a través del mismo punto final proxy, con la autenticación SigV4 manejada detrás de escena.

En esta publicación, aprenderá cómo crear un portal personalizado con la interfaz de usuario de aplicaciones SageMaker AI MLflow integrada. Recorrerá el patrón de arquitectura detrás de una interfaz de React emparejada con un proxy inverso de Flask que maneja la autenticación de AWS Signature Version 4 (SigV4), implementará toda la pila a través del AWS Cloud Development Kit (AWS CDK), validará la implementación y revisará las consideraciones de seguridad y los procedimientos de limpieza.

Descripción general de la solución

Implementa una aplicación web React personalizada con la interfaz de usuario de las aplicaciones SageMaker AI MLflow integrada mediante iframe, respaldada por un proxy inverso Flask que se ejecuta en Amazon Elastic Compute Cloud (Amazon EC2). La arquitectura consta de cuatro componentes que funcionan juntos para brindarle a su equipo acceso autenticado a MLflow.

Balanceador de carga de aplicaciones

El balanceador de carga de aplicaciones (ALB) sirve como punto de entrada único para sus usuarios. Maneja la terminación HTTPS enrutando el tráfico a los destinos de backend apropiados y se integra con la infraestructura de certificados y DNS existente de su organización. Proporciona una URL estable y pública para el portal que puede integrarse con la infraestructura SSO existente. Distribuye el tráfico tanto para el panel de React como para las solicitudes de API de MLflow, y admite nombres de dominio personalizados y terminación SSL.

Nota: Esta implementación utiliza ALB con HTTP. Para entornos de producción, debe agregar HTTPS con un certificado SSL/TLS a través de AWS Certificate Manager (ACM).

Reaccionar portal frontal

La interfaz de React le brinda a su equipo un punto de entrada de marca a la experiencia MLflow. Proporciona un portal personalizado que incorpora la interfaz de usuario de seguimiento de MLflow en un iframe y sirve como punto de integración para la marca organizacional y herramientas adicionales. Entrega archivos estáticos a través del proxy Flask desde la ruta /app.

Servicio de proxy inverso de matraz

El proxy inverso de Flask se encuentra entre el front-end y el backend de MLflow y maneja la autenticación para que sus usuarios nunca administren las credenciales de AWS directamente. Una aplicación Flask basada en Python maneja:

Interceptar solicitudes entrantes, incluidas rutas de interfaz de usuario y llamadas a API REST. Firmar cada solicitud con AWS SigV4 utilizando credenciales temporales obtenidas al asumir un rol dedicado de AWS Identity and Access Management (IAM). Reenvío de solicitudes firmadas al punto final de Amazon SageMaker AI MLflow Apps. Reescribir URL absolutas de MLflow en respuestas HTML a rutas relativas y eliminar encabezados de X-Frame-Options para que la interfaz de usuario se represente correctamente dentro de un iframe.

Aplicaciones de Amazon SageMaker AI MLflow

Amazon SageMaker AI administra completamente las aplicaciones MLflow por usted, por lo que no hay servidores que aprovisionar ni parchear. Amazon SageMaker AI MLflow Apps proporciona seguimiento de experimentos con ejecuciones, métricas, parámetros y artefactos, junto con un registro de modelos para control de versiones de modelos y administración del ciclo de vida. Es un backend totalmente administrado sin infraestructura que mantener.

Esta arquitectura admite una comunicación segura al tiempo que mantiene la compatibilidad con los portales empresariales existentes. El servicio de proxy actúa como un puente, transformando las solicitudes HTTPS estándar en llamadas API de AWS autenticadas.

Arquitectura y flujo de trabajo de solicitudes

El siguiente diagrama muestra cómo los diferentes componentes funcionan juntos para brindarle a su equipo acceso seguro basado en navegador a las aplicaciones Amazon SageMaker AI MLflow.

Esto es lo que sucede cuando un usuario navega al portal:

El usuario abre la URL de ALB en su navegador, ya sea directamente o mediante un enlace en el portal interno de su organización. El ALB enruta la solicitud a la instancia Amazon EC2 que ejecuta el proxy Flask. El proxy Flask sirve el panel de React (desde la ruta /app). La aplicación React representa la página y carga la interfaz de usuario de MLflow dentro de un iframe que apunta a /mlflow-ui/. A partir de este momento, cada solicitud que realiza el iframe pasa por el proxy Flask, ya sea cargando las páginas de la interfaz de usuario de MLflow o llamando a puntos finales de API como /api/2.0/mlflow/experiments/search. El proxy firma cada solicitud con AWS SigV4 utilizando credenciales temporales (obtenidas al asumir una función de IAM dedicada) y la reenvía al punto final de la aplicación MLflow sin servidor. Cuando la aplicación MLflow responde, el proxy hace dos cosas antes de devolver la respuesta al navegador. Reescribe las URL absolutas de MLflow en rutas relativas para que la navegación funcione correctamente a través del proxy. También elimina los encabezados X-Frame-Options para que el navegador permita que el contenido se muestre dentro del iframe.

Sus usuarios ven la interfaz de usuario completa de seguimiento de MLflow, incluidos experimentos, ejecuciones, métricas y registro de modelos, directamente en su navegador, con la autenticación de AWS manejada detrás de escena.

Tutorial

La siguiente sección le explica cómo implementar la solución. ### Requisitos previos

Para seguir este tutorial, asegúrese de tener los siguientes requisitos previos:

Una cuenta de AWS. Interfaz de línea de comandos de AWS (AWS CLI) v2.34.5 o posterior (requerida para los comandos create-mlflow-app, list-mlflow-apps y describe-mlflow-app). Python 3.13 o posterior instalado localmente (utilizado por el script de implementación para analizar las salidas JSON). AWS CDK v2 (aws-cdk-lib 2.243.0 o posterior) instalado y arrancado en la cuenta y región de destino. Para obtener instrucciones, consulte Introducción a AWS CDK. Node.js 18.x o posterior instalado localmente para la implementación de CDK. Python 3.13 instalado en la instancia Amazon EC2 (automatizado mediante el script de configuración). Permisos de IAM suficientes para crear VPC, instancias de Amazon EC2, ALB, dominios de IA de Amazon SageMaker, aplicaciones MLflow y roles de IAM. Una AMI de Ubuntu 24.04 LTS disponible en la región de AWS de destino (resuelta automáticamente mediante SSM Parameter Store). Conocimientos requeridos: comprensión básica de los servicios de AWS y los permisos de IAM. Familiaridad con las aplicaciones Python y Flask. Comprensión de los conceptos y operaciones de MLflow. Consideraciones de costos: esta solución crea recursos de AWS que pueden generar costos. Los recursos clave que generan costos incluyen: Instancias Amazon EC2. Balanceador de carga de aplicaciones. Recursos de IA de Amazon SageMaker. Almacenamiento del Servicio de almacenamiento simple de Amazon (Amazon S3).

Para obtener información sobre los precios de los servicios de AWS, consulte la Calculadora de precios de AWS.

Implementar la solución

Esta sección lo guía a través de la implementación de la solución en su cuenta de AWS y su validación. La implementación utiliza un único script implementar.sh que organiza la implementación de la pila CDK y la creación de la aplicación MLflow sin servidor.

Paso 1: clonar el repositorio e implementar la infraestructura

Descargue el código de la solución e instale las dependencias:

# Clonar el repositorio git clone https://github.com/aws-samples/sample-sagemaker-mlflow-embedded-ui.git # Navegar al directorio del proyecto e instalar las dependencias cd sample-sagemaker-mlflow-embedded-ui npm install

Configure el ID de su cuenta de AWS y la región como variables de entorno:

exportar CDK_DEFAULT_ACCOUNT= exportar CDK_DEFAULT_REGION= exportar AWS_DEFAULT_REGION= exportar AWS_REGION=

Nota: Si realizó la implementación anteriormente en una región diferente, elimine el archivo de contexto almacenado en caché.

Arranque su entorno para AWS CDK (omita este paso si su cuenta y región de AWS ya están arrancadas para AWS CDK). Arranque la cuenta de AWS y la región para CDK: implemente los recursos necesarios en su cuenta de AWS. Ejecute el script de implementación para implementar las pilas:

Tenga en cuenta el nombre DNS de ALB y el ID de instancia Amazon EC2 del resultado de la implementación. Los necesitará en los siguientes pasos.

Paso 2: configurar el servicio de proxy Flask en Amazon EC2

Inicie sesión en la instancia de Amazon EC2 utilizando el ID de instancia del paso 1. Utilice el Administrador de sesión de AWS Systems Manager para acceder a la instancia. Para obtener instrucciones detalladas, consulte la guía de conexión del Administrador de sesiones. Instale Python 3.13 y sus dependencias. Instale los paquetes de Python:

# Cambiar al usuario root sudo su – cd /root # Instalar Python y sus dependencias chmod +x install_python13.sh ./install_python13.sh

Nota: este script funciona en sistemas basados ​​en Ubuntu. Para otras distribuciones de Linux, verifique que Python 3.12+, PIP3 y Virtualenv estén instalados utilizando el administrador de paquetes de su sistema.

Instale e inicie el servicio de proxy MLflow:

chmod +x setup_mlflow_proxy_app.sh ./setup_mlflow_proxy_app.sh

Verifique el estado del servicio de proxy de Flask MLflow:

estado systemctl mlflowproxy

Si el servicio no se está ejecutando, verifique los registros con lo siguiente.

diarioctl -u mlflowproxy

Paso 3: validar la implementación

Esta sección demuestra cómo interactuar con las API REST de MLflow a través de ALB. Estos ejemplos utilizan el protocolo HTTP (no seguro) y, para entornos de producción, se recomienda HTTPS. Los siguientes ejemplos utilizan la herramienta curl para realizar solicitudes de API, pero también puede utilizar una herramienta como Postman o equivalente.

Abra la URL de ALB que anotó en el Paso 1 en su navegador. También puede recuperarlo desde la salida de la pila de AWS CloudFormation:

aws cloudformation describe-stacks –stack-name sagemaker-infra-flaskapp –query 'Stacks[0].Outputs[?OutputKey==`ALBUrl`].OutputValue' –texto de salida

Abra la URL de ALB en su navegador en http:///. Se le redirigirá automáticamente a /app, donde el panel de React muestra la interfaz de usuario de MLflow integrada en un iframe, como se muestra en la siguiente figura. Panel de React en la URL de ALB con la interfaz de usuario de seguimiento del experimento de SageMaker AI MLflow Apps integrada en un iframe Verifique el punto final de salud:

Esto debería devolver {"status": "healthy"}.

Pruebe el seguimiento de experimentos de MLflow a través de la API REST. Cree un experimento. Utilice la API REST de MLflow a través de ALB para crear un nuevo experimento. Anote el ID del experimento de la respuesta.

curl -X POST http:///api/2.0/mlflow/experiments/create -H "Tipo de contenido: aplicación/json" -d '{"nombre": "mi-primer-experimento"}'

Cree y registre una ejecución. Cree una ejecución en el experimento y registre métricas y parámetros.

curl -X POST http:///api/2.0/mlflow/runs/create -H "Tipo de contenido: aplicación/json" -d '{"experiment_id": "", "run_name": "training-run-1"}' curl -X POST http:///api/2.0/mlflow/runs/log-parameter -H "Tipo de contenido: aplicación/json" -d '{"run_id": "", "clave": "tasa_de_aprendizaje", "valor": "0.01"}' curl -X POST http:///api/2.0/mlflow/runs/log-metric -H "Tipo de contenido: aplicación/json" -d '{"run_id": "", "clave": "precisión", "valor": 0,95, "marca de tiempo": 1700000000000, "paso": 1}'

Verifique la ejecución en el panel de React. Actualice el panel de React en su navegador en http:///app. La interfaz de usuario de MLflow ahora muestra el experimento, las ejecuciones, las métricas y los parámetros que creó en los pasos anteriores, como se muestra en la siguiente figura. Interfaz de usuario de MLflow en el panel de React que muestra el nuevo experimento, la ejecución, los parámetros registrados y las métricas creadas a través de la API REST

Limpiar

Para evitar cargos continuos y eliminar los recursos creados por esta solución, siga estos pasos de limpieza:

Ejecute el script de limpieza desde la raíz del proyecto.

Este script derriba los recursos implementados en orden de dependencia inverso. Comienza destruyendo la pila de aplicaciones Flask, luego elimina la aplicación MLflow sin servidor a través de la CLI de AWS y espera a que finalice la eliminación. Después de eso, elimina los recursos de MLflow, el dominio de Amazon SageMaker y las pilas de redes. La pila de redes incluye un recurso personalizado respaldado por AWS Lambda. Limpia automáticamente los sistemas de archivos de Amazon Elastic File System (Amazon EFS), las interfaces de red huérfanas y los grupos de seguridad creados por Amazon SageMaker AI antes de eliminar la VPC.

Limpieza manual de recursos. El depósito de Amazon S3 de artefactos de MLflow tiene una política de eliminación RETAIN y debe eliminarse manualmente si ya no es necesario. Para obtener instrucciones detalladas, consulte Eliminación de un depósito de uso general en la Guía del usuario de Amazon S3.

Detalles de la pila CDK

La solución implementa cuatro pilas de CDK, cada una responsable de una capa distinta de la arquitectura.

Pila de redes

Esta pila crea la VPC y los componentes de red asociados, incluidas subredes públicas y privadas, tablas de rutas y grupos de seguridad. Proporciona la base de la red de la que dependen todas las demás pilas.

Pila de dominios de IA de SageMaker

Esta pila configura el dominio de IA de Amazon SageMaker, que sirve como contenedor organizativo para los recursos de SageMaker. El dominio proporciona la identidad y el contexto de acceso necesarios para la aplicación MLflow.

Pila de flujo de SageMaker ML

Esta pila implementa la aplicación MLflow sin servidor dentro del dominio de SageMaker AI que almacena experimentos, ejecuciones, métricas y datos de registro de modelos.

Pila de aplicaciones de matraz

Esta pila implementa el servicio de proxy inverso Flask en una instancia Amazon EC2 detrás de un ALB. Maneja la autenticación SigV4 y sirve al portal front-end de React.

Próximos pasos

Después de implementar el portal, considere ampliarlo con estos casos de uso:

Al implementar esta solución en un entorno de producción, considere implementar estas medidas de seguridad adicionales:

Configure la supervisión de Amazon CloudWatch para que el servicio de proxy basado en Flask realice un seguimiento del estado de las aplicaciones, detecte anomalías y configure alertas para actividades sospechosas. Para obtener más información, consulte Monitorear sus instancias usando CloudWatch y Crear una alarma de CloudWatch basada en la detección de anomalías. Implemente una limitación de velocidad para el servicio de proxy basado en Flask para proteger contra posibles ataques de denegación de servicio (DoS) y controlar la cantidad de solicitudes de clientes individuales. Puede utilizar AWS WAF junto con Application Load Balancer para implementar reglas basadas en tasas. Habilite la terminación HTTPS en el nivel del balanceador de carga de aplicaciones para admitir una comunicación segura entre los clientes y su aplicación. Puede utilizar ACM para aprovisionar y administrar certificados SSL/TLS para su aplicación. Para obtener instrucciones sobre cómo configurar escuchas HTTPS, consulte la documentación de escuchas HTTPS de Application Load Balancer.

Conclusión

En esta publicación, aprendió cómo crear un panel basado en React con la interfaz de usuario de las aplicaciones Amazon SageMaker AI MLflow integrada mediante iframe, respaldada por un proxy inverso de Flask que maneja la autenticación SigV4. Esta solución ayuda a los equipos de infraestructura de ML a brindar acceso persistente y marcable a la experiencia completa de seguimiento de experimentos de MLflow a través de un portal personalizado que se integra con la infraestructura organizacional existente.

Con este enfoque, su equipo obtiene una URL persistente y que se puede marcar como favorita para el seguimiento de experimentos de MLflow sin URL prefirmadas, junto con integración directa en portales internos existentes protegidos por SSO. Los usuarios obtienen la experiencia completa de la interfaz de usuario de MLflow, incluida la comparación de ejecuciones, la visualización de métricas y el registro de modelos, mientras que los administradores se benefician de una sobrecarga operativa reducida al eliminar el acceso a la consola por usuario. Toda la solución se implementa como infraestructura como código con aprovisionamiento y limpieza automatizados. Para comenzar, clone el repositorio de muestra e implemente la pila en su cuenta de AWS.

Sobre los autores

Manish Garg

Manish Garg

Manish es consultor principal de AWS Professional Services y se especializa en migrar y modernizar cargas de trabajo de clientes en AWS. Posee un profundo entusiasmo por la tecnología, junto con un gran interés en el ámbito de las prácticas de DevOps.

Ram Yennapusa

Ram Yennapusa

Ram es consultor senior de entrega en Amazon Web Services (AWS). Trabaja con clientes empresariales para diseñar e implementar soluciones basadas en la nube a escala, con especial atención en DevOps y MLOps. Ram tiene más de 15 años de experiencia en desarrollo de software y arquitectura de nube, ayudando a las organizaciones a recorrer su viaje de transformación de la nube. Ayuda a los clientes a crear soluciones eficientes, seguras y escalables en AWS.

Ashish Bhatt

Ashish Bhatt

Ashish es consultor senior de entrega de AWS Professional Services y se especializa en diseñar y crear soluciones para cargas de trabajo de clientes en AWS. Aporta una profunda experiencia en DevOps, MLOps e ingeniería de infraestructura con un enfoque en la construcción de infraestructura escalable y el empoderamiento de los equipos de desarrollo a través de prácticas de ingeniería modernas.