Instalación y Configuración de Terraform con AWS CLI

Lectura
15 min~5 min lectura

Concepto clave

La instalación y configuración de Terraform con AWS CLI es el primer paso para automatizar tu infraestructura en la nube. Imagina que Terraform es como un arquitecto que diseña planos detallados de edificios, mientras que AWS CLI es el equipo de construcción que tiene acceso a los materiales y herramientas. Juntos, te permiten crear, modificar y destruir recursos en AWS de manera repeatable y consistente, evitando errores manuales y ahorrando tiempo.

En un entorno DevOps, esta configuración inicial es crucial porque establece la base para el Infrastructure as Code (IaC). Terraform usa archivos de configuración en HCL (HashiCorp Configuration Language) para describir el estado deseado de tu infraestructura, y AWS CLI proporciona las credenciales necesarias para interactuar con los servicios de AWS. Sin una configuración correcta, es como intentar conducir un coche sin llaves: no importa cuán bueno sea el plan, no podrás ejecutarlo.

Cómo funciona en la práctica

Para configurar Terraform con AWS CLI, sigue estos pasos en orden. Primero, instala Terraform descargándolo desde el sitio oficial de HashiCorp y agregándolo a tu PATH. Luego, instala AWS CLI usando el instalador apropiado para tu sistema operativo y configura las credenciales de AWS con aws configure. Esto crea un perfil en ~/.aws/credentials que Terraform usará para autenticarse.

Un ejemplo práctico: supón que necesitas crear una VPC en AWS. Antes de escribir código Terraform, debes asegurarte de que tanto Terraform como AWS CLI estén correctamente instalados y configurados. Verifica la instalación ejecutando terraform version y aws --version en tu terminal. Si ambos comandos devuelven versiones sin errores, estás listo para comenzar a codificar tu infraestructura.

Codigo en accion

Aquí tienes un ejemplo funcional de un archivo Terraform básico que crea un bucket S3 en AWS, asumiendo que ya tienes Terraform y AWS CLI configurados. Crea un archivo llamado main.tf con el siguiente contenido:

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "mi_bucket" {
  bucket = "mi-bucket-unico-2023"
  acl    = "private"

  tags = {
    Name        = "MiBucket"
    Environment = "Dev"
  }
}

output "bucket_name" {
  value = aws_s3_bucket.mi_bucket.bucket
}

Antes de ejecutar, inicializa Terraform con terraform init para descargar el proveedor AWS. Luego, usa terraform plan para ver qué cambios se aplicarán y terraform apply para crear el bucket. Después de ejecutar, verás el nombre del bucket en la salida. Para mejorar esto, podrías refactorizar usando variables:

variable "bucket_name" {
  description = "Nombre del bucket S3"
  type        = string
  default     = "mi-bucket-refactorizado"
}

resource "aws_s3_bucket" "mi_bucket" {
  bucket = var.bucket_name
  acl    = "private"

  tags = {
    Name        = "MiBucket"
    Environment = "Dev"
  }
}

Errores comunes

  • Credenciales de AWS no configuradas: Si Terraform no puede autenticarse con AWS, verás errores como "No valid credential sources found". Solución: ejecuta aws configure y verifica que las credenciales en ~/.aws/credentials sean correctas y tengan los permisos necesarios.
  • Región incorrecta en el proveedor: Especificar una región no disponible o mal escrita puede causar fallos. Solución: usa regiones válidas como "us-east-1" o "eu-west-1" y verifica en la consola de AWS.
  • No inicializar Terraform: Saltarse terraform init resulta en errores como "Provider not installed". Solución: siempre ejecuta terraform init en el directorio de tu proyecto antes de plan o apply.
  • Conflictos de nombres en recursos: Intentar crear recursos con nombres duplicados (e.g., buckets S3 con el mismo nombre) causa errores. Solución: usa nombres únicos o añade sufijos aleatorios en tu código.
  • Olvidar destruir recursos después de pruebas: Dejar recursos ejecutándose puede generar costos innecesarios. Solución: usa terraform destroy para limpiar recursos cuando ya no los necesites, especialmente en entornos de desarrollo.

Checklist de dominio

  1. Terraform instalado y accesible desde la terminal (terraform version funciona).
  2. AWS CLI instalado y configurado con credenciales válidas (aws sts get-caller-identity devuelve información).
  3. Capaz de crear un archivo Terraform básico que define un proveedor AWS y un recurso simple (e.g., S3 bucket).
  4. Puedo ejecutar terraform init, plan, y apply sin errores para desplegar infraestructura.
  5. Entiendo cómo usar variables en Terraform para hacer el código más flexible y reusable.
  6. Sé cómo solucionar errores comunes de autenticación y configuración revisando logs y documentación.
  7. Puedo destruir recursos con terraform destroy para gestionar costos y limpieza.

Configura un entorno Terraform y despliega una instancia EC2 en AWS

Sigue estos pasos para practicar la instalación y configuración de Terraform con AWS CLI, desplegando una instancia EC2 básica:

  1. Instala Terraform en tu máquina local si aún no lo tienes. Descarga la versión estable desde el sitio de HashiCorp y agrega el binario a tu PATH.
  2. Instala AWS CLI y configura tus credenciales usando aws configure. Proporciona tu Access Key ID, Secret Access Key, región (e.g., us-east-1), y formato de salida (e.g., json).
  3. Crea un nuevo directorio para tu proyecto Terraform y dentro, crea un archivo main.tf con el siguiente código que define una instancia EC2:
    provider "aws" {
      region = "us-east-1"
    }
    
    resource "aws_instance" "web" {
      ami           = "ami-0c55b159cbfafe1f0"  # Amazon Linux 2 AMI en us-east-1
      instance_type = "t2.micro"
    
      tags = {
        Name = "HelloWorld"
      }
    }
    
    output "instance_id" {
      value = aws_instance.web.id
    }
  4. En la terminal, navega al directorio y ejecuta terraform init para inicializar el proyecto. Luego, ejecuta terraform plan para revisar los cambios propuestos.
  5. Si el plan parece correcto, ejecuta terraform apply y confirma con 'yes' para crear la instancia EC2. Anota el ID de instancia que se muestra en la salida.
  6. Verifica en la consola de AWS que la instancia se ha creado correctamente y está en estado 'running'.
  7. Finalmente, ejecuta terraform destroy para eliminar la instancia y evitar costos innecesarios.
Pistas
  • Asegúrate de que tu AWS CLI esté configurado con un perfil que tenga permisos para crear instancias EC2.
  • Si encuentras errores de región, verifica que el AMI usado sea válido para la región especificada en el proveedor.
  • Usa terraform validate para chequear la sintaxis de tu archivo antes de ejecutar init o apply.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.