Cómo utilizar los bucles en Terraform

La infraestructura de red es algo fundamental para muchas organizaciones. Las ventajas de utilizar servicios en la nube han hecho que muchas organizaciones transfieran sus cargas de trabajo a la nube. Gestionar eficazmente los recursos dentro de estas infraestructuras en la nube requiere habilidades avanzadas (herramientas) y una buena experiencia. Hay muchas herramientas disponibles hoy en día para automatizar la infraestructura basada en la nube. Terraform es una de esas herramientas que ha ganado recientemente una enorme popularidad en el mundo de DevOps.

¿En qué consiste Terraform?

Terraform es una herramienta de código abierto desarrollada y mantenida por HashiCorp. Utiliza su propio Lenguaje de Configuración de Hashicorp- HCL para aprovisionar a múltiples proveedores de servicios en la nube. Básicamente, Terraform comparará la configuración actual de tu infraestructura con el estado deseado y sólo modificará aquellas partes de la infraestructura que sean necesarias para alcanzar el estado deseado.

Terraform utiliza plugins, a los que llama proveedores, que corresponden a diferentes proveedores de servicios en la nube y empresariales, como AWS, Azure, vSphere, etc. Un proyecto de Terraform se encuentra dentro de su propio directorio que contiene varios archivos relacionados con el proyecto. Terraform no afecta a todos los recursos de tu cuenta en la nube; sólo se ocupa de los componentes que se gestionan a través de su plan. Utiliza archivos de estado (de formato JSON) para almacenar el estado actual de la infraestructura.

¿Qué hace que Terraform destaque?

Una de las cosas interesantes que distingue a Terraform de otras herramientas es que te permite decir lo que quieres y resolverá cómo conseguirlo sin necesidad de preocuparte de todos los comandos de nivel básico para conseguirlo. Otro hecho menos conocido (o puede que ya lo sepas), es que los plugins que se vinculan con las API del proveedor de servicios en la nube, son diseñados actualmente por el propio proveedor de servicios en la nube. Esto significa que la propia AWS mantiene su proveedor de AWS para Terraform. Esto es algo bueno, ya que el proveedor se mantendrá actualizado con el espacio de la API de AWS.

¿Qué aprenderemos aquí?

En este tutorial, te mostraré cómo utilizar las construcciones de bucle en Terraform. Veremos varios ejemplos de uso de algunas construcciones de bucle. Continuemos con este post.

Empecemos…

Hay diferentes tipos de construcciones de bucle en Terraform, cada una tiene su caso de uso específico:

1. parámetro «count»: Esto crea múltiples copias de un recurso o módulo. Un argumento «count» dará lugar a tantos objetos como el valor de «count» para ese recurso o módulo. El argumento «count» toma un número entero.

También hay un objeto de tipo recuento que funciona con el argumento recuento. Con este objeto cambiamos la configuración por instancia. Utiliza «índice» como único atributo. El número de índice empieza por cero. Más adelante veremos los usos de cada caso.

Ejemplo de uso del parámetro ‘count’:

El siguiente ejemplo muestra el procedimiento de creación de múltiples Instancias EC2 Idénticas:

resource "aws_instance" "web-ec2" {
  count         = 5
  ami           = “ami-xxxx”
  instance_type = “t2.micro”
}

Ejemplo de parámetro de recuento con una instancia EC2 idéntica.

Ejemplo de salida:

Plan: 5 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
Enter a value:

El código anterior creará 5 instancias EC2 idénticas. En caso de que necesitemos crear múltiples instancias EC2 con diferentes nombres, el código anterior se modificará como:

resource "aws_instance" "web-ec2" {
  count         = 5
  ami           = ami-xxxx
  instance_type = t2.micro
tags {
Name = “my-server-${count.index}”
}
}

La configuración anterior dará como resultado cinco instancias EC2 con nombres: mi-servidor-0 a mi-servidor-4.

Ejemplo de parámetro de recuento con una instancia EC2 no idéntica.

2. Expresiones ‘for’: La expresión ‘for’ en Terraform hace un bucle sobre los elementos de una lista, un mapa, un objeto, etc. Tiene la siguiente sintaxis:

[for <item or element> in <Name_of_List> : <OUTPUT>]

Aquí ‘Nombre_de_la_Lista’ es el nombre de la Lista sobre la que se va a iterar. ‘Elemento’ o ‘elemento’ es el nombre de la variable adjunta a cada elemento de la LISTA anterior.

Ejemplo de uso de la expresión ‘for’: El siguiente código imprimirá la versión en mayúsculas de los elementos de la lista:

variable "demo" {
 description = "A list of items"
 type        = list(string)
 default     = ["one", "two", "three"]
}
output "upper_case" {
 value = [for name in var.demo : upper(name)]
}

3. Expresiones ‘for_each’: Terraform introdujo las expresiones ‘for_each’ a partir de la versión 0.12. Con esta expresión podemos iterar los elementos dentro de una lista, un conjunto y un mapa. Podemos utilizar esta expresión para crear numerosas réplicas de un recurso completo o réplicas de un bloque en línea dentro de un recurso. El formato básico de la expresión ‘for_each’ es:

resource "<Name_of_the_Provider>_<Type_of_resource>" "<identifier>" {
 for_each = <COLLECTION(set or map)>  
[Code ...]
}

Aquí especifica el proveedor en lugar de ‘Nombre_del_proveedor’. ‘Tipo_de_recurso’ especifica el tipo de recurso que se va a obtener.

Ejemplo de uso de la expresión ‘for_each’: El siguiente ejemplo demuestra cómo crear usuarios IAM utilizando la expresión ‘for_each’:

resource "aws_iam_user" "iam-accounts" {
  for_each = toset( ["tecofers", "HowToForge", "Demo"] )
  name     = each.key
}

La función ‘toset’ se utiliza para la conversión a conjuntos. ‘each.key’ es una clave de mapa relativa a una instancia. Del mismo modo, ‘cada.valor’ es un valor del mapa relativo a una instancia. El código anterior creará tres usuarios IAM mencionados dentro de la lista.

Nota: Las construcciones count y for_each no pueden estar presentes simultáneamente.

Para terminar

En esta guía, hemos visto diferentes construcciones de bucle en Terraform y cómo se pueden utilizar. En el próximo post trataremos de explorar los módulos de Terraform, así que permanece atento a HowToForge.

Referencia: https://mediaspace.wisc.edu/media/Introduction+y+Gestión+de+Infraestructuras+con+Terraform+-+Brian+Hill/1_qhr9c1os

También te podría gustar...