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í!
 
No comments:
Post a Comment