Infraestructura como código con Terraform

Victoria Laspoumaderes
Caminos a la nubes
Terraform es un software de código libre que permite a partir de un lenguaje de alto nivel crear el plan de construcción

Infraestructura como código con Terraform

Terraform es un mundo en sí mismo, y la idea de este breve resumen es comentar un poco sobre qué es la Infraestructura como Código y cómo empezar a usarla con Terraform. Terraform es un software de código libre que permite a partir de un lenguaje de alto nivel crear el plan de construcción de una infraestructura compleja, esto sería Infrastructura como Código (Infrastructure as Code o IasCode).

¿Qué es Infraestructura cómo código?

Infraestructura como código se refiere a la práctica de utilizar scripts para configurar la infraestructura de una aplicación como máquinas virtuales, en lugar de configurar estas máquinas de forma manual.

La infraestructura como código nos facilita la gestión de las máquinas virtuales de manera “programada”, lo que elimina la necesidad de realizar configuraciones manuales (y actualizaciones) de componentes de forma individual sobre cada una. Esto es una construcción de infraestructura más consistente y de mayor calidad con mejores capacidades de administración, maximizando la eficiencia y evitando los errores humanos.

El resultado es una infraestructura muy elástica, escalable y replicable gracias a la capacidad de modificar, configurar y apagar cientos de máquinas en cuestión de minutos con solo una acción de nuestra parte.

Las mejores prácticas de DevOps, incluido el control de versiones, las pruebas y el monitoreo continuo, se aplican al código que gobierna la creación y administración de la infraestructura. Básicamente, la infraestructura es tratada de la misma manera que cualquier otro código.

Los equipos ahora pueden implementar o actualizar una infraestructura formada por docenas de servidores en cuestión de minutos sin necesidad de instalar absolutamente nada. Simplemente se activa el proceso que se ha escrito en el código y las máquinas hacen el trabajo. Si es necesario es posible retroceder a la última versión estable de la configuración del servidor haciendo que las pruebas sean más sencillas.

Gestión de configuración vs Orquestación

Habiendo hecho un resumen básico de lo que es la infraestructura cómo código, es importante hacer esta aclaración ¿Entonces cuál es la mejor herramienta para gestionar la configuración?

Existen variedad de herramientas como Chef, Puppet, Ansible y SaltStack que sirven para la “gestión de configuración” lo que significa que están diseñadas para instalar y administrar software en servidores existentes.

Terraform, CloudFormation, OpenStack y otros, son “herramientas de orquestación” lo que significa que están diseñadas para aprovisionar los servidores, dejando el trabajo de configurar esos servidores para otras herramientas.

Estas dos categorías no se excluyen, ya que la mayoría de las herramientas de gestión de configuración pueden realizar cierto grado de aprovisionamiento y la mayoría de las herramientas de orquestación pueden realizar cierto grado de gestión de configuración. Pero el enfoque en la gestión de la configuración o la orquestación significa que algunas de las herramientas se adaptarán mejor a ciertos tipos de tareas.

Ambas tareas, gestión de configuración y orquestación forman parte del ciclo de vida de las aplicaciones y la infraestructura en un equipo DevOps. Ambas son tareas de automatización, pero con enfoques distintos.

Ahora bien, ¿qué es Terraform y qué podemos hacer con ella?

“Terraform es una herramienta para construir, combinar y poner en marcha de manera segura y eficiente la infraestructura. Desde servidores físicos a contenedores hasta productos SaaS (Software como un Servicio), tiene la capacidad para crear y construir todos los componentes necesarios para ejecutar cualquier servicio o aplicación.”

Se define la infraestructura completa como código, incluso si se extiende a múltiples proveedores de servicios. Por ejemplo, los servidores pueden estar de Openstack, el DNS en AWS, y Terraform construirá todos los recursos a través de estos proveedores en paralelo. Con esta acción se proporciona un flujo de trabajo y se usa como herramientas para cambiar y actualizar la infraestructura con seguridad.

Los archivos de configuración describen en Terraform los componentes necesarios para ejecutar una sola aplicación o el centro de datos completo. Terraform genera un plan de ejecución que describe lo que hará para alcanzar el estado deseado y luego lo ejecuta para construir la infraestructura descrita. A medida que cambia la configuración, puede determinar qué ha cambiado y crear planes de ejecución incrementales que se pueden aplicar.

La infraestructura que Terraform puede administrar incluye componentes de bajo nivel, como instancias de cómputo, almacenamiento y redes, así como componentes de alto nivel como entradas de DNS, características de SaaS, etc.

Las principales características de Terraform son:

Infraestructura como código: La infraestructura se describe utilizando una sintaxis de alto nivel. Esto permite que un blueprint sea versionado y tratado como lo haría con cualquier otro código. Estos archivos que describen la infraestructura pueden ser compartidos y reutilizados.

Planes de Ejecución: Terraform tiene un paso de “planificación” donde genera un plan de ejecución. El plan de ejecución muestra lo que hará Terraform cuando se ejecute. Esto permite evitar sorpresas.

Gráfico de recursos: Terraform crea un gráfico de todos los recursos y paraleliza la creación y modificación de cualquier recurso. Con esto los operadores obtienen información sobre las dependencias en la infraestructura.

Automatización de cambios: Los conjuntos de cambios complejos se pueden aplicar a su infraestructura con una mínima interacción humana. Con el plan de ejecución y el gráfico de recursos mencionados anteriormente, se sabe exactamente qué cambiará Terraform y en qué orden, evitando muchos posibles errores humanos.

Primeros pasos con Terraform

Antes de ejecutar un ejemplo es necesario conocer algunos conceptos de terraform:

1. Archivos de configuración

Terraform utiliza archivos de texto para describir la infraestructura y establecer variables. El lenguaje de los ficheros de configuración de Terraform se llama HashiCorp Configuration Language (HCL). Los ficheros se deberán crear con la extensión “.tf”.

El formato de los archivos de configuración puede estar en dos formatos: formato Terraform y JSON. El formato de Terraform es más legible, admite comentarios y es el formato generalmente recomendado para la mayoría de los archivos de Terraform. El formato JSON está destinado a las máquinas para crear, modificar y actualizar, pero los operadores de Terraform también pueden hacerlo si lo prefiere. El formato Terraform termina en .tf y el formato JSON termina en .tf.json.

2. Proveedores de Terraform

Terraform se utiliza para crear, administrar y actualizar recursos de infraestructura como máquinas físicas, máquinas virtuales, routers , contenedores y más. Casi cualquier tipo de infraestructura puede representarse como un recurso en Terraform.

Un proveedor es responsable de comprender las interacciones de API entre terraform y la plataforma proveedora de los recursos y crear los recursos.

Los proveedores generalmente son IaaS, por ejemplo:

  • AWS
  • GCP
  • Microsoft Azure
  • OpenStack
  • Digital Ocean

Proveedores de PaaS:

  • Heroku
  • Nutanix
  • Rancher
  • Kubernetes (No es completamente un PaaS)

Servicios SaaS:

  • Terraform Enterprise
  • DNSimple
  • CloudFlare
  • Bitbucket
  • Datadog

La lista completa de proveedores se encuentra en la documentación oficial: https://www.terraform.io/docs/providers/index.html

La mayoría de los proveedores requieren algún tipo de configuración para proporcionar información de autenticación, URLs, etc. Cuando se requiere una configuración explícita, se utiliza un bloque de proveedor dentro de la configuración.

Referencias:

https://terraform-infraestructura.readthedocs.io/es/latest/caracteristicas/index.html

https://www.terraform.io/intro/index.html

https://learn.hashicorp.com/terraform/getting-started/install

https://terraform-infraestructura.readthedocs.io/es/latest/

Victoria Laspoumaderes

DevOps Engineer-

Uno de mis mayores valores es mi entusiasmo por aprender y mejorar mi conocimiento día a día. Me destaco por ser autodidacta y proactiva. Trabajo bien en equipo. Tengo buena tolerancia trabajando bajo presión, encarar nuevos desafíos y me esfuerzo para lograr los objetivos que me propongo.
Disfruto transmitiendo a otros lo que voy aprendiendo. Creo en el fundamento del dar para recibir.
Soy apasionada por la tecnología y trabajo a diario por la inclusión de más mujeres en #STEM.
Participo de comunidades como #LasDeSistemas y #WomenWhoCodeBsAs donde trabajamos en disminuir la brecha de genero en IT.

Related Posts

Únete a nuestra Newsletter

Lidera la Conversación en la Nube