Última revisión: mayo de 2026
Crea los servicios de AWS del examen AI-102 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al final de este laboratorio, habrás aprovisionado, con Terraform puro, la infraestructura de una aplicación de IA de Azure estilo RAG — una cuenta de Azure OpenAI con un despliegue de modelo de chat de clase Claude / GPT, un servicio de Azure AI Search para el índice de recuperación, una cuenta de almacenamiento para documentos fuente, y un Key Vault que contendrá las claves de API. Cinco bloques; la arquitectura de referencia AI-102.
Deja los fragmentos en un único main.tf, ejecuta terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.az login).azurerm_cognitive_account lo requiere una vez).Azure AI Search Básico es la factura principal a $75/mes. Cambia al nivel Gratuito (sku = "free") si eres sensible a los costos; el laboratorio aún demuestra la arquitectura.
Inicio estándar de Azure. AI-102 espera que uses eastus o westus para la disponibilidad de los modelos más recientes de Azure OpenAI — las regiones más antiguas no obtienen la familia GPT-4 rápidamente.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-ai-102"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-ai-102-rg"
location = "eastus"
tags = local.tags
}Azure OpenAI es el motor GenAI de producción para AI-102. Creamos la cuenta (kind = "OpenAI") y desplegamos gpt-4o-mini como modelo de chat — el modelo de clase GPT-4 más barato en el momento de escribir esto y el valor predeterminado recomendado para el laboratorio AI-102. El despliegue es la vinculación con nombre de una versión específica de un modelo a una asignación de cuota; lo llamas por su nombre desde el código de la aplicación.
El model.version = "2024-07-18" es la fecha de lanzamiento de gpt-4o-mini — AI-102 evalúa la estabilidad de la versión del modelo como una preocupación recurrente (bloquearse a una versión específica vs. autoactualización). El examen favorece la fijación explícita para la fiabilidad en producción.
resource "azurerm_cognitive_account" "openai" {
name = "openai-ai102-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
kind = "OpenAI"
sku_name = "S0"
custom_subdomain_name = "openai-ai102-${random_id.suffix.hex}"
identity {
type = "SystemAssigned"
}
tags = local.tags
}
resource "azurerm_cognitive_deployment" "chat" {
name = "gpt-4o-mini"
cognitive_account_id = azurerm_cognitive_account.openai.id
model {
format = "OpenAI"
name = "gpt-4o-mini"
version = "2024-07-18"
}
sku {
name = "Standard"
capacity = 10 # TPM in thousands; 10 = 10K tokens-per-minute quota
}
}Azure AI Search (el antiguo Cognitive Search) es el motor de recuperación de AI-102 para patrones RAG. Aprovisionamos un servicio de nivel Básico — soporta identidad administrada asignada por el sistema, que es necesaria para que AI Search llame de forma segura a Azure OpenAI para la función de vectorización integrada (donde AI Search llama a modelos de embeddings en tu nombre durante la indexación).
La configuración local_authentication_enabled = false es la respuesta de mejores prácticas de producción de AI-102 — forzar la autenticación de Entra ID, sin claves de administrador flotando. A la identidad administrada asignada por el sistema se le concede acceso a Azure OpenAI en el siguiente paso.
resource "azurerm_search_service" "main" {
name = "search-ai102-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "basic"
replica_count = 1
partition_count = 1
local_authentication_enabled = false # Entra auth only
public_network_access_enabled = true
identity {
type = "SystemAssigned"
}
tags = local.tags
}
# Grant AI Search's managed identity Cognitive Services OpenAI User on the
// account — required for integrated vectorization (AI Search → OpenAI embeddings).
resource "azurerm_role_assignment" "search_to_openai" {
scope = azurerm_cognitive_account.openai.id
role_definition_name = "Cognitive Services OpenAI User"
principal_id = azurerm_search_service.main.identity[0].principal_id
}Los documentos fuente para RAG residen en Azure Storage. Los indexadores de AI Search extraen del contenedor de blobs, pasan por el modelo de embeddings de OpenAI para la vectorización y llenan el índice de búsqueda. Otorgar a la identidad administrada de AI Search el rol Storage Blob Data Reader en la cuenta de almacenamiento es el patrón de recuperación sin contraseña de AI-102.
Con Storage + AI Search + OpenAI interconectados a través de la identidad administrada, la infraestructura RAG está en su lugar. La capa de aplicación (el orquestador de chat que toma las consultas del usuario, llama a AI Search y luego a OpenAI con el contexto recuperado) es el código que tú escribes — Terraform no ayuda ahí; solo configura la infraestructura correctamente.
resource "azurerm_storage_account" "docs" {
name = "ai102docs${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_storage_container" "source" {
name = "source"
storage_account_id = azurerm_storage_account.docs.id
container_access_type = "private"
}
resource "azurerm_role_assignment" "search_to_storage" {
scope = azurerm_storage_account.docs.id
role_definition_name = "Storage Blob Data Reader"
principal_id = azurerm_search_service.main.identity[0].principal_id
}AI-102 espera que las aplicaciones de producción lean los puntos de conexión y las claves de Key Vault, no de variables de entorno o archivos de configuración. Aprovisionamos un Key Vault y almacenamos el punto de conexión de OpenAI, el nombre del despliegue y el punto de conexión de AI Search como secretos. En producción, la identidad administrada de la aplicación tendría el rol de 'Key Vault Secrets User' en este vault para leerlos al inicio.
Esto cierra el ciclo de Implementar e Integrar de AI-102: cada punto de conexión, cada clave, cada URL de servicio pasa por Key Vault — un único punto de rotación de secretos, un único punto de auditoría. Cada patrón adicional de AI-102 (Document Intelligence, Translator, Custom Vision, Speech) se conecta de la misma manera.
resource "azurerm_key_vault" "main" {
name = "kv-ai102-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
soft_delete_retention_days = 7
tags = local.tags
}
resource "azurerm_role_assignment" "kv_admin_self" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Administrator"
principal_id = data.azurerm_client_config.current.object_id
}
resource "azurerm_key_vault_secret" "openai_endpoint" {
name = "openai-endpoint"
value = azurerm_cognitive_account.openai.endpoint
key_vault_id = azurerm_key_vault.main.id
depends_on = [azurerm_role_assignment.kv_admin_self]
}
resource "azurerm_key_vault_secret" "openai_deployment" {
name = "openai-deployment"
value = azurerm_cognitive_deployment.chat.name
key_vault_id = azurerm_key_vault.main.id
depends_on = [azurerm_role_assignment.kv_admin_self]
}
resource "azurerm_key_vault_secret" "search_endpoint" {
name = "search-endpoint"
value = "https://${azurerm_search_service.main.name}.search.windows.net"
key_vault_id = azurerm_key_vault.main.id
depends_on = [azurerm_role_assignment.kv_admin_self]
}terraform destroy destruye todo. Notas:
purge_soft_delete_on_destroy = true en las características del proveedor hace que destroy realmente purgue.AI-102 cubre más servicios que este laboratorio no puede abarcar — Azure AI Document Intelligence (reconocimiento de formularios, modelos de extracción personalizados), Azure AI Vision (clasificación de imágenes personalizada + detección de objetos), Azure AI Language (CLU + QnA personalizado), Azure AI Speech (voz personalizada, voces neuronales, traducción de voz), Azure AI Bot Service, Azure AI Content Safety y toda la superficie de diseño de flujos de prompts de Azure AI Studio.
Nos adherimos a la infraestructura RAG de Azure OpenAI + AI Search + Storage + Key Vault porque es la arquitectura de AI-102 más probada y sobre la cual se componen todos los demás patrones de AI-102. Document Intelligence alimenta RAG. Vision extrae contenido de imágenes que se incrustan en RAG. Bot Service es un frontend sobre esta pila.
Para las superficies anteriores, consulta las secciones Buscar y Editorial de esta página de certificación.