Última revisión: mayo de 2026
Crea los servicios de AWS del examen DP-900 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á aprovisionado, con Terraform simple, las tres formas de plataforma de datos que evalúa DP-900: una cuenta de Azure Storage para datos de blob/analíticos con una política de ciclo de vida, una base de datos relacional de Azure SQL en un servidor de nivel Básico, y una cuenta de Cosmos DB sin servidor para JSON no relacional. Una pila, tres sustratos, cada uno vinculado a un dominio DP-900.
Cada recurso es Terraform simple. Coloque los fragmentos en un único main.tf, ejecute terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.az login).Variado — dos baratos, uno con un costo real:
La pila completa cuesta aproximadamente ~$5–8/mes en ejecución. Destruya rápidamente cuando termine — la base de datos SQL es el único elemento que factura 24/7 independientemente de si la está usando.
Apertura estándar de Azure consolidada en un bloque: fijar azurerm ~> 4.0, registrar los proveedores random y random_password (usaremos ambos — random_id para nombres de recursos únicos, random_password para la contraseña del administrador de SQL), y crear el Grupo de Recursos.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.6"
}
}
}
provider "azurerm" {
features {}
}
resource "random_id" "suffix" {
byte_length = 2
}
locals {
tags = {
Project = "certlabpro-dp-900"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-900-rg"
location = "eastus"
tags = local.tags
}Azure Storage es el sustrato de datos analíticos que cada pregunta de DP-900 asume (niveles Hot / Cool / Archive, la política de ciclo de vida que transiciona los datos fríos automáticamente). Activamos el espacio de nombres jerárquico (is_hns_enabled = true) lo que convierte la cuenta en Azure Data Lake Storage Gen2 — la versión que Azure Synapse, Databricks y Fabric esperan para cargas de trabajo analíticas.
La política de ciclo de vida es el mecanismo de optimización de costos más probado en DP-900: nivel Hot para datos activos, Cool después de 30 días, Archive después de 90 días. Tres niveles, tres ventanas de retención — el examen nombrará estos números en los escenarios.
resource "azurerm_storage_account" "analytics" {
name = "dp900data${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"
is_hns_enabled = true # Data Lake Storage Gen2
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_storage_management_policy" "analytics" {
storage_account_id = azurerm_storage_account.analytics.id
rule {
name = "tier-cold-data"
enabled = true
filters {
blob_types = ["blockBlob"]
prefix_match = ["raw/"]
}
actions {
base_blob {
tier_to_cool_after_days_since_modification_greater_than = 30
tier_to_archive_after_days_since_modification_greater_than = 90
}
}
}
}Los datos relacionales en Azure significan Azure SQL Database (PaaS, totalmente administrada). DP-900 evalúa la distinción entre SQL Database (base de datos única, sin servidor o basada en DTU, PaaS) vs SQL Managed Instance (compatibilidad casi del 100% con SQL Server, PaaS de instancia grande) vs SQL Server en VM (IaaS, control total).
Aprovisionamos un contenedor lógico de SQL Server (el punto final de la cadena de conexión) más una base de datos debajo en el nivel Básico — el SKU de pago más barato. Se aplica el cifrado en tránsito (TLS 1.2). La regla de firewall permite que los servicios de Azure se conecten (la pregunta típica de DP-900 «¿cómo se comunica mi App Service con mi SQL?» — esta regla es la respuesta).
resource "random_password" "sql_admin" {
length = 24
special = true
min_upper = 2
min_lower = 2
min_numeric = 2
}
resource "azurerm_mssql_server" "main" {
name = "certlabpro-dp-900-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
version = "12.0"
administrator_login = "sqladmin"
administrator_login_password = random_password.sql_admin.result
minimum_tls_version = "1.2"
public_network_access_enabled = true
tags = local.tags
}
resource "azurerm_mssql_database" "main" {
name = "certlabpro-dp-900-db"
server_id = azurerm_mssql_server.main.id
sku_name = "Basic"
max_size_gb = 2
zone_redundant = false
tags = local.tags
}
resource "azurerm_mssql_firewall_rule" "allow_azure_services" {
name = "AllowAzureServices"
server_id = azurerm_mssql_server.main.id
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0" # 0.0.0.0/0.0.0.0 = "allow Azure services" sentinel
}Los datos no relacionales en Azure significan Azure Cosmos DB, una base de datos multi-API distribuida globalmente. DP-900 evalúa específicamente la distinción de API — NoSQL (API Core / SQL, la más común), MongoDB, Cassandra, Gremlin y Table. Usamos la API Core SQL + modo de capacidad sin servidor (pago por solicitud, sin facturación en reposo — la pregunta de antipatrón de costos de DP-900 para sin servidor vs aprovisionado).
El consistency_level = "Session" es el valor predeterminado de Cosmos DB y el nivel de consistencia más probado en DP-900: linealizabilidad por sesión con gran latencia. Los otros cuatro — Strong, Bounded staleness, Eventual, Consistent prefix — son temas conceptuales del examen.
Con los tres sustratos de datos implementados (blob en el Paso 2, SQL en el Paso 3, Cosmos en el Paso 4), el dominio de Conceptos de Datos Centrales de DP-900 toma forma táctil: «qué servicio de Azure para qué forma de datos» se responde con estos tres recursos.
resource "azurerm_cosmosdb_account" "main" {
name = "certlabpro-dp-900-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
offer_type = "Standard"
kind = "GlobalDocumentDB" # Core (SQL) API
capabilities {
name = "EnableServerless"
}
consistency_policy {
consistency_level = "Session"
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
tags = local.tags
}Un terraform destroy estándar derriba todo en este laboratorio. Dos notas:
random_password — se almacena en el estado de Terraform. Si usted confirma el estado a git, habrá confirmado la contraseña. Use un backend de estado remoto (Azure Storage con versiones + eliminación suave) en cualquier configuración no trivial.DP-900 cubre muchos servicios de datos que este laboratorio no puede incluir — Azure Synapse Analytics (cubierto en DP-600/DP-700), Azure Databricks, Azure Data Factory, Microsoft Fabric, Azure Stream Analytics, Event Hubs, Azure SQL Managed Instance, Azure Database for PostgreSQL / MySQL / MariaDB, Power BI, y los servicios analíticos de Azure que facturan caro mientras están inactivos (grupos SQL dedicados de Synapse, grupos Spark dedicados).
Nos ceñimos a las tres formas de datos principales (blob/analíticos, relacionales, no relacionales) porque DP-900 es fundamentalmente un examen de qué-servicio-para-qué-forma. Una vez que internaliza los tres sustratos que aprovisiona este laboratorio, cada otra pregunta de DP-900 se convierte en una pregunta de capas sobre ellos.
Para cobertura servicio por servicio, consulte las secciones Buscar, Manual y Editorial de esta página de certificación.