Ahora que estoy preparándome para el examen AZ-900: Azure Fundamentals y además de haber escrito algo sobre infraestructura como código, me animé a investigar en cómo desplegar infraestructura en Azure a través la herramienta Terraform.
Terraform nos permite describir nuestra infraestructura a través de scripts (práctica IaC). De esta forma nuestra infraestructura es tratada de la misma manera que cualquier otro código (versionar, ejecutar, probar).
En esta ocasión voy a experimentar el despliegue de infraestructura (una Virtual Machine) en Azure a través de Terraform. ¡Adelante!
Requisitos
Terraform
La instalación es sencilla, solo sigue lo que estable la documentación según su SO: https://learn.hashicorp.com/terraform/getting-started/install.html
Editor de código
Personalmente, mi editor de código preferido es Visual Studio Code. Para trabajar con Terraform puedes usar las siguientes extensiones:
- Terraform - Syntax highlighting, linting, formatting, and validation for Hashicorp's Terraform.
- Azure Terraform - VS Code extension for developing with Terraform on Azure.
Una cuenta de Azure
Puedes conseguir 200 USD para la prueba gratuita de Azure a través del siguiente link: https://azure.microsoft.com/en-us/free/
Azure CLI
La interfaz de la línea de comandos de Azure (CLI de Azure) es un conjunto de comandos que se usa para crear y administrar recursos de Azure. Para instalarlo sigues los pasos del siguiente link:
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest
Comandos Terraform
- terraform init: Es el comando de partida para iniciar una nueva o ya existente configuración.
- terraform plan: Muestra qué infraestructura se va a crear.
- terraform apply: Crea, modifica o elimina la infraestructura definida en el archivo de configuración.
- terraform destroy: Elimina toda la infraestructura definida en el archivo de configuración (¡Tener cuidado!)
Paso a paso
Paso 1
Iniciar sesión en Azure CLI con el comando az login en una línea de comandos.
Paso 2
Crear nuestro archivo de configuración Terraform (extensión .tf) y definir nuestra infraestructura a crear, en nuestro caso una máquina virtual Windows.
// configurar Azure Provider
provider "azurerm" {
version = "=2.9.0"
features {}
}
// crear un grupo de recursos
resource "azurerm_resource_group" "main" {
name = "terraform-rg"
location = "West Europe"
}
// crear red virtual donde tiene que estar la VM
resource "azurerm_virtual_network" "main" {
name = "rc-network"
address_space = ["10.0.0.0/16"]
location = "${azurerm_resource_group.main.location}"
resource_group_name = "${azurerm_resource_group.main.name}"
}
// crear una subred virtual
resource "azurerm_subnet" "internal" {
name = "internal"
resource_group_name = "${azurerm_resource_group.main.name}"
virtual_network_name = "${azurerm_virtual_network.main.name}"
address_prefix = "10.0.2.0/24"
}
// crear una interfaz de red para la VM
resource "azurerm_network_interface" "main" {
name = "rc-nic"
location = "${azurerm_resource_group.main.location}"
resource_group_name = "${azurerm_resource_group.main.name}"
ip_configuration {
name = "testconfiguration1"
subnet_id = "${azurerm_subnet.internal.id}"
private_ip_address_allocation = "dynamic"
}
}
// crear la máquina virtual
resource "azurerm_virtual_machine" "main" {
name = "rcdevopsvm"
location = "${azurerm_resource_group.main.location}"
resource_group_name = "${azurerm_resource_group.main.name}"
network_interface_ids = ["${azurerm_network_interface.main.id}"]
vm_size = "Standard_DS1_v2"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_image_reference {
publisher = "microsoftwindowsserver"
offer = "WindowsServer"
sku = "2016-Datacenter"
version = "latest"
}
storage_os_disk {
name = "rcwinserver"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Standard_LRS"
}
os_profile {
computer_name = "rcwinservervm"
admin_username = "testadmin"
admin_password = "Password1234!"
}
os_profile_windows_config {
enable_automatic_upgrades = true
provision_vm_agent = true
}
}
Paso 3
Desde la terminal embebida de Visual Studio Code ejecutar el siguiente comando:
> terraform init
Paso 4
Para comprobar que infraestructura se va a desplegar ejecutar el siguiente comando:
> terraform plan
Paso 5
Para desplegar la infraestructura ejecutar el siguiente comando:
> terraform apply
Paso 6
Ir al portal de Azure y ver que la infraestructura se haya creado correctamente.
Paso 7
Para eliminar nuestra infraestructura de pruebas y así evitar gastos en Azure ejecutar el siguiente comando:
> terraform destroy
Conclusión
Con este ejemplo sencillo ahora entiendo un poco más el poder de gestionar la infraestructura a través de una herramienta como Terraform. Realmente se comprueba la hipótesis de que la práctica técnica de Infraestructura como Código contribuye a la entrega rápida de valor.
En un siguiente articulo trataré el uso de Terraform usando pipelines de Azure DevOps. Algunos enlaces interesantes:
¡Gracias por llegar hasta aquí!