En el artículo de hoy vamos a ver cómo crear nuestro primer módulo de Terraform. Podemos pensar en los módulos de terraform como nuestros métodos/funciones en C# u otro lenguaje como Java o Python.

Al final el uso de métodos nos ayuda a no tener que repetirnos DRY (Don´t repeat yourself) y esto mismo es lo que conseguimos haciendo uso de módulos en Terraform.

Pero nada mejor que un ejemplo, pensemos en el ejemplo de mí articulo sobre Crear un Azure WebApp . El código de Terraform de este ejemplo era el siguiente:

En este ejemplo creábamos un webapp y un AppServicePlan asociado a este webApp. Pues ahora vamos a hacer este mismo ejemplo pero abstrayendo la creación del WebApp y del AppServicePlan en un módulo.

Lo primero que vamos a hacer es crearnos nuestra estructura de carpeta. Para ello vamos a tener una estructura de carpeta así:

En la carpeta raíz creamos un fichero main.tf

Dentro de la carpeta WebApp de Modules creamos los ficheros main.tf y variables.tf

Dentro de main.tf de la carpeta WebApp ponemos este contenido:

Con locals definimos una serie de “constantes” fijas que tienen valores que son usadas múltiples veces dentro del módulo. Por ejemplo definimos el location donde queremos que se implementen nuestros recursos, en nuestro caso West Europe. La forma de usar locals en nuestros resources es:

local.[nombre_constante_local]

Después de locals, definimos nuestros recursos igual que haríamos si tuviéramos un único fichero de terraform. Lo que si hacemos es parametrizar la mayoría de valores en variables , los cuales vamos a definir en el fichero variables .tf

Ahora incluimos en el fichero variables.tf el siguiente código:

Aquí definimos las variables tales como el nombre del AppServicePlan, el nombre del grupo de recursos donde van a ser implementado los recursos o el nombre/url del webapp a crear. Las variables vendrían a ser nuestros parámetros de nuestro método o función.

Una vez ya tuviéramos creados los ficheros main.tf y variables.tf del módulo, nos queda llamar a este módulo desde nuestro fichero principal de terraform main.tf

En este fichero hacemos la invocación al módulo de la siguiente manera.

Con source definimos la ruta donde está ubicado el módulo. Respecto al tema de la ubicación del módulo, aparte de definir una ruta de nuestro equipo podemos definir una url, por ejemplo un repositorio de git como:

module “webserver_cluster” { source =” https://github.com/recetasdevops/TerraformModules/tree/master/webappmodule ” }

En las siguientes líneas definimos el valor de las variables que hemos definido en variables.tf y que son usadas en el módulo.

Una vez creado el fichero main.tf nos queda probar que podemos desplegar correctamente nuestra infraestructura. Lanzamos terraform init

Recordad que tanto si agregáis un módulo nuevo, como si modificáis un modulo existente deberéis de volver a lanzar el comando terraform init

Ahora lanzamos terraform plan para ver que infraestructura va a ser desplegada.

Vemos que se van a implementar dos recursos nuevos que son un nuevo AppServicePlan y un nuevo WebApp. Ahora solo nos queda lanzar terraform apply -auto-approve

Todo el código del módulo puede ser encontrado aquí

Espero os haya gustado¡¡¡

Leave a Reply

Your email address will not be published. Required fields are marked *