Table of Contents

Introducción al uso de TeraForm para aplicaciones de Infraestructura como código

A medida que más organizaciones trasladan su infraestructura a la nube, la necesidad de gestionarla eficazmente se vuelve primordial. Aquí es donde entra en juego la Infraestructura como Código (IaC). IaC es el proceso de gestión y aprovisionamiento de infraestructura mediante código, en lugar de procesos manuales. Esto permite una mayor coherencia, velocidad y fiabilidad en la gestión de la infraestructura. Una de las herramientas más populares para IaC es Teraform.

¿Qué es Teraform?

Teraform es una herramienta de software de infraestructura como código de código abierto que permite a los usuarios escribir, planificar y crear infraestructura como código. Desarrollado por HashiCorp, Teraform permite a los usuarios gestionar la infraestructura a través de varios proveedores de nube, incluyendo AWS, Azure y Google Cloud Platform. Con Teraform, los usuarios pueden definir su infraestructura como código en archivos de configuración, aplicar el código para crear o actualizar la infraestructura y destruirla cuando ya no sea necesaria.

Ventajas del uso de Teraform

El uso de Teraform para aplicaciones de infraestructura como código ofrece varias ventajas, entre las que se incluyen:

  • Eficiencia y rapidez: Teraform permite una gestión más rápida y eficiente de la infraestructura al eliminar la necesidad de procesos manuales.

  • Consistencia:** Al utilizar código para definir la infraestructura, Teraform garantiza la consistencia en todos los entornos.

  • Escalabilidad:** Teraform permite escalar fácilmente la infraestructura para satisfacer las crecientes demandas.

  • Colaboración: Los archivos de configuración de Teraform pueden controlarse mediante versiones y compartirse entre los miembros del equipo, lo que facilita la colaboración.

  • Ahorro de costes: La capacidad de Teraform para aprovisionar y desaprovisionar recursos fácilmente puede suponer un ahorro de costes.

Introducción a Teraform

Para empezar a utilizar Teraform, necesitará:

  1. Descargar Teraform: Teraform puede descargarse de la página official website

  2. **Teraform utiliza archivos de configuración escritos en HashiCorp Configuration Language (HCL) o JSON. El archivo de configuración define la infraestructura que desea crear, actualizar o eliminar.

Para utilizar Terraform, es necesario crear un archivo de configuración para definir la infraestructura deseada. El archivo de configuración especifica los recursos que se van a crear, sus propiedades y sus dependencias.

Los archivos de configuración se pueden escribir en HashiCorp Configuration Language (HCL), un lenguaje que está diseñado para ser legible por humanos y fácil de aprender, o en formato JSON. La sintaxis HCL es similar a la de otros lenguajes de programación, utilizando bloques, atributos y valores.

He aquí un ejemplo de un archivo de configuración Terraform básico en formato HCL que crea una instancia AWS EC2:

provider "aws" {
  region = "us-west-2"
}

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

En este ejemplo, el archivo de configuración especifica el proveedor aws y crea un recurso aws_instance con una imagen de máquina de Amazon (AMI) y un tipo de instancia.

O para un ejemplo más avanzado vea el siguiente ejemplo para usar Terraform para configurar sistemas usando VMWare:

provider "vsphere" {
  user           = "[email protected]"
  password       = "password"
  vsphere_server = "vcenter.example.com"
}

data "vsphere_datacenter" "dc" {
  name = "Datacenter"
}

data "vsphere_datastore" "ds" {
  name          = "Datastore"
  datacenter_id = data.vsphere_datacenter.dc.id
}

data "vsphere_network_interface" "nic" {
  label          = "Network adapter 1"
  datacenter_id  = data.vsphere_datacenter.dc.id
  network_id     = "VM Network"
}

resource "vsphere_virtual_machine" "vm" {
  name             = "terraform-vm"
  folder           = "/terraform"
  num_cpus         = 2
  memory           = 2048
  guest_id         = "otherLinux64Guest"
  scsi_type        = "pvscsi"
  datastore_id     = data.vsphere_datastore.ds.id

  network_interface {
    network_id = data.vsphere_network_interface.nic.network_id
  }

  disk {
    label            = "disk0"
    size             = 20
    eagerly_scrub    = true
    thin_provisioned = true
  }

  clone {
    template_uuid = "template-uuid"
  }
}

En este ejemplo, el archivo de configuración especifica el proveedor vsphere y crea un recurso vsphere_virtual_machine con un nombre, carpeta, número de CPUs, cantidad de memoria, SO invitado, tipo SCSI y configuración de disco especificados. También clona la máquina virtual a partir de una plantilla especificada.

El archivo de configuración también utiliza bloques de datos para consultar la infraestructura vSphere y obtener información sobre el centro de datos, el almacén de datos y la interfaz de red que utilizará el recurso de máquina virtual.

Una vez creado el archivo de configuración, puede utilizarse para crear, actualizar o eliminar recursos de infraestructura.

  1. **Una vez creado el archivo de configuración, puede inicializar Teraform ejecutando el comandoterraform init comando. Esto descargará los plugins y módulos necesarios.

Por ejemplo, si tiene un archivo de configuración llamadomain.tf en un directorio llamadoterraform-example puede inicializar Terraform ejecutando el siguiente comando en el directorioterraform-example directorio:terraform init

Esto descargará todos los plugins y módulos necesarios especificados en el archivo de configuración.

  1. Planificar y aplicar la infraestructura: Tras la inicialización, puede ejecutar el programaterraform plan para ver qué cambios se realizarán en la infraestructura y, a continuación, aplicar los cambios mediante el comandoterraform apply mando.

Tras la inicialización, puede planificar los cambios que se realizarán en la infraestructura mediante el comandoterraform plan comando. Esto le mostrará qué recursos se crearán, actualizarán o eliminarán. Por ejemplo, si tiene un archivo de configuración llamadomain.tf en un directorio llamadoterraform-example puede planificar sus cambios de infraestructura ejecutando el siguiente comando:

terraform plan

Esto le mostrará una vista previa de los cambios que se realizarán en la infraestructura.

Una vez que esté satisfecho con los cambios, puede aplicarlos utilizando el botónterraform apply comando. Por ejemplo, si tiene un archivo de configuración llamadomain.tf en un directorio llamadoterraform-example puede aplicar sus cambios de infraestructura ejecutando el siguiente comando:

terraform apply

Esto aplicará los cambios a su infraestructura. Tenga en cuenta que la aplicación de los cambios puede llevar algún tiempo, dependiendo del tamaño y la complejidad de su infraestructura.

Mejores prácticas para el uso de Teraform

Para asegurarse de que está utilizando Teraform eficazmente, considere seguir estas mejores prácticas:

  • Utilice el control de versiones: Almacene sus archivos de configuración de Teraform en el control de versiones para permitir la colaboración y garantizar el seguimiento de los cambios.

  • Utilice módulos:** Utilice módulos Teraform para organizar y reutilizar el código.

  • Separe las configuraciones: Separe sus configuraciones por entorno (por ejemplo, dev, staging, prod) para garantizar la coherencia y evitar la deriva de la configuración.

  • Valida los cambios: Antes de aplicar los cambios a la infraestructura, valídalos utilizando la herramientaterraform plan mando.

Conclusión

Teraform es una potente herramienta de infraestructura como código que permite una gestión de la infraestructura más rápida, eficiente y coherente. Mediante el uso de Teraform, las organizaciones pueden ahorrar tiempo y dinero, a la vez que mejoran la colaboración y la escalabilidad. Siguiendo las mejores prácticas y empezando a utilizar Teraform, podrá beneficiarse de estas ventajas y gestionar su infraestructura de forma más eficaz.


**Referencias

- Teraform Official Website - Teraform Documentation - AWS Best Practices for Security, Identity, & Compliance