Última revisión: mayo de 2026
Crea los servicios de AWS del examen CLF-C02 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al finalizar este laboratorio, habrás aprovisionado, con Terraform simple, la primera carga de trabajo de AWS más pequeña y realista: un bucket S3 privado cifrado, un rol IAM con privilegios mínimos, una instancia EC2 de nivel gratuito y una alarma de facturación que te enviará un correo electrónico antes de que lo haga AWS. Cada recurso se asigna a uno de los cuatro dominios del examen CLF-C02.
Cada recurso es Terraform simple; el mismo código funciona sin modificaciones en OpenTofu. No hay variables, módulos ni estado remoto. Inserta los fragmentos de código siguientes en un único main.tf, ejecuta terraform init una vez y luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.us-east-1 porque es donde se centralizan los datos de facturación.Todos los recursos de este laboratorio se ajustan al Nivel Gratuito de AWS para cuentas nuevas (12 meses desde la inscripción):
t3.micro: 750 horas/mes gratis.Fuera del Nivel Gratuito, toda la pila cuesta menos de $10/mes incluso funcionando 24/7. Dicho esto: los recursos inactivos seguirán siendo cobrados una vez que expire el Nivel Gratuito; destruye cuando hayas terminado. La alarma de facturación que construimos en el Paso 4 es tu red de seguridad si lo olvidas.
Cada carga de trabajo comienza indicándole a Terraform qué versión esperamos de sí mismo y qué proveedor de AWS usaremos. Fijamos el proveedor de AWS en ~> 5.60 y, por defecto, us-east-1, la región más antigua de AWS, donde se centralizan los datos de facturación y la mayoría de los servicios se lanzan primero.
Inserta esto en un main.tf nuevo para empezar. Todo lo que sigue en el laboratorio se encuentra en el mismo archivo.
El bloque default_tags en el proveedor adjunta las mismas etiquetas a cada recurso etiquetable que crearemos. AWS Cost Explorer + los informes de asignación de costos agrupan el gasto por etiqueta; hacerlo bien desde el primer día es la inversión de control de costos más barata que harás, y se asigna directamente al dominio Facturación y Precios del CLF-C02.
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-clf-c02"
ManagedBy = "terraform"
Environment = "lab"
}
}
}S3 es la capa de almacenamiento detrás de casi todas las cargas de trabajo de AWS; todos los dominios del CLF-C02 lo referencian. Creamos un bucket, bloqueamos el acceso público (activado por defecto para buckets nuevos desde 2023, pero ser explícito es mejor) y activamos el cifrado del lado del servidor con AES256.
Estos tres recursos juntos —el bucket, el bloqueo de acceso público y el cifrado— son el valor predeterminado mínimo responsable para cualquier bucket de S3. El examen CLF-C02 lo enmarca como el modelo de responsabilidad compartida: AWS nos proporciona una plataforma segura, pero nosotros configuramos el cifrado y los controles de acceso. El bucket es parte de "responsabilidad del cliente".
resource "aws_s3_bucket" "app_data" {
bucket_prefix = "certlabpro-clf-c02-"
}
resource "aws_s3_bucket_public_access_block" "app_data" {
bucket = aws_s3_bucket.app_data.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "app_data" {
bucket = aws_s3_bucket.app_data.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}EC2 es el servicio de AWS que se espera que todo candidato al CLF-C02 conozca a fondo. Utilizamos el tipo de instancia más pequeño elegible para el nivel gratuito (t3.micro) y le asignamos un perfil de instancia IAM para que pueda leer desde el bucket que creamos en el Paso 2, sin necesidad de incrustar credenciales de AWS en la instancia. Este es el patrón canónico de AWS para la autenticación de aplicación a AWS y aparece en múltiples variantes de preguntas del CLF-C02.
El bloque data obtiene la última AMI de Amazon Linux 2023 de forma dinámica; fijar una ID de AMI específica rompería el laboratorio cuando AWS retire la imagen. El grupo de seguridad deniega todo el tráfico entrante; añadiríamos reglas de entrada en una carga de trabajo real, pero para este laboratorio una instancia bloqueada es el valor predeterminado correcto.
data "aws_ami" "al2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-kernel-6.1-x86_64"]
}
}
resource "aws_iam_role" "ec2_app" {
name = "certlabpro-clf-c02-ec2-app"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "ec2.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy" "ec2_app_s3_read" {
name = "read-app-data-bucket"
role = aws_iam_role.ec2_app.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:ListBucket"]
Resource = [aws_s3_bucket.app_data.arn, "${aws_s3_bucket.app_data.arn}/*"]
}]
})
}
resource "aws_iam_instance_profile" "ec2_app" {
name = "certlabpro-clf-c02-ec2-app"
role = aws_iam_role.ec2_app.name
}
resource "aws_security_group" "ec2_app" {
name = "certlabpro-clf-c02-ec2-app"
description = "Locked down by default; add ingress rules per workload."
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "app" {
ami = data.aws_ami.al2023.id
instance_type = "t3.micro"
iam_instance_profile = aws_iam_instance_profile.ec2_app.name
vpc_security_group_ids = [aws_security_group.ec2_app.id]
metadata_options {
http_endpoint = "enabled"
http_tokens = "required" # IMDSv2 only — required for SCS-C03 best practice
}
}El CLF-C02 dedica el 16% del examen a Facturación, Precios y Soporte. Lo más concreto que puedes construir en este ámbito es una alarma de facturación de CloudWatch: AWS publica los cargos estimados a nivel de cuenta como una métrica, y nosotros establecemos un umbral por encima del cual queremos ser notificados. La alarma publica en un tema de SNS, que nos envía un correo electrónico.
Las alarmas de métricas de facturación deben crearse en us-east-1 independientemente de dónde se ejecuten tus cargas de trabajo; por eso configuramos us-east-1 como predeterminado en el Paso 1. También deberás habilitar las Alertas de facturación una vez, en la consola de la cuenta en Facturación → Preferencias de facturación → Recibir alertas de facturación. Terraform no puede activar esto; es una configuración a nivel de cuenta fuera de la infraestructura como código.
Después de terraform apply, AWS envía un correo electrónico de confirmación a la dirección en email_endpoint; haz clic en Confirmar suscripción una vez, y la alarma te llegará realmente cuando se active el umbral.
resource "aws_sns_topic" "billing_alerts" {
name = "certlabpro-clf-c02-billing-alerts"
}
resource "aws_sns_topic_subscription" "billing_alerts_email" {
topic_arn = aws_sns_topic.billing_alerts.arn
protocol = "email"
endpoint = "you@example.com" # replace with your real email
}
resource "aws_cloudwatch_metric_alarm" "monthly_bill_over_10" {
alarm_name = "certlabpro-clf-c02-monthly-bill-over-10-usd"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "EstimatedCharges"
namespace = "AWS/Billing"
period = 21600 # 6 hours — billing metric is slow-moving
statistic = "Maximum"
threshold = 10
alarm_description = "Estimated monthly AWS charges exceeded $10 USD."
alarm_actions = [aws_sns_topic.billing_alerts.arn]
dimensions = {
Currency = "USD"
}
}Un terraform destroy estándar elimina todo en este laboratorio. Dos notas:
Project = certlabpro-clf-c02 y la confirmación de que no queda nada.El CLF-C02 cubre un amplio catálogo de servicios: RDS, Lambda, detalles de VPC, CloudFront, Route 53, ECS, EKS, Aurora, Elastic Beanstalk, AppSync y muchos más. Deliberadamente no los aprovisionamos en este laboratorio fundacional.
El objetivo del CLF-C02 es la fluidez conceptual amplia, no el aprovisionamiento profundo servicio por servicio. Los cuatro pasos anteriores tocan un recurso de cada uno de los cuatro dominios del examen: Conceptos de la Nube (IAM + S3 como primitivas de plataforma y almacenamiento), Seguridad y Cumplimiento (IAM con privilegios mínimos, cifrado en reposo, IMDSv2), Tecnología y Servicios en la Nube (EC2 como el servicio de cómputo canónico) y Facturación, Precios y Soporte (la alarma de facturación de CloudWatch). Esa es la forma correcta para el examen.
Para una cobertura servicio por servicio, consulta las secciones de Buscar y Editorial de esta página de certificación; referencian cada servicio dentro del alcance del CLF-C02 con descripciones de una línea y vínculos a los dominios del examen. El valor práctico de este laboratorio reside en ver cómo los cuatro pilares se conectan el primer día, no en recorrer los más de 200 servicios de AWS.