Desplegar recursos en Azure con Terraform

Desde hace ya tiempo la infraestructura como código se ha convertido en algo casi obligatorio en muchas de las empresas que visitamos. Principalmente porque ahorras tiempo en la creación de entornos repetitivos y porque además nos puede ayudar en un momento delicado como puede ser la recuperación de un entorno, donde el tiempo es crucial. Hoy quiero contarte cómo de sencillo es configurar Terraform para Microsoft Azure con un ejemplo básico.

Instalar terraform

Si todavía no lo tienes configurado, debes descargar el ejecutable de Terraform para tu sistema operativo. Ubícalo en una carpeta dentro de tu sistema de ficheros y añade la ruta del directorio como parte del path. Por ejemplo, en Mac OS podrías hacerlo de la siguiente manera:

export PATH="$PATH:/Users/gis/Tools"

Si todo ha ido bien, ya podrás usar el comando terraform en la linea de comandos.

Crear un service principal en Azure AD para Terraform

Para poder desplegar recursos utilizando Terraform es recomendable que dediques un Service Principal específico, que se encargue de lanzar las peticiones definidas en tus script a tu suscripción de Azure. Para ello puedes crear este objeto con las siguientes líneas:

#Log in Azure
az login

SUBSCRIPTION_ID="your_subscription_id"

#Set the subscription you want
az account set --subscription $SUBSCRIPTION_ID

#Create a service principal as Contributor
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"

Copia la información de salida para el siguiente paso.

Script de ejemplo

El siguiente paso es el punto principal de uso de Terraform, que es la definición del script con los recursos que queremos crear de manera automatizada. Crea un archivo llamado resource-group.tf y añade lo siguiente:

provider "azurerm"{
    subscription_id = "subscription_id"
    client_id       = "your_appId"
    client_secret   = "your_password"
    tenant_id       = "your_tenant_id"
}

resource "azurerm_resource_group" "rg" {
    name = "Terraform"
    location = "northeurope"
}

Con la salida del comando de creación del service principal debes rellenar los valores del proveedor azurerm. Si no quieres incluir dichos valores dentro del script, también puedes utilizar las siguientes variables de entorno:

#Environment variables for Terraform
export ARM_SUBSCRIPTION_ID=$SUBSCRIPTION_ID
export ARM_CLIENT_ID=your_appId
export ARM_CLIENT_SECRET=your_password
export ARM_TENANT_ID=your_tenant_id

y el script anterior quedaría simplemente así:

provider "azurerm"{   
}

resource "azurerm_resource_group" "rg" {
    name = "Terraform"
    location = "northeurope"
}

Guarda el archivo y en la ubicación de este ejecuta el comando terraform init.

terraform init

Este comando comprobará los plugins que son necesarios para poder lanzar tu script y los descargará en una nueva carpeta llamada terraform.

Plugins descargados con terraform init

Antes de lanzar el script contra tu suscripción de Azure, puedes ejecutar terraform plan para visualizar qué es lo que va a ocurrir cuando tu plantilla se aplique.

terraform plan

Una vez que consideres que está todo listo ya puedes ejecutar terraform apply. Te pedirá confirmación y acto seguido comenzará con la creación de los recursos del script.

terraform apply

Si compruebas los grupos de recursos dentro de tu suscripción, ahora debería de existir uno nuevo llamado Terraform.

En la documentación de la herramienta tienes toda la información necesaria para la creación de diferentes tipos de recursos soportados en Microsoft Azure. En esta cuenta de GitHub también tienes diferentes ejemplos.

¡Saludos!