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