Terraform, AWS y Localstack

Cuando Trabajamos con un proveedor Cloud, una buena practica es usar Infraestructura como Código, tenemos en el mercado varias herramientas que podemos usar, una de las más usadas es Terraform.

Infraestructura como Código

La infraestructura como código es un enfoque para la automatización de infraestructura basado en las prácticas del desarrollo de software.

Principios:

  • Los sistemas se pueden reproducción fácilmente.
  • Los sistemas son desechables (Si un servidor falla, podemos desechar y volver a desplegar sin problemas).
  • Los sistemas son consistentes.
  • Los sistemas son repetibles.
  • El diseño siempre está cambiando.

Prácticas Generales

  • Utilizar archivos de definición.
  • Sistemas y procesos autodocumentados.
  • Versionar todas las infraestructura.
  • Preferir cambios pequeños.
  • Mantener los servicios continuamente disponibles.

Algunas de los beneficios que tiene Terraform son:

  • Administra infraestructuras pequeñas o grandes o puede administrar una sola aplicación.
  • Terraform no se limita a un proveedor Cloud en específico.
  • Proporciona una sintaxis fácil y unificada que permite administrar casi cualquier recurso que se requiera.
  • Las configuraciones que se realizan en Terraform puede ser compartida y reutilizable, mediante el uso de módulos.
  • El modelo de la infraestructura puede ser versionado, de esta forma es más sencillo observar el progreso de nuestro servicio y controlar los cambios.

Instalación

Descargar Terraform para Linux:

curl -o terraform.zip <url_download.zip>
unzip terraform.zip;

Instalar:

sudo mv terraform /usr/bin/;
terraform version

Ejemplo:

provider "aws" {
    region="us-east-1"
}
resource "aws_instance" "demo-instance"{
    ami = "ami-0582e409ce9fb2f1d"
    instance_type = "t2.micro"
    tags = {
        Name= "Demo1"
        Enviroment= "Dev"
    }
}

Ejecutar

# Descarga los plugin del proveedor
terraform init
# Validar sintaxis
terraform validate
# Plan
terraform plan
# Ejecutar
terraform apply
# Ejecutar - omitir aprobación
terraform apply -auto-approve
# Destruir Infraestructura
terraform destroy
# Diagrama archivo de definición
terraform graph | dot -Tsvg > graph.svg

Estructura

Archivo principal con Variables

provider "aws" {
    region="us-east-1"
}
resource "aws_instance" "demo-instance"{
    ami = var.ami_id
    instance_type = var.instance_type
    tags = var.tags
}

Archivo declaración de variables

variable "ami_id" {
    default=""
    description="AMI Id"
}
variable "instance_type" {
    description="Tipo de Instancia"
}
variable "tags" {
    description = "Tags"
    type = map
}

Archivo de Asignación de variables

ami_id="ami-0582e409ce9fb2f1d"
instance_type="t2.micro"
tags={Name= "Demo2", Enviroment= "Dev"}
# Descarga los plugin del proveedor
terraform init
# Validar sintaxis
terraform validate
# Plan
terraform plan -var-file dev.tfvars
# Ejecutar
terraform apply -var-file dev.tfvars
# Ejecutar - omitir aprobación
terraform apply -var-file dev.tfvars -auto-approve
# Destruir Infraestructura
terraform destroy

Puedes consultar el repositorio del Meetup en:

  • GitHub Repository - Link