• Home
  • About
    • Jorge Reyes Vargas photo

      Jorge Reyes Vargas

      Blog personal para relatar cada una de mis aficiones y experiencias sobre estás mismas.

    • Learn more
    • Email
    • LinkedIn
    • Github
    • StackOverflow
  • Posts
    • Todos
    • Tags
  • Projects

Notas de estudio sobre IaC con Terraform

01 Sep 2021

Tiempo de lectura ~4 minutos

Contenido

  • Contenido
  • Infraestructura como código
    • ¿Qué es infraestrutura como código?
    • Principios de IaC
    • Prácticas generales de IaC
    • Tipos de herramientas para implementar IaC
      • Herramientas para definicion de infraestructura
      • Herramientas para configuracion de servidores
    • Enfoques para gestión de servidores
    • Factores para elegir una herramienta de IaC
    • Herramientas conocidas
    • Beneficios de la IaC
    • Herramientas para construir infraestructura inmutable
      • Packer
  • Terraform
    • ¿Qué es Terraform?
    • Características de Terraform
    • Terraform vs Ansible

Infraestructura como código

¿Qué es infraestrutura como código?

Práctica de aplicar los principios de desarrollo de software para automatizar los procesos de creación infraestructura.

Principios de IaC

La infraestructura se puede reproducir fácilmente
Dado que la creación de infraestructura se define en un script, reproducir la infraestructura es tan fácil como ejecutar nuevamente el script.
La infraestructura es desechable
Si la infraestructura definida tiene una definición errónea, se puede desechar y recrearla nuevamente ajustando el script de definición.
La infraestructura es consistente
Porque refleja lo que se define en su correspondiente script.
La infraestructura es repetible
La definición se encuentra como código en el script y se ejecuta n cantidad de veces.
El diseño siempre está cambiando
Actualizar la infraestructura es más fácil.

Prácticas generales de IaC

Utilizar un archivo de definición
Todas las herramientas de IaC tienen un formato propio para definir infraestructura.
Sistemas y procesos autodocumentados
Dado que todo se define en scripts, la infraestrctura es autodocumentada en los mismos.
Versionar todo
Tal como se realiza en desarrollo de software, es importante versionar todos los cambios realizados en la infraestructura, esto permite mantener la traza, evaluar incidentes y retroceder en el tiempo.
Preferir cambios pequeños
Como práctica de marcos de trabajo ágiles, es preferible realizar cambios pequeños para evitar conflictos mayores.
Mantener servicios continuamente disponibles
Teniendo en cuenta que es muy fácil crear y recrear infraestructura, mantener los servicios de infraestructura siempre disponibles, es mas fácil.

Tipos de herramientas para implementar IaC

En términos generales, estas herramientas se dividen en dos categorías:

Herramientas para definicion de infraestructura

Permiten especificar que recursos de infraestructura crear y como deben configurarse. Los recursos de infraestructura pueden ser máquinas virtuales, interfaces de red, discos duros, plataforma como servicio. Los archivos de definicion de configuracion es donde se define la infraestructura a crear, todas las herramientas tienen archivos de configuración en diferentes formatos y lenguajes. Estos archivos son útiles para la automatizacion de la infraestructura.

Ejemplo archivo de configuración de Terraform:

variable "example" {
default = "hello"
}

resource "aws_instance" "example" {
instance_type = "t2.micro"
ami           = "ami-abc123"
}

Herramientas para configuracion de servidores

Permiten configurar los servidores con el estado deseado. Por ejemplo, instalar dependencias, crear directorios, usuarios, permisos, etc.

Aprovisionamiento: proceso que permite que un elemento esté listo para usarse.

Enfoques para gestión de servidores

  • Configuración de servidores desde un script

  • Empaquetar plantillas de servidores

  • Ejecutar comandos en servidores

  • Configuración desde un registro central

Factores para elegir una herramienta de IaC

  • Modo desantendido para herramientas de líneas de comandos

  • Idempotencia, ejecución de comandos de manera repetida sin presentar un error

  • Parametrizable

Herramientas conocidas

Definición de Infraestructura Configuración de Servidores
Terraform Ansible
Cloud formation Chef
Open stack heat Puppet

Beneficios de la IaC

Creacion rapida bajo demanda
Por medio de los archivos de definición, se crea una única vez el archivo vez y la infraestructura se crea rápidamente al ejecutar esa definición.
Automatizacion
Con los mismos archivos de definición se beneficia automatizando la ejecución de dichas definiciones. Visibilidad y trazabilidad
A partir de un adecuado versionamiento se benefica de visibilidad de los cambios y una adecuada trazabilidad.
Ambientes homogéneos
Una misma definición permite crear varios ambientes de la misma infraestructura.
Fácil de testear
Existen herramientas para testear la creación y configuración.

Herramientas para construir infraestructura inmutable

Packer

Herramienta creada por Hashicorp para crear imagenes en cualquier nube, usa formato JSON.

Ejemplo script packer:

variables
Define las variables a utilizar, se puede indicar variables de entorno.
builders
Define el origen de la imagen base.
provisioners
Personaliza la imagen en construcción, permite añadir paquetes, crear directorios, actualizar paquetes.
post-processor
Permite obtener archivos de salida y ejecutar comandos despues de crear la infraestructura.

Terraform

¿Qué es Terraform?

Herramienta Open Source desarrollada en lenguaje Go por HashiCorp, permite crear y administrar infraestructura. Funciona interactúando con las APIs de los proveedores de nube pública como AWZ, Azure o GCP, o privada como Openstack y Vsphere.

Características de Terraform

  • Herramienta de Infraestructura como código.

  • Permite crear planes de ejecución.

  • Fácil de automatizar.

Terraform vs Ansible

Infraestructura mutable
La infraestructura puede tener cambios luego de desplegada para conseguir un nuevo estado.
Infraestructura inmutable
La infraestructura cambia de estado solo a partir del archivo de configuración.
Lenguaje declarativo
Indica qué hacer, en lugar de cómo hacerlo.
Lenguaje procedural o imperativo
Indica cómo hacer, en lugar de qué hacer.
Terraform Ansible
Gestión de infraestructura Gestión de configuración
Infraestructura inmmutable Infraestructura mutable
Lenguaje declarativo (Packer) Lenguaje procedimental


terraformiacdevopsautomation Share Tweet Tweet