Loading video player...
Hola a todos y gracias por unirse a
nuestra sesión en vivo de hoy. Antes de
empezarte información rápida que
compartir, por favor tómase un momento
para leer nuestro código de conducta.
Buscamos promover un ambiente respetuoso
tanto para nuestra audiencia como para
los presentadores. Le pedimos que sea
cuidadoso con sus comentarios, que se
mantenga profesional y centrada en el
tema. Estén atentos al chat. Le
compartiremos enlaces útiles y
revisaremos las preguntas que nuestro
presentador podrá responder al final de
la sesión. La sesión se está grabando y
estará disponible para verla en 48 horas
aquí en nuestro canal de YouTube.
Ahora le cedo la palabra a nuestro
presentador de hoy. Muchas gracias por
acompañarnos.
Hola, hola gente, ¿qué tal? ¿Qué tal?
Saludos Colombia, Perú, Cuba, Argentina,
Venezuela México
Ecuador, mi bello Ecuador.
A ver, qué genial. ¿Cómo están?
Hoy día nuevamente con una clase de
Python más MCP.
Saludos Chile obviamente
hoy con la segunda clase hablando de
cómo podemos desplegar nuestros
servidores a la nube. Ayer vimos
todo lo introductorio acerca de MCP
Servers. Hoy día vamos a ver cómo
podemos tomar esos mismos servidores y
desplegarlo a la nube y mañana veremos
autenticación.
Okay genial.
Ah, saludos. Les saluda a Genez Peña y
Wenza. Me pueden decir Gen, soy Python
Cloud AVC aquí y si es que quieren
conectarse conmigo, ahí está mi LinkedIn
diapositivas para e la sesión del día de
hoy lo pueden encontrar en este enlace
de aquí, pero también tenemos un enlace
con una tablita que tiene todos los
recursos del serie completa que les
vamos a pasar también. Okay,
genial.
Y bueno, agenda para el día de hoy.
Tenemos opciones para despegue la nube.
Vamos a hablar de cómo crear estos
servidores dentro de contenedores.
Vamos a utilizar Azure Container Apps
para este ejemplo. Vamos a de ahí vamos
a hablar un poquito más de una cosa que
se llama como observability
y ahí todo acerca de redes privadas
utilizando Azure Virtual Networks
para nuestros servidores y porque hoy
día va a ser una clase
llena en cuanto a material. Tenemos
nuestras horas de oficina
después de la sesión. termina la sesión
y nos vamos a Discord y ahí nos pasamos
una media hora, hora por ahí
respondiendo a las preguntas que ustedes
tengan acerca de la sesión y para eso
pueden entrar este enlace de aquí y
vamos a poder responder todas las
preguntas. Okay,
genial. Ah, para el la sesión de hoy es
el mismo repositorio de la sesión de
ayer, pero porque vamos a hacer el
despliegue a Azer si necesitan una
cuenta en Azer. Si es que no tienen una
cuenta, pueden irse a este enlace y
pueden activar lo que se conoce como un
free trial, pero recuerden que hay
límites ahí, pero todo lo que tenemos en
el repositorio debería funcionar dentro
de una cuenta de de free trial. Si es
que encuentran algún problema, por favor
nos avisan en el Discord para nosotros
ir revisar qué es lo que pasa, porque
obviamente queremos que todos ustedes
puedan jugar con estos demos, ¿no?
Ah, y obviamente tengan en cuenta que
cualquier despliegue a la nube va a
tener algún costo, pero tenemos todas
las instrucciones para que puedan
desplegar y después eliminar todo. Así
que no va a ser $1,000 ni nada de eso.
Por ahí a lo mejor un par de dólares.
Okay, empezamos con el primer ah topic
que tenemos aquí, Cloud Depoyment.
Ah, un resumen de lo que vimos ayer,
¿no? Recuerden que para tener una
una arquitectura de MCP,
tenemos algunos algunas partes aquí,
¿verdad? Tenemos nuestro MCP host, que
en el en el caso de ayer era Code, pero
hay muchas opciones para eso, ¿no?
Dentro del hostes lo que se conoce como
el cliente y eso en nuestro caso fue
Gearhub Copilot, pero eso también puede
ser cloud desktop, puede ser chat GPT y
lo que sea, ¿no?
De ahí tenemos lo que se conoce como MCP
Server, que es lo que estamos ayer, lo
que vimos, lo básico, hoy día vamos a
desplegarlo, ¿no? Y el MCP Server como
componentes tiene tools, promps y
resources. ¿Okay?
También recuerden que tenemos dos
opciones para transportes, o sea, a
través de qué mecanismo podemos acceder,
conectarnos al servidor. Tenemos stdio
y también HTTP, también conocido como
streamable.
SDIO funciona genial de manera local,
pero si lo vamos a desplegar y
necesitamos comunicación
en la nube, en nuestros componentes en
la nube o de la una manera pública, por
ejemplo, de nuestra máquina a una un
servidor, un contenedor o algo en Azer o
en o en otra nube, tenemos que utilizar
HTTP. Okay.
Y vimos algunos ejemplos de ahí, ¿no es
cierto? Vemos aquí que cuando usamos MCP
a través de HTTP, tenemos nuestro
cliente de aquí que hace una llamada, un
end point de MCP, ¿verdad? Con esta
información, este esquema de aquí al
servidor. Y en este caso, por ejemplo,
hemos hemos llamado la herramienta de Ad
expense. Recuerden que el ejemplo de
ayer estábamos agregando gastos, ¿no es
cierto?
Y en acá es la categoría comida, la
descripción sushi, ¿verdad? Y parece que
en este caso hemos gastado $200 en esa
comida. Vaya. Y bueno, mandamos eso al
al servidor y el servidor nos retorna
esta respuesta en Jason que dice
successfully added expense, ¿verdad? Que
ha logrado agregar el gasto a nuestra
base de datos.
Así es como funciona esto, ¿no?
Y recuerden que para crear y pues para
correr lo que necesitamos son par de
bueno, obviamente necesitamos el código
de las herramientas y todo eso, pero en
sí para configurar el la el servidor
usamos a Fast MCP, ¿verdad? Y también
utilizamos una app que se llama ASGI.
Ah, que funciona a través de algo que se
conoce como Starlet y son estas líneas
de Kino.
Y para ejecutar esto a lo mejor sí has
trabajado con otras aplicaciones de
Python.
Con otras aplicaciones de Python conocen
el comando de Ubicorn
y lo normal. Ahí Ubicorn se utiliza para
poder correr la aplicación.
Por lo general cuando está desplegado en
la nube.
Okay.
En cuanto a opciones para desplegar en
Azure, tenemos algunas. Estas son las
cuatro principales: Azure Functions,
Azure App Service, Azure Container Apps
y Azure Cubernetics Service. De aquí
ustedes se tienen que
que preguntar
que es
la lo que les conviene a ustedes, ¿no es
cierto?
tenemos más control y más flexibilidad
mientras más al lado derecho de esta de
este diagrama vamos. Pero eso también
obviamente incluye más operaciones,
más cosas que actualizar,
que configurar y todo eso, ¿no es
cierto?
Y no es que uno sea mejor que el otro,
es más lo que les conviene a ustedes, lo
que tienen que hacer, ¿no?
Para correr en Wer Functions necesitan
un archivo que se conoce como
pipproject.
El código del servidor, que en este caso
puede ser el servidor punp, que es el
código Python, ¿verdad? Y un
host.jonjason, Jason, que son
configuraciones
del la plataforma de Azure Functions
para App Service bastante similar, solo
que no nos ah pide un host.jonjason
en container apps. Esto ya como que va
subiendo un poco la complejidad aquí
porque necesitamos el pproject.
que en ese archivo ya les voy a mostrar,
pero es donde ponemos configuraciones
del proyecto,
dependencias y todo eso,
el código del servidor y también un
Docker file. ¿Tienen conocen Docker?
¿Han trabajado con Docker?
Ah, si es que tienen experiencia con
docker, con contenedores, conocen lo que
es un Docker file, ¿no? Y ahí lo más
complejo, pero con más control es Azure
Cubernetes Service, pero esto requiere
de un Docker file y un Docker Compose
porque hay más que un contenedor, ¿no?
Bueno, siguiendo aquí,
si Docker es señal,
es
lo de DevOps es un tema muy interesante.
Mi experiencia es más en operaciones
y ingeniería en la nube.
Es más, este último año en la cual me
estoy metiendo más y más en Python, pero
no sé, me canso de ver, [risas] me canso
de ver y Amaz y todo eso. Bueno,
un un Docker files de lo más sencillo
para desplegar un servidor de MCP a
cualquier nube, pero en nuestro ejemplo
usamos as no sería algo así.
Nuevamente, si tienen experiencia con
Docker, esto va a ser muy muy sencillo,
¿no es cierto? Necesitamos la imagen,
que en este caso sería un Python a 3.3
Slim. Necesitamos en dónde se encuentra
los archivos del proyecto.
Ahí necesitamos cómo instalar las
dependencias del proyecto y para eso
están estos comandos de aquí.
Y ahí necesitamos copiar ese proyecto al
directorio del servidor.
Y en este caso, ¿ven? Porque estamos
utilizando el comando de UVCorn de
correr este código de aquí en este
puerto de aquí, en esta enlace de aquí,
tenemos que obviamente exponer ese
puerto también, ¿verdad?
Por ahí nos dicen cubernetis más docker
es igual a privacidad y multitency.
Obviamente mayor flexibilidad en
cambiarte de de
nube lo vas a encontrar si excusas algo
como Docker y Cubernetes,
pero también es más caro en todo el
sentido de la experiencia que necesita
tu equipo,
el tiempo que requiere de configurar.
Y todo eso, ¿no?
Para el ejemplo que tenemos en el
repositorio, estamos trabajando con
Azure Container Apps, que es por debajo
un una arquitectura de Cubnets,
pero tiene abstracciones que hace que la
configuración sea un poco más sencilla,
¿verdad?
Lo que tienes cuando le despliegas un
container apps es algo que se conoce
como un container apps environment, que
es como un límite
de un virtual network, de una de una red
virtual.
Y dentro de ese entorno container apps
environment tenemos un contenedor o más
que uno, ¿no? Y cada uno se conoce como
un container app, ¿verdad?
Y cada contenedor, cada container app
corre con una imagen desde un registry o
desde un registro, ¿verdad? En nuestro
caso vamos a usar Azure Container
Registry. Y las imágenes que se pueden
utilizar para sus contenedores pueden
ser de cualquier repositorio, bien sea
público o privado, solo depende de cómo
tengas registrado en tu registry,
¿verdad?
Ahora para nuestros ejemplos,
el
las el primer ejemplo
lo pueden ver, bueno, tenemos todas las
instrucciones en el RM, pero lo más
sencillo, los comandos más sencillos es
que vas a utilizar nuestra herramienta
que se conoce como ACD. han utilizado
EAS ACD o han utilizado
masteroform
o polumi con qué es lo que más usan para
para esto esto
infrastructure as code infraestructura
como código no es lo qué herramientas
usan para para eso me interesa saber
para a ver qué popular popularidad tiene
él esta herramienta de terraform Form
terformumi terform. Hay alguien que
utiliza ACD. Nunca he desplegado.
[risas]
Todo bien. Terform. Okay. Nada de
Cloudform. Okay. Cloudform es de AWS.
No,
nada de ACD. Bicep. Okay. Ahí va uno con
Bicep.
Okay. Bueno, en nuestro caso ECD es como
una herramienta de terraform, pero
Terform tiene otro lenguaje que utiliza,
no recuerdo exactamente cómo se llama.
Nosotros en ACD utilizamos
un lenguaje que se conoce como Bicep.
¿Has utilizado ACD solo para subir
contenedores? Okay. Parece que la
mayoría de gente
HCL. Genial.
HCL no es una marca de televisores.
Parece que sí. Eh, bueno, con estos
comandos podemos desplegar nuestro
entorno, ¿verdad? Les voy a mostrar
acá un poco más de lo que tenemos. Voy
acá,
¿no? TLC. TLC es la marca de
televisores ¿no?
Okay,
vamos a empezar en nuestra carpeta de
servers. En nuestra carpeta de servers
tenemos nuestro Docker file, ¿okay?
Y vimos ese ejemplo sencillo del Docker
file en la diapositiva,
pero obviamente para nuestra
configuración es un poquito más
complejo, pero no demasiado, ¿no?
Tenemos dos fases aquí, empezando con
esta primera de aquí. Lo primero es
simplemente
construir
el entorno, el contenedor, ¿no? Y eso
trata de obtener qué imagen vamos a
utilizar. Imagenes se puede conocer como
el sistema operativo más o menos del
contenedor. No es exactamente tu sistema
operativo, pero te trae herramientas que
vas a necesitar para crear tu entorno
ahí para tu proyecto. Entonces, en ese
sentido, para nosotros utilizar la
imagen de Python, porque vamos a
desplegar un servidor MCP
de Python, ¿verdad? Entonces, la imagen
de Python viene con obviamente lenguaje
de Python y más herramientas que nos
conviene ¿no?
Bueno, por aquí vamos copiando más ah
archivos y eso de nuestro
ah directorio, aplicación y todo eso,
¿no? Y para nosotros estamos utilizando
UV, la herramienta UV, que es una
herramienta que nos gusta mucho acá en
el equipo de Python y Microsoft.
UV nos permite
instalar dependencias, agregar, remover,
configurar muchas cosas, ¿no? Y aquí
vemos que nos dice
copyuv.lckproject.tel.
Si yo les muestro el pippo project.
Es este archivo de aquí
y acá hay un poco de información.
Primero hay información acerca del
proyecto en sí, versión, descripción,
qué versión de Python y todo eso. Pero
de ahí también tenemos una lista de
nuestras dependencias.
Si que trabajan con Python o a lo mejor
conocen un gran archivo que se que es
requirements.txt
y el pipject. El es más un estándar que
está más y más popular en yo creo que en
este año subió muchísimo de popularidad
y yo creo que la mayoría de proyectos
que son nuevos van trabajando con un
pippo project.
en vez de un requirements.txt
porque nos permite tener mucha mejor
configuración, información en nuestro
proyecto que un archivo que es
simplemente un punto txt, ¿no? Bueno,
tenemos nuestras dependencias y un poco
más de información de nuestras
dependency groups y también herramientas
que utilizamos para el código, para el
bienestar, digamos, para el formato y
todo eso.
Y y el log file permite tener
instalaciones o las versiones de
paquetes que hemos instalado o un
estatus, digamos, ¿no es cierto?
Por ejemplo, si ahora yo instalo
absolutamente todo, mi uvi.l va a decir,
este proyecto ahorita está utilizando
esta configuración y eso nos ayuda mucho
porque me puedo ir a otra máquina o
puedo compartir con mi colega,
simplemente hace un comando de UV Sync y
la misma configuración de los paquetes y
del proyecto y todo eso va a encontrarse
con mi colega.
Bueno, ahí la segunda fase aquí.
Saludos España. La segunda fase aquí es
simplemente
agregar permisos correctos y poner
nuestro código
en donde tiene que estar para que lo
pueda encontrar eh para correrlo,
exponer el puerto, ¿correcto? Y también
lo que estamos haciendo aquí es
corriendo después de que se se
monta el contenedor y todo eso, estamos
corriendo un script que se que se llama
aquí entrypoint.sho SH y eso es lo bueno
de utilizar Docker Files es que nos
permite
configurar mucho más que solo el
contenedor. También podemos decir
después de que se despliega el
contenedor, ¿qué es lo que queremos
hacer? En este caso estamos mandando
entry point y entry point corre después
de que se monte el contenedor y está
corriendo. En nuestro caso en el
entrypoint.sh SH. Lo único que va a
hacer es correr el
voy a quitar esto para que puedan ver.
Aquí
va a querer va a correr el el
ah, ¿cómo se llama?
el
el servidor. Ay, me quedo sin las
palabras, ¿no? Y van a ver por qué por
porque importa esto en un momento que lo
vemos, ¿verdad? Y esto en Azer, ah,
regresemos acá.
Esto en Ager nos crea algo como esto.
Bueno, tenemos algunas cosas. Estamos en
el público. Sí, vemos que tenemos
algunos recursos aquí, pero lo más
importante que nos conviene ver aquí es
este
eh container apps entorno. Tengo lo
tengo abierto por aquí. Sí, recuerden
que cuando creamos un container apps
tenemos un entorno y dentro del entorno
vive cada uno de nuestros ah
contenedores, ¿no? Y en nuestro caso
tenemos un contenedor. Voy hacer un zoom
aquí. Buen, tenemos algunos
contenedores. Tenemos el del servidor
que está aquí. Tenemos también un
agente. No tomen mucho en cuenta en este
es algo para el día de mañana, pero aquí
tenemos nuestro agente y nuestro
servidor ¿verdad?
Y si nos vamos al servidor, acá vamos a
tener
el
URL.
de es más, yo puedo copiar esto irme
acá,
pegarlo acá
y creo que vamos a ver, vamos a ver not
found aquí, pero si le agrego MCP, creo
que vamos a ver aquí un mensaje que nos
dice
que
porque no está aceptando porque estamos
mandando, bueno, estamos tratando de
acceder al MCP Server a través del
browser, que no es lo correcto, ¿no?
Pero lo importante es que está corriendo
el servidor,
¿okay? Y entonces copiando este mismo
URL podemos regresar a VS Code y voy a
cerar algunos de estos de aquí
y voy a abrir nuestro mcp.jonjon.
Ayer vimos que para trabajar con MCP
servers dentro de VS Code y poder
utilizarlos a través de Gearhub Cilot,
tenemos que agregar la configuración del
servidor dentro de nuestro archivo de
mcp.jonj.
Yo lo agregué de antemano y vemos aquí
que está corriendo, ¿no es cierto? Aquí
dice running y tenemos en este caso dos
herramientas y un prompt, ¿no es cierto?
Y acá lo único que que agregado es el
URL del contenedor, ¿no?
Para agregar esto hacen control shift P
mcp server y agregan el el URL de sus
contenedores ¿no?
Y en la diapositiva de aquí tenemos qué
es lo que tienen que configurar.
Perdónenme.
Cloud clock está ah, no sé por qué está
escondiendo eso. A ver si lo hago
grande. Bueno, primero les muestro eso y
regresemos acá. Ah, vamos acá. Okay.
Y lo que puedo hacer ahora es irme. Voy
a cerrarle. Bueno, no voy a irme acá. Me
voy a output porque acá nos muestra el
output del servidor.
Ah, voy a darle restart. Y acá nos dice
que, okay, ha descubierto las
herramientas. Perfecto.
Y dentro de Ghop Copile voy a
seleccionar otro modelo. Vámonos con
GPT5
y tengo que darle clic en este botón de
herramientas y me aseguro que esté
seleccionado mi servidor que se está
llamado aquí como expenses MCP HTTP
deploy. Perfecto. Este de aquí.
Recuerden, tienen que seleccionar el que
tenga el mismo nombre de cual lo
configuraron aquí. Okay.
Y de aquí simplemente mando mi pregunta,
¿no es cierto?
Ah, ayer no, antes de ayer. Ah, compré
ah compré
ah ¿qué?
Las merienda
de mi mamá.
Me costó
ah $5
y pagué en cash. Póngela ahí.
Me gusta mucho tratar de mandarlo
español
que no sea exacto lo que espera.
A ver si logra entender o no entender.
Okay. Ven aquí. Vean, ven aquí.
que
estuvo pensando en inglés y ahora
regresó en español. Acá nos dice aquí
ran add expenses. Ayer vimos que la
herramienta se llama add expenses, ¿no
es cierto? Y también está diciendo que
está llamando al MCP server que se llama
MCP
ah http deployed, que es lo correcto que
los lo que acabamos de configurar.
Perfecto. Y aquí nos dice, "Listo, ya
registré tu basto. Fecha el 15 antes de
ayer. Perfecto, porque es 17, merienda
para mi mamá. Método de pago en cash.
Ahora tenemos conectado esto a Cosmos
DB, que es una base de datos que tenemos
en la nube.
Y yo debería poder verlo acá.
Debería ver si es que funcionó o no.
Esos pizza.
Ah, a ver,
estamos en el correcto. Le doy refresh
todo.
Ah, laptop no lo food. O es la inversa o
aquí está.
[risas]
Lo tienen, no lo tienen acá abajo en vez
de tenerlo arriba, pero bueno, aquí
está, ¿no? Si le doy clic aquí,
creo que puedo quitarlo esto ahí.
Perfecto. Aquí ven que ha agregado
merienda para mi mamá. Va a hacerlo un
poco más en Aquí estamos dentro de Azure
Cosmos DV.
Perfecto. Entonces sabemos que está
funcionando eso.
Voy a hacerlo más grande acá de nuevo.
Acá. Entonces recuerden para poder
utilizar
el servidor que lo tienen en Azer en su
mcp.jonjon
lo agregan así. Lo único que tienen que
cambiar es que el URL sea el de su
contenedor, obviamente no de nuestro
contenedor.
Okay. Acá están diciendo que genial esto
es darle manos y pies al LLM.
Exactamente. Es una descripción
excelente de lo que es este protocolo
del MCP.
Es simplemente darle herramientas al
modelo para que el modelo tome la
decisión. Tiene como que una lista el
MCP server. Mira, tengo todo esto y el
modelo va y ve, okay, me conviene usar
esto, me conviene usar lo otro, ¿no?
Ah. Ah. Bueno, antes de antes de
pasarnos ahí quería mostrarles porque
hay otra
otra herramienta. Entonces, si yo le
puedo decir algo como
cuál fue mi mi
gasto
más caro,
debería llamar a la otra herramienta que
tenemos que se llama
Get Expenses CR.
A ver si es que lo llama de manera
correcta.
No, sí, no está. No está. No, no, no,
no, no está haciendo mal. Oh, no. Sí lo
hizo. [risas]
Pensé que pensé que iba a ir por el
revisando el código, pero sí, de ahí lo
llamó.
A ver, le voy a dar refresh. Ahí
se podría validar con Pidentic si falta
algún dato obligatorio como Sí, sí se
puede utilizar eso. Okay, entonces ahora
ven que está llamando la otra
herramienta, get expenses data,
antes solo llamó a expenses
y tu vaso más caro es de 100. Compra de
laptop.
Okay perfecto.
Genial. Regresamos acá, seguimos aquí.
Vamos adelante.
Ah, también tenemos un agente, ¿no?
Si nos vamos nuevamente a nuestro
entorno de container
apps,
ah, vámonos acá a nuestro container app,
nuestro entorno aquí.
Vieron que tenemos nuestro servidor,
¿verdad? Pero también tenemos nuestro
agente ¿cierto?
Y
agente es solo un en este caso un
cliente. Les muestro acá este de aquí.
Agents. Abrimos. Este de aquí
es un agente que hace lo mismo. Lo voy a
correr de manera la cual para que vean
cómo funciona esto.
Ah, se le click aquí le mando UV UV run.
Exacto. Ese de aquí.
Este código también lo vimos ayer.
Lo único que está haciendo es
conectándose a nuestro servidor de MCP a
través de este valor de MCP Server URL.
Y como hemos visto, tenemos
instrucciones para el
cliente, la gente que dice que nos
ayudas a guardar nuestros gastos, ¿no es
cierto? Y también como más contexto
estamos mandando la fecha de hoy. Por
eso es que podemos decir cosas como
antes de ayer, ayer y cosas así, porque
también como contexto le mandamos la
fecha del día de hoy.
Y tenemos una consulta aquí que dice,
"Ayer compré una laptop de 100, por eso
es que nos retornó, bueno, tienes varias
entradas de una laptop y es porque hemos
estado probando eso, ¿no?
Y lo único que hacemos es cuando está en
producción le tenemos
ah como que despierta la gente, ¿verdad?
Y cuando lo corremos de manera local,
vieron que aquí tenemos esta salida y lo
ha podido agregar también.
Y también creo que si nos vamos al
MCP server, dentro del MCP Server,
bueno, del contenor, selecciona el MCP
server.
En el logstam, acá en el monitoreo
logstam, vemos que tenemos, por ejemplo,
ahí está la entrada del
del
laptop de 1200.
A ver, ¿qué más hay?
Lo puedo correr de nuevo.
Laptop de 12. Otra laptop de 1200 aquí.
Ah, ¿dónde está la merienda?
Estar por aquí. O a lo mejor nos
quedamos sin nos f.
Ah, vamos solo con la pasado hora.
Ah, está bien. Ahí
está demasiada.
Hay mucho informes aquí. Bueno, eso nos
ayuda ¿no?
Aquí está. Perfecto. Aquí está la de la
merienda para mi mamá. No,
ya. Genial.
Okay. Regresando acá. Vámonos acá.
Y bueno, pueden revisar más ese código
para ver cómo es que funciona. Es
bastante sencillo.
Y ese mismo Agent Framework HTTP lo
tenemos dentro de un contenedor y lo
llama al servidor.
Okay. Bueno, vimos un poco acerca de
observability, que es eso de ver de los
logs, las trazas y todo eso, pero vamos
a hablar un poco más.
En tenemos tres cosas que importan en
cuanto a obser observabilidad, ¿no?
Traces, matrics y logs.
Por lo general,
muchas herramientas que están saliendo
para trabajar con esto de MCP, trabajar
con modelos,
tratan de utilizar el el estándar que se
conoce como Open Telemetry.
Y es open telemetry es genial porque
estandariza cómo las aplicaciones emiten
traces, matrics y logs, haciendo que el
debuging y el análisis de performance
sean consistentes entre lenguajes y
vendes.
Esto es bueno porque ustedes configuran
que sus aplicaciones van emitir esta
información a través de Open Telemetry y
siguiendo las reglas y el formato de
Open Telemetry
y como que se van acostumbrando a cómo
se ve la información en una nube,
después lo desplegan en otra nube y a lo
mejor el UI se ve un poco diferente, los
colores, qué sé yo, pero en sí la
información lo van a ver lo mismo.
Traces se trata. Bueno, vemos acá un
diagrama genial, ¿no?
Traces son compuestas por spans. Span
significa como un un trozo de tiempo,
estos muestran como un request se mueve
entre servicios, incluyendo timing,
dependencias y propagación de contexto.
Y esto es genial porque tienen, por
ejemplo, 0 a 30 milisegundos. Y dentro
de esto, digamos que este ocupó 5
milisegundos y después corrió esto,
ocupó 7 mil segundos. Y van a ver muchos
ah muchos más pens de aquí que en total
suman esos 30 milisegundos, ¿no? De ahí
tenemos matrics,
que son mediciones numéricas como uso de
CPU, cantidad de respuestas, latencia.
Ah, qué tantos porcentaje de errores o
también pueden poner sus propias
métricas o las que les importa a
ustedes, ¿no? Estos son los porcentajes
y los números. Por ejemplo, CPU usage
30%.
Y de ahí tenemos logs y esos son texto,
cosas que mandan ahí un
print algo a la consola
en
en la nube cuando está desplegado. No
pueden hacer un print, pero pueden
utilizar un log y mandar el texto ahí. Y
para eso son los logs, ¿no? Son
registros estructurados con mensaje,
severidad, time stamp, que el fecha y
hora, ¿no? Y atributos de contexto.
Pueden agregar ahí al qué s yo, están
pasando a un valor y dicen, "Hemos
pasado este valor o hemos
convertido esto, bueno, lo que sea, ¿no?
Y también la información que manden,
obviamente depende de si es que están
tratando de hacer un debugging o está ya
en producción, a lo mejor si su
aplicación se encuentra en más como
estatus de de debugging, están mandando
más información, más metrix y todo eso,
pero cuando lo tienen desplegado,
recuerden que toda esa información se
tiene que guardar en algún lugar y les
va a costar eso. Entonces es un balance
de cuánta información mandan, cuánto se
va a almacenar. Tampoco es que no
quieren mandar absolutamente nada porque
necesitan eso para saber si las cosas
están corriendo correcto, si es que les
falta algo, si algo está de más y si es
que mandan demasiado,
eso consume recursos en sus
contenedores, consume más tiempo en los
requests a sus usuarios y todo eso, ¿no?
Es un balance, no es una arte.
Okay, empezando con traces, ¿qué es lo
que queremos ver en los traces? Para
nuestro ejemplo, tenemos tres cositas
aquí. Primero es los HTTP route requests
que vienen de startup.
Esto nos importa porque queremos saber
información acerca de hemos llegado este
end point, errores ahí, todo eso, ¿no?
Esas llamadas y ahí queremos de fast
mcpast MCP tiene la información de los
tools, los resources y los proms.
Cuando dice ahí hemos agregado esta este
gasto, eso viene gracias a FASM MCP, ¿no
es cierto? Y también queremos llamadas o
la llamada aquí al Azure SDK porque
tenemos dependencias a Azure SDK como
Cosmos DB, que es la base de datos donde
se está guardando las los gastos y
queremos a lo mejor poder ver si ha
agregado este gasto en Casmos DV o
tuvimos algún error conectándonos a
Casmos DV, algo así, ¿no? Entonces, en
nuestra aplicación, esto es lo que nos
importa a nosotros, información a nivel
de HTTP,
información al nivel del MCP Server con
Fast MCP y también información al nivel
de las dependencias de Azure a través de
Azure SDK. Eso también puede incluir
al
conectándose al al a cualquier cosa de
de Azer Keyb, lo que sea. En nuestro
caso es cosmino
para acceder al a la información que nos
manda Starlet
es algo aquí que tiene en el
deploy-mp.p.
Creamos la aplicación de MCP con la
misma línea que vimos el día de ayer que
nos otorga fast MCP. Y lo único que le
agregamos es este instrumentor de
Starlet.
Ah, y lo agregamos a la aplicación, ¿no?
Y de ahí ya vamos a ver un ejemplo de
esto. En, por ejemplo, este spam de post
nos dan la información ahí.
Ya les muestro esto.
Y ahí para fast MCP, Pamala tuvo que
crear una funcionalidad aquí custom para
nuestra aplicación. Lo pueden ver en el
código, obviamente, y está dentro de un
archivo Open Telemetry-middleware.p.
Y es esta clase de aquí que expone esa
información a través de el estándar de
Open Telemetry. Y esto lo nos lo que nos
permite
ver, por ejemplo, el nombre de la
herramienta operación
argumentos
y ah metodologo. Aquí no.
Algo más que tener en cuenta es que Open
Telemetry está creando como un un
estándar de lo que debería exponer
aplicaciones de inteligencia artificial
generativa.
Por eso ven aquí el Gen- B AI. Gen- B AI
es un estándar. Por ejemplo,
aplicaciones estándares de web deberían
emitir cierta información.
Ahora, como vamos con esta nueva
evolución de aplicaciones,
nos importa saber información de
diferentes tipos. Entonces, ellos están
creando un estándar y nosotros
simplemente implementamos ese estándar
ahí, ¿verdad? Okay. Y el otro nivel,
aquí usamos el paquete de Azure Core
Tracing Open Telemetry para poder
acceder a la información que nos permite
tener Azure SDK.
Y vamos a ver en el código en un momento
también que importamos aquí el uso de
este esta dependencia
y
asignamos de que el tracing
implementation vamos a utilizar open
telemetry, ¿verdad? Y esto nos permite
tener en ah información en este caso de
cosmos TV.
Ahora si estamos colectando toda esta
información, ¿en dónde lo podemos ver?
Bueno, y vimos ya un poquito de
Application Insights y acá tenemos una
una tabla aquí de de comparación, ¿no?
Az application insightes no es open
source, pero tienen la opción de ser un
managed version.
Data Dog es otra alternativa New Relic.
También
han
han trabajado con alguna de estas
plataformas. Yo creo que la más popular
el día de hoy en cuanto a estas
aplicaciones GenIi va a ser log
y
genial que sea open source y y también
tiene su managed version. Grafana
también es muy popular. Promitias creo
que ya creo que Grafana Promitias y
Lockfire en el mundo de Open Source son
los más populares, ¿no? Prominic
Application Insights. Perfecto. Bueno,
yo les voy a mostrar. Bueno,
pasamos por cómo colectar, qué se tiene
que colectar, cómo se puede colectar a
través código, paquetes y todo eso. Y
ahora, ¿cómo lo exportamos de
información para poder verlo en una de
estas plataformas? Para Azure App
Service
instalamos la dependencia de Azure
Monitor Open Telemetry
y de ahí desde esa dependencia
utilizamos una funcionalidad que ellos
tienen configure Azure monitor y con tal
de que tengamos el connection string,
que es como nos conectamos la llave,
podríamos decir
a nuestra instancia en la nube, aquí
está nuestra llave para application
insights. Y si llamamos la la
funcionalidad de configure Azure Monitor
se encarga de obtener toda la
información. Se puede hacer
configuraciones más complejas que tienen
que cambiar, configurar algo, pueden
hacerlo. Pero para lo básico y para
empezar diríamos que empiecen utilizando
esta funcionalidad,
¿okay? Y les muestro
si nos vamos a, tengo algunos abiertos
aquí. Okay, aquí por ejemplo, aquí estoy
dentro de Azure Application Insights,
¿verdad? Y vemos aquí que tenemos
algunas llamadas.
Voy a hacer el zoom aquí. Primero
tenemos nuestro post, ¿verdad?, al
endpint MCP
y acá nos dice MCP HTTP receive, ¿no es
cierto?
También tenemos aquí nuestra llamada add
expense, el execute tool, ¿verdad?
Y acá también tenemos nuestras llamadas
a CMOS DV. Se cortó aquí un poquito,
pero es un post, ¿no es cierto?
Y todo esto está dentro de, a ver,
dentro de un West, nos vamos acá. Si lo
voy así, lo voy así. Esto es un spam.
Ah, lo muevo más acá y lo muevo más acá
para dar espacio. No, no puedo mover
esto. Oh, puedo moverlo así. Okay. Ven,
dentro de nuestra llamada de post a MCP,
¿no es cierto? ¿Qué ha pasado? Bueno,
primero ha pasado esto, después ha
pasado esto y dentro de esta llamada,
¿qué ha pasado? Ha pasado todo esto. Y
entonces cuando dan clic a cada uno de
estos, van a ver más información.
y doy clic en este, doy clic en este y
vemos aquí que tenemos esa información,
¿no?
Tenemos nuestro to call con la
información. Esto hecho, esto fue de la
sesión del día de hoy, pero en la mañana
en inglés que
vamos a agregar el gasto de avocado
toast en SF por $30, ¿no? Y bueno, esto
les ayudado a ustedes ver, okay, aquí
entra la llamada, ¿okay? ¿Qué ha pasado?
Funciona ahí. Okay. Exit tool. ¿Que ha
pasado? Que ha entrado ahí. Perfecto.
Ahí vamos acá. Cosmos DV. Okay. Está
llamando a create item. Y bueno, ahí
tenemos más información, ¿no?
Un poco [risas]
ah, un poco caro, ¿no? Sí, sí. Pues no.
A ver.
Okay. Estaba revisando ahí un mensaje
que me entró. Okay, regresemos acá
porque quiero mostrarles, ¿qué les iba a
mostrar?
Ah,
el código aquí si nos vamos
seremos este.
Ah, deployed MCP. Tenemos aquí todo lo
que les acabo de mostrar, ¿no?
Tenemos el la línea ahí de para
exportarlo. Application insights, ¿no es
cierto? Para obtener información de
HTTP. Starlet está ahí
y obviamente Fast MCP está ahí también.
Si nos vamos para abajo tenemos un
montón de configuración,
no tanto, si da solo 197.
Creamos MCP aquí. y agregamos
el start instrumentor, por cierto, para
obtener esa información
y a través de la vamos a la
MCP Tool.
Ah, okay. Yo sé lo que está haciendo
aquí.
Nos vamos acá. Perfecto. Esta línea de
aquí
creamos nuestro fast MCP aplicación,
¿no? Nuestro servidor. Y como middleware
estamos agregando el open telemetry
middleware con la con el nombre de
expenses MCP. Y si le abro esto, les
muestro cómo funciona eso. Open
telemetry MWare.
Vámonos acá.
Esto fue de la sesión de ayer para
obtener información de manera local.
Y aquí está nuestra información donde
bueno, nuestro código que manda la
información de las operaciones de MCP,
¿verdad?
Ah, y por ejemplo, acá estamos un call
tool, como llamamos una herramienta,
pasa toda esa información. Ven, vemos
aquí que tenemos las configuraciones de
set attribute, set, si es que hay error,
tenemos que mandarle, obviamente error.
Y bueno, vayan revisando eso que que es
algo que que ha creado Pela que está muy
genial.
Ah, vimos eso ya aquí. Ahí tenemos solo
10 minutos. Okay. También hay otra
plataforma que se llama Logfire y
Logfire está muy muy muy popular. Han
trabajado con han trabajado con Logfire.
Los aguacates cuestan mucho enf Sí, han
trabajado con Loogfire. Es una una
herramienta creo que salió al comienzo
del año por ahí.
Viene del equipo de Pantic que
obviamente creado Pentic Pidentic AI y
ahora creado final.
Es un una proyecto que está chévere, les
recomiendo que revisen.
Bueno, para usar log hay que obviamente
importar logarnos
que en el punto inf
ah tenemos un log token porque tienen
que configurar su proyecto log para
poder accederlo, ¿no?
Y si es que está el token en el punto
enfren. Llamar logfire.concfigure.
configure el nombre del servicio y send
to lo log fire true. Si no estás usando
app Insights, puedes quitarlo el Open
Telemetry Millowware y usar simplemente
lockfire configure
BMCP en su lugar. Si es que no te
interesa utilizar App Insights para
nada, pues bueno, quitar eso, pero nos
gusta dar opciones, entonces por eso
hemos puesto opciones para de manera
local
aspire. que vimos ayer y en la nube,
bien sea logición, digamos, bien sea
lockfire o bien sea app, ¿no? Y la fir
se ve así
si lo habilitas tienes tienes que crear
un proyecto, lo habilitas obviamente y
te entra la información acá que me
parece un poquito más bonito en mi
opinión, yo creo un poquito más bonito.
Ah, pero depende de dónde quieres tener
tu información. Obviamente elfire para
tenerlo hosted, así como tenemos
application insights dentro del portal
de Azure, tiene un costo.
Ah, pero yo creo que si es que no tienen
muchísima información, no va a ser algo
tan grande, ¿no? Okay, genial.
Ah, lo último para hablar ahora es el
networking privado para servidores de
MCP, porque obviamente
este MCP serve de ahora ustedes pueden
acceder utilizando el URL porque no
tenemos nada,
ninguna off, que es lo que vamos a ver
mañana, ¿no es cierto? Está todo público
y los riesgos de las redes públicas.
El 84% de las rutas de ataque incluyen
la exposición al internet.
A lo mejor tú dices, "Ah, nadie va a
encontrar mi URL." No,
no es así.
Y esto viene de acá de 2024 state of
multioud security risk que hemos hecho.
Es adecuado utilizar networking privado
para sus aplicaciones es una buena
opción. Sí, tus servidores MCP solo
necesitan acceso por empleados de manera
interno, eh, bien sea que trabajan de
alguna manera una red interna a través
de un VPN o a lo mejor físicamente si
tienen que enchufar a la red o lo que
sea, ¿no? Entonces ahí les conviene,
¿no?
Si es que tus servidores
solo necesitan ser accedidos por agentes
de AI internos también que sean con red
privada. Solo deberían ser públicos tus
servidores si es que necesitan. Si es
que no necesitan, les conviene
tener los privados. Para eso tenemos
algunas herramientas. Lo más importante
aquí en la imagen,
tienes tu red virtual que es es Azure
Virtual Network o Azer Vnet en Azure,
¿no es cierto? Y bueno, para los que son
ingenieros en redes, ingenieros en
networking, conocen esto, ¿no? Tenemos
que dividir esa red en subnets, ¿no es
cierto? Entonces, tenemos nuestro subnet
aquí, nuestro subnet acá. A nivel del
subnet, la primera seguridad, la primera
puerta, digamos, es el NSG o el Network
Security Group, que tiene reglas de qué
puede acceder, que puede salir, ¿no es
cierto?
Y dentro de en nuestro subnet también
tenemos nuestro entorno de los
contenedores del container app
environments y dentro del entorno
obviamente tenemos nuestro contenedor.
Accedemos a nuestros recursos en Azure,
en el otro subnet a través de private
links 1, dos, 3 y cu dependiendo de las
dependencias ¿no?
Uno a Casmos DV, uno a Container
Registry, otro a Azure Open AI, ¿no?
Entonces, una topología aquí sencilla
de de una red. Creo que también si vamos
a
acá tenemos un ejemplo en Asure les
muestra si van al a la red virtual y dan
click les muestra aquí, pero está un
poco un poco poco más confuso verlo aquí
no tenemos algunas cosas aquí. El
diagrama que tenemos acá en las
diapositivas está mejor.
Si es que quieren usar nuestro ejemplo
de infraestructura arquitectura privado
con con redes privadas, igual tienen que
utilizar ACD
y tenemos una variable que es es use
VNET, lo ponen true y también use
private ingress como true y de ahí lo le
despegan con ECD app. se le configura
todos eso, ¿no?
Para asegurarnos de que
realmente es privado, lo primero que
tenemos que hacer es irnos al tengo
abierto. Aquí estoy en mi recurso,
mi research group de privado, lo pueden
ver aquí. Esto es el privado, ¿no? No es
el público, ¿no? Y estoy dentro de del
entorno de container apps, ¿verdad? Acá
tengo mis contenedores, ya les muestro,
pero doy clic acá dentro de settings,
doy clic en networking y ven que acá
dice que public network access
disabled, entonces no tenemos acceso
público,
que es exactamente lo que queremos aquí,
¿no es cierto? Y obviamente dentro de
nuestras aplicaciones acá dentro de
nuestro entorno, dentro de nuestra red
virtual tenemos
nuestros contenedores. Perfecto, ¿no?
Y ustedes se preguntarán, bueno, les
muestro aquí,
acá. Okay, revisan, no tienen acceso,
¿ven eso?
Y
bueno, no podemos verlo esto ahora
porque el la gente corre al comienzo de
la que lanzamos el despliegue, ¿no? Pero
solo la gente tiene acceso. Nosotros no
podemos acceder acceder a a eso.
En producción ustedes a lo mejor van a
tener llamadas, cada van a tener como
un, ¿cómo se llama esto?
un crown job que llama cada hora o cada
6 horas a la gente que vaya y haga su
trabajo o lo que sea. Todo depende, ¿no?
No es que van a tener que manualmente
invocarla, ¿no? O que cada despliegue lo
llame. Bueno, a lo mejor les conviene
eso, pero hay mejores opciones, ¿no?
Bueno, para los últimos 3 minutos les
dije que estábamos a full con la sesión
del día de hoy. Tenemos el AI Travel
Agents, que es un otro repositorio con
mucho más ejemplos, configuración
y más lenguajes, no es solo Python.
Pueden ir a revisar eso acá abajo en
este enlace de aquí.
Está muy genial como trabaje, es muy
complejo ¿no?
Si es que quieren trabajar con Azure
Functions, con arquitectura serverless,
tenemos algunos ejemplos ahí. El el de
aquí ah les da como self hosted ah si es
que quieres crear tu propio MCP en Azure
Functions o si no puedes utilizar los
Azure Functions MCP bindings.
Ah, que parecen algo así, ¿no? También
tenemos otro ejemplo, weather app con
para chat GPT, lo pueden encontrar acá.
Esto es con Azure Functions. Saludos al
colega Anthony Chu que ha creado esto de
aquí.
Ah, as service. Para esto necesitas tú
doercompos.yamal, Yamal, ¿no? Donde
defines tú, en este caso servidor aquí,
agentes aquí
y tenemos a este eh Agentic Shop en en
Recuvern Service. Esto lo pueden
encontrar acá abajo. Funciona. Creo que
lo tengo abierto. Esto es genial porque
es un servicio que es como una tienda,
una tienda donde haces compras, ¿no?
Pero tenemos aquí en en la página de de
uno que va administrando los productos y
todo eso, tenemos un agente que llama al
clima a ver qué tal
va a llover o lo que sea, ¿no? Tenemos
información acerca de los productos más
populares que se han vendido en los
últimos 21 días y también tenemos
eventos que va a pasar otra gente que
hace eso y hay otra gente que recolecta
toda la información y lo lo muestra
aquí. Esto está llamando un MCP server.
También tenemos un agente que hace stock
restocking o de de ver qué inventorio
falta y agregar eso, ¿no?
Vemos aquí que bueno, esto corrió
bastante rápido aquí.
5 segundos dice que que tenemos stock
agent prioritization y summarizer y esto
se conectan a algunos MCP servers para
ahí decirnos deberías comprar o deberías
agregar el inventorio para estos
productos y bueno, todo eso
y eso lo pueden encontrar
a quien esté enlace de acá.
Perfecto.
Okay, hemos terminado justo a las 7.
Vámonos ahora al Discord donde puedo
responder todas sus preguntas. Ah, creo
que Pala también va a estar ahí y el
enlace es este de aquí. Yo me desconecto
de aquí, me voy directo allá. Así que
todas sus preguntas, por favor, me los
me los hacen ahí.
Y mañana es la última clase de esta
serie y vamos a hablar de
authentication.
Ah, okay, perfecto. Nos vemos en horas
de oficina en Discord ahora mismo. Ya
les veo allá. Chao.
Gracias, Gen. Muchas gracias por la
sesión de hoy. Gracias a todos por
acompañarnos. Eh, antes de cerar la
sesión, siempre buscamos mejorar las
sesiones y tu experiencia en Vector. Si
tienes algún comentario, nos encantaría
saberlo. Puedes encontrar el enlace en
la encuesta en la pantalla o en el chat.
Nos vemos mañana en la próxima sesión.
En esta segunda sesión vamos a llevar servidores MCP a la nube. Empaquetamos un servidor FastMCP con Docker y lo desplegamos en Azure Container Apps. Luego veremos cómo correr FastMCP directo en Azure Functions. También veremos opciones de redes privadas para MCP, usando VNets para limitar acceso externo a herramientas y agentes internos. Todos los recursos de la serie: http://aka.ms/pythonmcp/recursos #learnconnectbuild #microsoftreactor [eventID:26546]