Última revisão: maio de 2026
Construa os serviços da AWS do exame CLF-C02 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, a menor carga de trabalho AWS realista — um bucket S3 privado criptografado, uma função IAM de privilégio mínimo, uma instância EC2 de nível gratuito e um alarme de faturamento que o notificará por e-mail antes da AWS. Cada recurso mapeia para um dos quatro domínios do exame CLF-C02.
Cada recurso é Terraform puro — o mesmo código funciona sem modificações no OpenTofu. Não há variáveis, módulos ou estado remoto. Insira os trechos a seguir em um único main.tf, execute terraform init uma vez e, em seguida, terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.us-east-1 porque é onde os dados de faturamento são centralizados.Todos os recursos neste laboratório se encaixam no Nível Gratuito da AWS para novas contas (12 meses a partir do registro):
t3.micro: 750 horas/mês gratuitas.Fora do Nível Gratuito, a pilha completa custa menos de US$10/mês, mesmo funcionando 24 horas por dia, 7 dias por semana. Dito isso: recursos ociosos ainda serão cobrados após a expiração do Nível Gratuito — destrua-os quando terminar. O alarme de faturamento que construímos na Etapa 4 é sua rede de segurança caso você esqueça.
Toda carga de trabalho começa informando ao Terraform qual versão dele esperamos e qual provedor AWS usaremos. Fixamos o provedor AWS em ~> 5.60 e padronizamos para us-east-1 — a região mais antiga da AWS, onde os dados de faturamento são centralizados e a maioria dos serviços são lançados primeiro.
Insira isto em um novo main.tf para começar. Tudo o que se segue no laboratório estará no mesmo arquivo.
O bloco default_tags no provedor anexa as mesmas tags a cada recurso "taggeável" que criaremos. O AWS Cost Explorer + os Relatórios de Alocação de Custos agrupam os gastos por tag — acertar isso desde o primeiro dia é o investimento mais barato em controle de custos que você fará, e ele se mapeia diretamente para o domínio Faturamento e Precificação do 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"
}
}
}O S3 é a camada de armazenamento por trás de quase toda carga de trabalho da AWS — cada domínio CLF-C02 o referencia. Criamos um bucket, bloqueamos o acesso público (padrão para novos buckets desde 2023, mas ser explícito é melhor) e ativamos a criptografia do lado do servidor com AES256.
Estes três recursos juntos — bucket, bloco de acesso público, criptografia — são o padrão mínimo responsável para qualquer bucket S3. O exame CLF-C02 enquadra isso como o modelo de responsabilidade compartilhada: a AWS nos fornece uma plataforma segura, mas nós configuramos a criptografia e os controles de acesso. O bucket faz parte da "responsabilidade do 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"
}
}
}O EC2 é o serviço AWS que todo candidato CLF-C02 deve conhecer de cor. Usamos o menor tipo de instância elegível para o nível gratuito (t3.micro) e damos a ele um perfil de instância IAM para que possa ler do bucket que criamos na Etapa 2 — sem nunca incorporar credenciais AWS na máquina. Este é o padrão AWS canônico para autenticação aplicação-para-AWS e aparece em várias variantes de perguntas do CLF-C02.
O bloco data busca a AMI mais recente do Amazon Linux 2023 dinamicamente — fixar um ID de AMI específico quebraria o laboratório quando a AWS desativasse a imagem. O grupo de segurança nega todo o tráfego de entrada; adicionaríamos regras de entrada em uma carga de trabalho real, mas para este laboratório uma instância bloqueada é o padrão correto.
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
}
}O CLF-C02 dedica 16% do exame a Faturamento, Precificação e Suporte. A coisa mais concreta que você pode construir nesse espaço é um alarme de faturamento do CloudWatch: a AWS publica as cobranças estimadas no nível da conta como uma métrica, e nós definimos um limite acima do qual queremos ser notificados. O alarme publica em um tópico SNS, que nos envia um e-mail.
Alarmes de métricas de faturamento devem ser criados em us-east-1 independentemente de onde suas cargas de trabalho são executadas — é por isso que padronizamos para us-east-1 na Etapa 1. Você também precisará habilitar os Alertas de faturamento uma vez, no console da conta em Faturamento → Preferências de faturamento → Receber alertas de faturamento. O Terraform não pode alternar isso; é uma configuração de nível de conta fora da infraestrutura como código.
Após terraform apply, a AWS envia um e-mail de confirmação para o endereço em email_endpoint — clique em Confirmar assinatura uma vez, e o alarme realmente o alcançará quando o limite for excedido.
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"
}
}Um terraform destroy padrão derruba tudo neste laboratório. Duas observações:
Project = certlabpro-clf-c02 e a confirmação de que nada está persistindo.O CLF-C02 abrange um amplo catálogo de serviços — RDS, Lambda, detalhes de VPC, CloudFront, Route 53, ECS, EKS, Aurora, Elastic Beanstalk, AppSync e muitos outros. Deliberadamente, não os provisionamos neste laboratório fundamental.
O objetivo do CLF-C02 é a ampla fluência conceitual, não o provisionamento aprofundado serviço por serviço. Os quatro passos acima abordam um recurso de cada um dos quatro domínios do exame — Conceitos de Nuvem (IAM + S3 como as primitivas de plataforma e armazenamento), Segurança e Conformidade (IAM de privilégio mínimo, criptografia em repouso, IMDSv2), Tecnologia e Serviços de Nuvem (EC2 como o serviço de computação canônico) e Faturamento, Precificação e Suporte (o alarme de faturamento do CloudWatch). Essa é a forma certa para o exame.
Para cobertura serviço por serviço, consulte as seções Navegar e Editorial desta página de certificação — elas referenciam todos os serviços no escopo do CLF-C02 com descrições de uma linha e ligações aos domínios do exame. O valor prático deste laboratório está em ver como os quatro pilares se conectam no primeiro dia, e não em visitar todos os mais de 200 serviços da AWS.