Cómo utilizar módulos del Registro de Terraform

El Registro de Terraform es un lugar donde se pueden encontrar diferentes proveedores y módulos (configuraciones reutilizables de Terraform) y utilizarlos con Terraform. Incluye colaboradores como HashiCorp, proveedores de terceros y la comunidad Terraform. Este registro tiene como objetivo proporcionar plugins para manejar diversas API de infraestructura, poner a disposición módulos existentes para construir rápidamente componentes de infraestructura de uso común y demostrar formas de desarrollar código Terraform escrito de forma eficiente.

¿Qué vamos a cubrir?

En este tutorial, veremos cómo utilizar módulos del Registro Terraform. Lo veremos mediante un ejemplo de creación de una instancia EC2 en AWS.

Comprobación previa

Para este tutorial necesitamos los siguientes requisitos previos:

  1. Terraform instalado en el sistema local.
  2. Conocimientos básicos de los módulos de Terraform.
  3. Cuenta de AWS.

Uso de módulos del registro de Terraform

Los módulos para diferentes proveedores se mantienen en el registro de Terraform. Los módulos se pueden buscar desde la página del registro. Ten en cuenta que al realizar una búsqueda sólo aparecen en los resultados de búsqueda los módulos verificados. Estos módulos son comprobados por HashiCorp para confirmar su compatibilidad y estabilidad. Los módulos no verificados también se pueden listar utilizando la opción de filtrado de búsqueda.

Los módulos publicados en Terraform Registry se pueden referenciar en un código Terraform típico utilizando la sintaxis:

<NAMESPACE>/<Name of module>/<Name of Provider>

Por ejemplo, mira el siguiente uso de módulo del registro de Terraform:

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
}

El ejemplo anterior utiliza un módulo VPC del registro de Terraform para AWS. La ejecución del comando «terraform init» recuperará y almacenará los módulos a los que haga referencia un código Terraform.

El Registro Terraform permite utilizar módulos públicos y privados. El Registro Terraform público permite publicar y consumir abiertamente proveedores y módulos. Los módulos privados pueden publicarse utilizando un registro privado.

Explorar el Registro de Terraform

La página del módulo muestra algunos detalles breves sobre el módulo, como la descripción del módulo, la fecha de publicación, la url del código fuente, las estadísticas de descarga, etc. También puedes ver aquí varias pestañas para Léeme, Entradas, Salidas, Dependencia y Recursos. Podemos consultar estas secciones para seleccionar las variables que vamos a introducir en nuestro código.

También hay ejemplos que demuestran el uso del módulo, por ejemplo, en esta guía se utiliza un módulo para crear una instancia EC2. Antes de sumergirnos en este ejemplo, veamos primero el código fuente de este módulo. Abre la url del código fuente. En la página de github, hay algunas carpetas y algunos archivos para este módulo. Por ahora sólo nos centraremos en los tres archivos de terraformación: main.tf, outputs.tf y variables.tf. El archivo main.tf contiene muchas líneas que describen una instancia EC2. Del mismo modo, los archivos variables.tf y outputs.tf contienen varias declaraciones de valores de entrada y salida.

Lanzar una instancia EC2 utilizando un Módulo

Veamos ahora cómo podemos utilizar un módulo del registro de Terraform. Crearemos una instancia EC2 utilizando un módulo de ‘terraform-aws-modules’.

Paso 1. Abre la página web del Registro de Terraform y busca el módulo aws para EC2:

Módulos de seraching desde la página web del Registro de Terraform
Paso 2. Haz clic en el resultado de la búsqueda ‘terraform-aws-modules/ec2-instance’ como se muestra arriba. Este módulo se utiliza para lanzar una instancia AWS EC2 en nuestro caso.

Ahora, mira el siguiente archivo de configuración que hemos creado localmente en nuestro sistema para trabajar con este módulo. En este archivo hemos incluido el módulo anterior utilizando el argumento ‘source’. Sólo hemos utilizado unas pocas declaraciones del módulo real, como se describe aquí:

$ nano myinstance.tf
provider "aws" {
  region = "us-east-1"
}
module "ec2_instance" {
source  = "terraform-aws-modules/ec2-instance/aws"
version = "~> 3.0"

name = "single-instance"

ami                    = "ami-0022f774911c1d690"
instance_type          = "t2.micro"
availability_zone    ="us-east-1a"
key_name               = "Your-Key-pair-name"
monitoring             = true
vpc_security_group_ids = ["Security-Group-ID"]
putin_khuylo    = true

tags = {
Terraform   = "true"
Environment = "dev"
}
}

En esta configuración hay dos argumentos: source y version.

  1. fuente: Este argumento es necesario cuando se utiliza un módulo Terraform. En la configuración del «ejemplo» anterior, Terraform buscará en el registro de Terraform la dirección del módulo citado. Aquí también se pueden utilizar módulos locales, URLs y otras fuentes.
  2. versión: Es un argumento opcional, pero se recomienda utilizarlo cuando se trabaja con un módulo de Terraform. Si se incluye, carga la versión especificada del módulo Terraform para fuentes compatibles. Si no se utiliza, se cargará la última versión disponible del módulo.

Para empezar, primero, inicializa el directorio que contiene nuestro archivo local ‘miinstancia.tf’. Ejecuta el comando:

comando terraform init

Ahora ejecuta el comando ‘terraform plan’ o utiliza el comando ‘terraform apply’ para poner en marcha directamente los cambios:

$ terraform apply

Introduce «sí» cuando se te solicite. Esto iniciará el proceso de aplicación de los cambios.

Comando de aplicación de Terraform
Esta vez no necesitamos crear explícitamente los archivos variables.tf o output.tf, sino que sólo necesitamos hacer referencia a las variables del repositorio que queremos utilizar. Desde la consola de gestión, abre el panel de EC2 para comprobar si la instancia se ha creado o no:

Concluyendo…

En esta guía hemos visto cómo se pueden utilizar los módulos de registro de Terraform. Del mismo modo, intenta configurar una VPC utilizando un módulo de Terraform.

También te podría gustar...