Terraform e Infraestructura como Codigo
Terraform te permite definir toda tu infraestructura AWS en archivos de codigo (HCL). En vez de hacer click en la consola, escribes que quieres y Terraform lo crea.
Ventajas: • Reproducible: misma infra en dev, staging y prod • Versionable: tu infra esta en Git con historial • Automatizable: CI/CD puede desplegar infra • Multi-cloud: funciona con AWS, GCP, Azure, etc.
Conceptos clave: • Provider: plugin que conecta con AWS, GCP, etc. • Resource: un servicio a crear (EC2, S3, RDS...) • Variable: parametros reutilizables • Output: valores que Terraform muestra al terminar • State: archivo donde Terraform guarda que ha creado • Plan: preview de cambios antes de aplicarlos
# main.tf — Infraestructura completa para una app web
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.region
}
variable "region" {
default = "us-east-1"
}
variable "environment" {
default = "dev"
}
# Bucket S3 para archivos
resource "aws_s3_bucket" "uploads" {
bucket = "mi-app-${var.environment}-uploads"
tags = {
Environment = var.environment
}
}
# Instancia EC2
resource "aws_instance" "web" {
ami = "ami-0c02fb55956c7d316"
instance_type = "t3.micro"
tags = {
Name = "mi-app-${var.environment}"
}
}
# Base de datos RDS
resource "aws_db_instance" "database" {
identifier = "mi-app-${var.environment}-db"
engine = "postgres"
engine_version = "15.4"
instance_class = "db.t3.micro"
allocated_storage = 20
username = "admin"
password = var.db_password
skip_final_snapshot = true
}
variable "db_password" {
sensitive = true
}
output "ec2_ip" {
value = aws_instance.web.public_ip
}
output "rds_endpoint" {
value = aws_db_instance.database.endpoint
}
# Flujo de trabajo con Terraform
# 1. Inicializar (descarga providers)
terraform init
# 2. Ver que va a hacer (preview)
terraform plan -var="db_password=MiPassword123!"
# 3. Aplicar cambios (crear/modificar infra)
terraform apply -var="db_password=MiPassword123!"
# 4. Ver estado actual
terraform show
# 5. Destruir todo (cuidado!)
terraform destroy
# Tip: usa archivos .tfvars para variables
# terraform apply -var-file="prod.tfvars"
Practica esta lección
Resuelve los ejercicios del curso de AWS para Developers en la app, gratis y con corrección automática.
Empezar a practicar