Preparación para la Certificación Microsoft AI-200
Azure Functions para IA: hospedaje, escalado, desencadenadores, enlaces, seguridad y MCP
Diseña back-ends de IA sin servidor con el plan de hospedaje adecuado, escalado independiente controlado por eventos, desarrollo local, patrones HTTP y de mensajería, configuración segura, identidades administradas y herramientas MCP.
Tiempo de estudio sugerido: 130 minutos • Nivel intermedio • Reescritura original completa con versión resumida de cada tema, evaluación comentada y laboratorio MCP guiado
Por João Ricardo Dutra••Contenido original completo
1. Escenario y objetivos de aprendizaje
Imagina una plataforma de documentos inteligente: una recibe un archivo, un servicio de IA extrae el texto, la solución clasifica el contenido y guarda el resultado. Las máquinas virtuales dimensionadas para el pico quedan inactivas y aun requieren parches y administración. sustituye esa capacidad fija por ejecución controlada por eventos, escalado automático y facturación según el plan.
Exponer una entrada de baja latencia.
Enviar el trabajo largo a un procesador activado por cola.
Usar enlaces para mover datos y cuando no haya enlace.
Proteger la configuración con , e .
Exponer operaciones concretas como herramientas MCP.
La entrada sincrónica y el trabajador asincrónico escalan por separado mientras la cola absorbe las ráfagas.
Resumen rápido
El objetivo es un back-end de IA seguro y ágil que separe la aceptación de la solicitud del procesamiento pesado.
2. Inicio en frío y su efecto ampliado por la IA
El inicio en frío ocurre cuando la plataforma asigna una instancia, inicia el host y el trabajador del lenguaje, carga la aplicación y prepara dependencias antes de la primera invocación. Puede suceder en cualquier plan que llegue a cero y se paga una vez por instancia nueva, no en cada solicitud.
grandes, bibliotecas de inferencia, , configuración, y grupos de conexiones aumentan el tiempo. Inicializa clientes reutilizables a nivel de módulo, reduce el paquete y mide por separado la latencia fría y la caliente.
Resumen rápido
El inicio en frío es por instancia; las dependencias pesadas lo amplían y las invocaciones calientes reutilizan el proceso.
3. Consumo flexible como opción predeterminada
Consumo flexible es el plan basado en Linux recomendado para nuevas aplicaciones de funciones . Incluye escalado por función, integración de red virtual, instancias de 512 MB, 2.048 MB o 4.096 MB y hasta 1.000 instancias bajo demanda. Usa 2.048 MB como punto inicial, 4.096 MB para cargas intensivas y 512 MB para procesadores ligeros.
Las instancias siempre listas mantienen caliente una función o grupo. Reducen el inicio en frío, pero crean un cargo básico; resérvalas para sensibles. El escalado bajo demanda continúa por encima de ese mínimo.
Resumen rápido
Consumo flexible ofrece economía controlada por eventos; la capacidad siempre lista solo se justifica por latencia.
4. Premium y las demás opciones de hospedaje
Decisión de hospedaje
Opción
Uso adecuado
Contrapartida
Consumo flexible
con ráfagas y desencadenadores independientes
Inicio en frío sin capacidad siempre lista
Premium
Latencia baja continua, trabajadores grandes, VNet o imágenes Linux
Un trabajador caliente como mínimo genera coste base
dedicado
Capacidad ya disponible o carga predecible
El equipo administra capacidad y
GPU, paquetes de SO o servicios en contenedores próximos
Réplicas y contenedores pasan a la operación
Consumo Linux heredado
Solo cargas existentes
Retirada prevista después de septiembre de 2028; migra a Flexible
Selecciona por latencia, forma de la carga, cómputo, red y operación, no por un precio aislado.
Resumen rápido
Premium cambia un coste base por arranque predecible; Dedicado y Apps cubren requisitos especiales.
5. Escalado por función, concurrencia y memoria
En Consumo flexible, los desencadenadores escalan como grupo; los blobs basados en forman otro y Durable Functions comparte un grupo. La mayoría de los demás, como Bus de servicio, colas y temporizadores, escala de forma independiente. Una ráfaga de cola no tiene que competir con la .
Menor concurrencia distribuye llamadas de IA costosas entre más instancias y asigna más recursos a cada invocación; mayor concurrencia usa menos instancias, pero aumenta la contención. Ajusta con pruebas de carga, cuotas, memoria y latencia integral.
Resumen rápido
Los grupos determinan qué funciones comparten instancias; concurrencia y memoria determinan el trabajo por instancia.
6. Trabajo prolongado y solicitud-respuesta asincrónica
Una función tiene unos 230 segundos para responder por aunque functionTimeout sea mayor. Consumo flexible y Premium permiten ejecuciones no sin máximo configurado, pero aún existen períodos de gracia en reducción de escala y actualizaciones.
La respuesta 202 y una cola desacoplan la latencia del procesamiento y permiten escalado independiente.
7. Herramientas locales y creación del proyecto
Core Tools v4 aporta el host local disponible con carácter general y el comando func; CLI v5 sigue en . La extensión de para añade plantillas, depuración F5, implementación y sincronización. Crea con la paleta o func init, agrega con func new y ejecuta con func start.
Core Tools v4
y extensión de
Python compatible y entorno virtual
Azurite para almacenamiento del host
curl o cliente .
Resumen rápido
El host local usa el mismo modelo de desencadenadores y enlaces y acorta el ciclo de desarrollo.
8. Estructura del proyecto Python v2
Archivos esenciales
Archivo
Finalidad
function_app.py
Entrada con decoradores y registro de planos técnicos
host.
Tiempo, registros, extensiones y concurrencia globales
local.settings.
Configuración local; nunca confirmes secretos
requirements.txt
Dependencias Python
.vscode/*
Depuración y tareas compartidas
.funcignore
Exclusiones de implementación
Mantén las funciones sin estado, divide aplicaciones grandes mediante blueprints y confirma la configuración de depuración, pero no local.settings..
Resumen rápido
El código, el comportamiento global y el entorno permanecen separados en archivos con responsabilidades claras.
9. AzureWebJobsStorage, Azurite y dependencias locales
AzureWebJobsStorage coordina el host, guarda el estado de temporizadores y almacena claves. Un valor inválido puede impedir desencadenadores no . En local, UseDevelopmentStorage=true dirige el host y enlaces compatibles a Azurite, que implementa Blob, Queue y .
Usa el emulador de cuando proceda y contenedores locales PostgreSQL o Redis. Antes de publicar, prueba los servicios reales y nunca implementes UseDevelopmentStorage=true.
Resumen rápido
Azurite satisface la dependencia local del host; los emuladores aceleran el trabajo, pero no sustituyen la validación en .
10. Desencadenadores y autorización
Cada función tiene exactamente un desencadenador. recibe método, encabezados, parámetros y cuerpo y devuelve HttpResponse. Usa anonymous solo si el acceso público es intencional, function como barrera básica y admin únicamente para operaciones con clave maestra.
Las claves no identifican al llamador. Usa o Autenticación de para ,, cuotas, transformaciones o límites de velocidad.
Resumen rápido
El nivel de autorización decide si se exige clave; la identidad real requiere una capa de autenticación.
11. Bus de servicio, bloqueos, reintentos y mensajes fallidos
Un desencadenador de cola de Bus de servicio recibe con PeekLock. El éxito completa el mensaje y el error lo abandona para reentrega, salvo liquidación manual. maxConcurrentCalls limita devoluciones de llamada paralelas y maxAutoRenewDuration debe cubrir el procesamiento esperado.
Al superar maxDeliveryCount, Bus de servicio mueve el mensaje a la subcola de mensajes fallidos con . Supervísala y reprocesa deliberadamente. El permiso de lectura administrativa mejora la precisión del escalado basado en destino.
Resumen rápido
Ajusta concurrencia y renovación de bloqueo y opera la cola de mensajes fallidos como parte del sistema.
12. Enlaces de entrada/salida y clientes
El desencadenador también es un enlace de entrada. Otros enlaces leen o escriben sin código repetitivo: para archivos, para resultados y Bus de servicio para distribución. Usa si no hay un enlace adecuado o necesitas toda la .
Crea credenciales y clientes costosos a nivel de módulo para reutilizar conexiones y en invocaciones calientes.
Resumen rápido
Los enlaces reducen infraestructura; los dan control completo y deben reutilizarse.
13. y separación de entornos
La configuración se cifra en reposo y se inyecta como variables de entorno. Guarda , modelos, umbrales y marcadores como pares simples. Usa os.environ para valores obligatorios y os.getenv para valores predeterminados explícitos.
Separa desarrollo, preproducción y producción. Administra producción mediante infraestructura como código o CLI controlada; descargar puede exponer secretos y cargar valores locales puede romper producción.
Resumen rápido
El código permanece neutral cuando cada entorno proporciona su propia configuración.
14. Referencias de y rotación
Una referencia de resuelve el secreto como configuración sin cambiar el código. Asigna Secrets User. Una sin versión sigue la última versión en un máximo de 24 horas de caché; una con versión queda fijada. Un cambio de configuración o actualización explícita fuerza una nueva resolución.
AI_SERVICE_KEY=@Microsoft.KeyVault(
SecretUri=https://<vault>.vault.azure.net/secrets/AiServiceKey/)
from azure.appconfiguration.provider import load
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
config = load(
endpoint=os.environ["AZURE_APPCONFIG_ENDPOINT"],
credential=credential,
keyvault_credential=credential)
Resumen rápido
Conserva secretos en , usa referencias sin versión para rotación y concede solo lectura.
15. y características
centraliza valores no secretos y marcadores compartidos. Las etiquetas seleccionan el entorno; el proveedor Python puede actualizar valores y resolver referencias de mediante DefaultAzureCredential.
Guarda rutas de modelos, umbrales y marcadores en y credenciales en .
Resumen rápido
centraliza comportamiento; sigue siendo el origen de secretos.
16. y privilegio mínimo
Las conexiones basadas en identidad sustituyen cadenas por un prefijo y . La identidad asignada por el sistema es predeterminada; una asignada por el usuario puede compartirse y prepararse antes de implementar. El doble guion bajo crea propiedades estructuradas.
AzureWebJobsStorage__accountName=<storage-account>
ServiceBusConnection__fullyQualifiedNamespace=<namespace>.servicebus.windows.net
CosmosDBConnection__accountEndpoint=https://<account>.documents.azure.com:443/
# SDK client created once and reused on warm invocations
credential = DefaultAzureCredential()
client = DocumentIntelligenceClient(
endpoint=os.environ["DOCUMENT_INTELLIGENCE_ENDPOINT"],
credential=credential)
Roles mínimos representativos
Conexión
Rol
AzureWebJobsStorage del host
Blob
Desencadenador de blob
También Queue Data Contributor y Account Contributor
Entrada/salida de Bus de servicio
Data Receiver / Data Sender
Salida de
Cosmos DB Built-in Data Contributor
Referencia
Secrets User
Search Index Data Reader / Contributor
y reemplazan credenciales insertadas; cubre secretos inevitables.
Resumen rápido
La identidad elimina credenciales almacenadas, pero cada destino necesita el rol mínimo correcto.
17. Claves de acceso, protección de y laboratorio MCP
Las claves de función alcanzan una función, las de host todas, las de sistema pertenecen a extensiones y la maestra habilita administración. Todas son secretos. añade políticas y ; Autenticación de puede exigir .
La extensión MCP de expone desencadenadores de herramienta, recurso y prompt. Prefiere Streamable en /runtime//mcp; SSE queda para compatibilidad. En normalmente se requiere mcp_extension. Python necesita -functions 1.24.0 o posterior y la ejecución local Core Tools 4.0.7030 o posterior.