Última revisão: maio de 2026
Construa os serviços da AWS do exame AI-102 com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Ao final deste laboratório, você terá provisionado, com Terraform puro, o substrato de um aplicativo de IA do Azure no estilo RAG — uma conta do Azure OpenAI com uma implantação de modelo de chat da classe Claude / GPT, um serviço Azure AI Search para o índice de recuperação, uma Storage Account para documentos de origem e um Key Vault contendo as chaves da API. Cinco blocos; a arquitetura de referência AI-102.
Solte os snippets em um único main.tf, execute terraform init e depois terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.az login).azurerm_cognitive_account requer isso uma vez).Azure AI Search Básico é a principal despesa a $75/mês. Mude para a camada Gratuita (sku = "free") se você for sensível a custos; o laboratório ainda demonstra a arquitetura.
Abertura padrão do Azure. O AI-102 espera que você use eastus ou westus para a disponibilidade dos modelos mais recentes do Azure OpenAI — regiões mais antigas não recebem a família GPT-4 rapidamente.
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
}O Azure OpenAI é o motor GenAI de produção para o AI-102. Criamos a conta (kind = "OpenAI") e implantamos gpt-4o-mini como o modelo de chat — o modelo da classe GPT-4 mais barato no momento da escrita e o padrão recomendado para o laboratório AI-102. A implantação é a associação nomeada de uma versão específica do modelo a uma alocação de cota; você a chama pelo nome a partir do código do aplicativo.
O model.version = "2024-07-18" é a data de lançamento do gpt-4o-mini — o AI-102 testa a estabilidade da versão do modelo como uma preocupação recorrente (bloquear para uma versão específica versus atualização automática). O exame favorece a fixação explícita para confiabilidade de produção.
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
}
}O Azure AI Search (o renomeado Cognitive Search) é o motor de recuperação do AI-102 para padrões RAG. Provisionamos um serviço de camada Básica — ele suporta identidade gerenciada atribuída ao sistema, que é necessária para que o AI Search chame com segurança o Azure OpenAI para o recurso de vetorização integrada (onde o AI Search chama modelos de embeddings em seu nome durante a indexação).
A configuração local_authentication_enabled = false é a resposta de melhor prática de produção do AI-102 — força a autenticação do Entra ID, sem chaves de administrador “voando” por aí. A identidade gerenciada atribuída ao sistema recebe acesso ao Azure OpenAI na próxima etapa.
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
}Documentos de origem para RAG residem no Azure Storage. Os indexadores do AI Search puxam do contêiner de blob, passam pelo modelo de embeddings do OpenAI para vetorização e preenchem o índice de busca. Conceder à identidade gerenciada do AI Search o papel de Storage Blob Data Reader na conta de armazenamento é o padrão de recuperação sem senha do AI-102.
Com Storage + AI Search + OpenAI todos conectados via identidade gerenciada, o substrato RAG está em vigor. A camada de aplicação (o orquestrador de chat que recebe consultas do usuário, chama o AI Search e depois chama o OpenAI com o contexto recuperado) é o código que você escreve — o Terraform não ajuda nisso; ele garante a infraestrutura correta.
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
}O AI-102 espera que os aplicativos de produção leiam endpoints e chaves do Key Vault, e não de variáveis de ambiente ou arquivos de configuração. Provisionamos um Key Vault e armazenamos o endpoint do OpenAI, o nome da implantação e o endpoint do AI Search como segredos. Em produção, a identidade gerenciada do aplicativo teria o papel de “Key Vault Secrets User” neste cofre para lê-los na inicialização.
Isso fecha o ciclo Implementar e Integrar do AI-102: cada endpoint, cada chave, cada URL de serviço passa pelo Key Vault — um único ponto de rotação de segredos, um único ponto de auditoria. Todos os padrões adicionais do AI-102 (Document Intelligence, Translator, Custom Vision, Speech) se conectam da mesma forma.
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 derruba tudo. Notas:
purge_soft_delete_on_destroy = true nos recursos do provedor faz com que o destroy realmente purgue.O AI-102 abrange mais serviços do que este laboratório pode incluir — Azure AI Document Intelligence (reconhecimento de formulários, modelos de extração personalizados), Azure AI Vision (classificação de imagem personalizada + detecção de objetos), Azure AI Language (CLU + QnA personalizado), Azure AI Speech (fala personalizada, vozes neurais, tradução de fala), Azure AI Bot Service, Azure AI Content Safety e toda a superfície de design de fluxo de prompt do Azure AI Studio.
Nós nos concentramos no substrato RAG do Azure OpenAI + AI Search + Storage + Key Vault porque é a arquitetura AI-102 mais testada e aquela sobre a qual todos os outros padrões AI-102 se compõem. O Document Intelligence alimenta o RAG. O Vision extrai conteúdo de imagens que são incorporadas ao RAG. O Bot Service é um frontend sobre esta pilha.
Para as superfícies acima, consulte as seções Navegar e Editorial desta página de certificação.