Acompáñanos en la lectura de este artículo y simplifica tus despliegues de Infraestructura en Azure con Terraform.
La gestión de la infraestructura en la nube es un aspecto crítico para muchas organizaciones en la actualidad.
Con el rápido crecimiento de la adopción de la nube, se ha vuelto fundamental contar con herramientas que simplifiquen y automaticen el proceso de aprovisionamiento y gestión de recursos en la nube.
Una de estas herramientas destacadas para este labor es Terraform de HashiCorp, que ofrece una forma eficiente y declarativa de definir y desplegar la infraestructura en la nube.
¿Qué es Terraform?
Terraform es una herramienta de infraestructura como código (Infraestructure as Code – IAC) desarrollada por HashiCorp que permite a los usuarios definir y administrar la infraestructura de manera declarativa utilizando una sintaxis simple y legible.
Con Terraform, los usuarios pueden describir la infraestructura deseada en archivos de configuración y luego utilizar estos archivos para aprovisionar y gestionar recursos en la nube de manera automatizada y repetible.
Sintaxis de Terraform:
Una de las características más poderosas de Terraform es su sintaxis declarativa, que permite a los usuarios describir la infraestructura deseada sin preocuparse por los detalles de implementación.
En lugar de especificar los pasos individuales para crear y configurar cada recurso, los usuarios simplemente declaran qué recursos desean y cómo deberían estar configurados.
Terraform se encarga del resto, determinando la mejor manera de implementar la infraestructura para que coincida con la definición declarada.
La sintaxis de Terraform se basa en un lenguaje propio, conocido como HCL (HashiCorp Configuration Language), que está diseñado para ser simple y fácil de entender.
Veamos un ejemplo básico de un archivo de configuración de Terraform para desplegar una máquina virtual en Azure:
# Definimos el proveedor de Azure
provider «azurerm» {
features {}
}
# Definimos los recursos
resource «azurerm_resource_group» «example»
{
name = «myResourceGroup»
location = «East US»
}
resource «azurerm_virtual_network» «example»
{
name = «myVnet»
address_space = [«10.0.0.0/16»]
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
resource «azurerm_subnet» «example»
{
name = «mySubnet»
resource_group_name = azurerm_resource_group.example.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefixes = [«10.0.1.0/24»]
}
resource «azurerm_network_interface» «example»
{
name = «myNIC»
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
ip_configuration {
name = «ipconfig1»
subnet_id = azurerm_subnet.example.id
private_ip_address_allocation = «Dynamic»
}
}
resource «azurerm_linux_virtual_machine» «example» {
name = «myVM»
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
size = «Standard_DS1_v2»
admin_username = «adminuser»
network_interface_ids = [
azurerm_network_interface.example.id,
]
admin_ssh_key {
username = «adminuser» public_key = file(«~/.ssh/id_rsa.pub»)
}
source_image_reference {
publisher = «Canonical»
offer = «UbuntuServer»
sku = «16.04-LTS»
version = «latest»
}
}
En el ejemplo de arriba, se definen una serie de recursos de Azure, incluyendo:
- Un grupo de recursos.
- Una red virtual.
- Una subred.
- Una interfaz de red.
- Una máquina virtual Linux.
Terraform utiliza esta descripción para generar un plan de ejecución que detalla los cambios que se realizarán en la infraestructura existente para alcanzar el estado deseado.
Ventajas de Utilizar Terraform para Azure:
Terraform presenta una serie de ventajas para el desarrollo sobre Azure, incluyendo:
- Declarativo y Legible: Como hemos comentado previamente, la sintaxis declarativa de Terraform hace que sea fácil entender y mantener la configuración de la infraestructura.
- Multiplataforma: Terraform es compatible con varios proveedores de nube, lo que permite gestionar la infraestructura en diferentes entornos desde una sola configuración. Un ejemplo puede ser Azure, AWS, Jotelulu, etc.
- Reutilización de Código: Terraform permite la creación de módulos reutilizables que pueden ser compartidos y utilizados en diferentes proyectos. Los que hemos programado orientado a objetos siempre recordamos que nos enseñaron aquello de reaprovechar el código y cuando no podemos hacerlo nos ponemos de uñas jejeje.
- Gestión de Estado: Terraform mantiene un estado de la infraestructura gestionada, lo que facilita la realización de cambios incrementales y la gestión de la configuración. No, no estamos hablando de impuestos, al emnso esta vez jejejeje.
- Integración con Azure: Terraform proporciona un proveedor oficial de Azure (azurerm) que ofrece soporte completo para los servicios y recursos de Azure.
Conclusión:
Terraform ofrece una forma poderosa y flexible de definir y gestionar nuestra infraestructura en Azure, o en otras nubes como la de Jotelulu o de AWS.
Con su sintaxis declarativa y su capacidad para gestionar recursos en múltiples proveedores de nube, Terraform es una herramienta ideal para automatizar procesos de despliegue de infraestructura en la nube.
Tiene la ventaja de que podemos aprender una forma de desplegar y con pequeños cambios nos adaptamos a otras nubes, cosa que a mi, que soy un culo inquieto me viene bastante bien.
Espero que os resulte útil.
Un saludo