En este tema, aprenderemos cómo usar Terraform para aprovisionar recursos en Microsoft Azure. Azure es una de las principales plataformas de nube pública, y Terraform facilita la gestión de su infraestructura de manera declarativa. Exploraremos los conceptos básicos, configuraciones y ejemplos prácticos para que puedas comenzar a aprovisionar recursos en Azure con Terraform.

Contenidos

Configuración Inicial

Antes de comenzar a aprovisionar recursos en Azure, necesitamos asegurarnos de que tenemos las herramientas necesarias instaladas y configuradas.

Requisitos Previos

  • Cuenta de Azure: Necesitarás una cuenta de Azure activa.
  • Terraform: Asegúrate de tener Terraform instalado en tu máquina. Puedes seguir las instrucciones del Módulo 1: Instalando Terraform.

Autenticación en Azure

Para que Terraform pueda interactuar con Azure, necesitamos autenticarnos. La forma más común es usar el CLI de Azure (Azure CLI).

  1. Instalar Azure CLI:

    curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
    
  2. Iniciar sesión en Azure:

    az login
    

    Esto abrirá una ventana del navegador para que inicies sesión con tu cuenta de Azure.

Proveedores de Azure

Terraform utiliza proveedores para interactuar con diferentes servicios en la nube. Para trabajar con Azure, utilizaremos el proveedor azurerm.

Configuración del Proveedor

En tu archivo de configuración de Terraform (main.tf), define el proveedor de Azure:

provider "azurerm" {
  features {}
}

El bloque features {} es obligatorio, aunque puede estar vacío.

Creación de Recursos Básicos

Vamos a crear un recurso básico en Azure: un grupo de recursos (Resource Group). Un grupo de recursos es un contenedor que contiene recursos relacionados para una solución de Azure.

Ejemplo de Configuración

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

Explicación del Código

  • provider "azurerm": Configura el proveedor de Azure.
  • resource "azurerm_resource_group" "example": Define un recurso de tipo azurerm_resource_group con el nombre example.
    • name: Nombre del grupo de recursos.
    • location: Ubicación del grupo de recursos.

Variables y Salidas

Para hacer nuestra configuración más flexible, podemos usar variables y salidas.

Definición de Variables

Crea un archivo variables.tf:

variable "resource_group_name" {
  description = "The name of the resource group"
  type        = string
  default     = "example-resources"
}

variable "location" {
  description = "The location of the resource group"
  type        = string
  default     = "West Europe"
}

Uso de Variables

Actualiza main.tf para usar las variables:

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = var.resource_group_name
  location = var.location
}

Definición de Salidas

Crea un archivo outputs.tf:

output "resource_group_name" {
  description = "The name of the resource group"
  value       = azurerm_resource_group.example.name
}

Ejercicio Práctico

Objetivo

Crear una red virtual (Virtual Network) y una subred (Subnet) en Azure utilizando Terraform.

Instrucciones

  1. Define las variables necesarias para la red virtual y la subred.
  2. Configura el proveedor de Azure.
  3. Crea los recursos de la red virtual y la subred.
  4. Define las salidas para mostrar los nombres de la red virtual y la subred.

Solución del Ejercicio

Definición de Variables

variables.tf:

variable "resource_group_name" {
  description = "The name of the resource group"
  type        = string
  default     = "example-resources"
}

variable "location" {
  description = "The location of the resource group"
  type        = string
  default     = "West Europe"
}

variable "vnet_name" {
  description = "The name of the virtual network"
  type        = string
  default     = "example-vnet"
}

variable "subnet_name" {
  description = "The name of the subnet"
  type        = string
  default     = "example-subnet"
}

variable "address_space" {
  description = "The address space of the virtual network"
  type        = list(string)
  default     = ["10.0.0.0/16"]
}

variable "subnet_prefix" {
  description = "The address prefix of the subnet"
  type        = string
  default     = "10.0.1.0/24"
}

Configuración del Proveedor y Recursos

main.tf:

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = var.resource_group_name
  location = var.location
}

resource "azurerm_virtual_network" "example" {
  name                = var.vnet_name
  address_space       = var.address_space
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_subnet" "example" {
  name                 = var.subnet_name
  resource_group_name  = azurerm_resource_group.example.name
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefixes     = [var.subnet_prefix]
}

Definición de Salidas

outputs.tf:

output "vnet_name" {
  description = "The name of the virtual network"
  value       = azurerm_virtual_network.example.name
}

output "subnet_name" {
  description = "The name of the subnet"
  value       = azurerm_subnet.example.name
}

Conclusión

En este tema, hemos aprendido cómo aprovisionar recursos en Azure utilizando Terraform. Hemos cubierto la configuración inicial, la definición del proveedor de Azure, la creación de recursos básicos, y el uso de variables y salidas. Además, hemos realizado un ejercicio práctico para reforzar los conceptos aprendidos.

En el siguiente tema, exploraremos cómo aprovisionar recursos en Google Cloud Platform (GCP) utilizando Terraform. ¡Sigue adelante y sigue aprendiendo!

© Copyright 2024. Todos los derechos reservados