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
- Enfoques para gestión de servidores
- Factores para elegir una herramienta de IaC
- Herramientas conocidas
- Beneficios de la IaC
- Herramientas para construir infraestructura inmutable
- Terraform
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:
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 |