-->

Terraform from 0 to Hero!(2) - Creando nuestros primeros recursos -

01 Jul 2023 · 4 mins. de lectura

Ya tenemos Terraform instalado y nuestro service principal para poder crear recursos en Azure, si no leíste el primer (post), este es un buen momento para hacerlo ;-). Vamos empezar a jugar un poquito. No te preocupes mucho si de momento no te queda algo claro, en los siguientes posts iremos refrescando los conceptos.

Creando nuestros primeros recursos

Vamos a empezar con algo sencillo. Crearemos un resource group y dentro del resource group pondremos un storage, una virtual network con una subnet y securizaremos nuestro storage account.

El esquema quedaría así: Terraform

Para ello vamos a crear un directorio al que yo en mi caso llamaré test_terraform y dentro crearemos los siguientes ficheros: main.tf, provider.tf y vars.tf

$ mkdir test_terraform 
$ touch main.tf
$ touch provider.tf
$ touch vars.tf

provider.tf


terraform {
  required_providers {
    azurerm = "= 3.63.0"
  }
}
provider "azurerm" {

  features {}

  subscription_id = var.subscription_id
  client_id       = var.client_id
  client_secret   = var.client_secret
  tenant_id       = var.tenant_id
}

main.tf


resource "azurerm_resource_group" "rg" {
  name     = "rg_test"
  location = "West Europe"
}

resource "azurerm_virtual_network" "vnet" {
  name                = "my-vnet"
  address_space       = ["10.0.0.0/16"]
  location            = "${azurerm_resource_group.rg.location}"
  resource_group_name = "${azurerm_resource_group.rg.name}"
}

resource "azurerm_subnet" "subnet" {
  name                 = "subnet1"
  resource_group_name  = "${azurerm_resource_group.rg.name}"
  virtual_network_name = "${azurerm_virtual_network.vnet.name}"
  address_prefixes     = ["10.0.2.0/24"]
  service_endpoints    = ["Microsoft.Storage"]
}

resource "azurerm_storage_account" "storage" {
  name                     = "storageaccountname"
  resource_group_name      = "${azurerm_resource_group.rg.name}"
  location                 = "${azurerm_resource_group.rg.location}"
  account_tier             = "Standard"
  account_replication_type = "GRS"

  tags = {
    environment = "staging"
  }
}

resource "azurerm_storage_account_network_rules" "rules" {
  storage_account_id = azurerm_storage_account.storage.id
  default_action             = "Allow"
  virtual_network_subnet_ids = ["${azurerm_subnet.subnet.id}"]

}

vars.tf


variable subscription_id {
  description = "The azure account subscription id"
  type        = string
  default     = "xxxxxxxxxxxxxxxx"
}

variable client_id {
  description = "The azure account client application id"
  type        = string
  default     = "xxxxxxxxxxxxxxxx"
}

variable client_secret {
  description = "The azure account client secret"
  type        = string
  default     = "xxxxxxxxxxxxxxxx"

}

variable tenant_id {
  description = "The azure account tenant guid"
  type        = string
  default     = "xxxxxxxxxxxxxxxx"
}

Es un ejemplo súper sencillo, básicamente copiado de la documentación de la web de Terraform pero que nos sirve para ver alguna cosa interesante. Fíjate que cuando definimos un reosurce le damos un nombre. Por ejemplo cuando creamos el resource group de azure (azurerm_resource_group) le hemos dado el nombre de “rg”. Este identificador lo podremos usar en recursos posteriores para vincular nuestros resources. De tal manera que el storage y la virtual net que estamos creando después se crearán dentro del resource group creado previamente.

Comandos terraform

El primer comando a ejecutar para inicializar nuestro proyecto de Terraform es:

terraform init

No hay que preocuparse, un terraform init nunca nos borrará nuestro estado ni ninguna configuración existente. Básicamente el comando escanea la configuración en busca de referencias a providers, en el caso de que los providers estén publicados en el registry, Terraform descargará e instalará automáticamente los plugins de providers necesarios.

El siguiente comando a ejecutar será un plan:

terraform plan

Cuando ejecutas el comando “terraform plan”, Terraform analiza los archivos de configuración y genera un plan detallado de los cambios que se aplicarán en tu infraestructura. En lugar de realizar los cambios de inmediato, Terraform examina el estado actual de la infraestructura y compara con la definición deseada en los archivos de configuración. Este comando no nos generará ningún cambio en nuestra infra, pero si nos ayudará para saber exactamente que cambios se van a realizar.

Y por último, ahora sí, vamos a desplegar los cambios con el comando:

terraform apply

El plan de ejecución de Terraform consta de varias etapas que ocurren cuando ejecutas el comando “terraform plan”. Estas etapas son las siguientes:

Pues con esto ya sabemos lo básico para trabajar con Terraform. En los siguientes posts seguiremos profundizando en el uso de Terraform y como llegar a desplegar infrastructura en el mundo real.

Nos gustaría usar cookies de terceros para hacer este sitio mejor. vale