Terraform para provisionar en AWS

En este tutorial vamos a ver un uso básico de Terraform para provisionar infraestructura en AWS desde nuestra consola.

Índice de contenidos

1. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2,3 GHz Intel Core i7, 16GB DDR3).
  • Sistema Operativo: Mac OS High Sierra 10.13.3
  • Visual Studio Code v1.20.0
  • Terraform v0.11.3
  • Terraform provider.aws v1.9.0

2. Terraform: Qué es y cómo instalarlo.

Terraform es un software de código libre que permite, a partir de un lenguaje de alto nivel, crear el plan de construcción de una infraestructura compleja (Infrastructure as Code).

Descargar Terraform y seguir los pasos de instalación. Comprobar que Terraform está instalado:

3. Inicialización

Elegir un directorio donde alojar los fuentes y crear un fichero main.tf. Dentro inicializaremos nuestro proveedor cloud. Para el ejemplo usaremos AWS, pero aquí está la lista completa de proveedores.
Dentro del fichero main.tf escribimos la instrucción que nos dejará Terraform configurado para usar AWS:

Una vez creado el fichero y asignado el provider inicializamos Terraform:

La ejecución de este comando nos dejará nuestro directorio configurado para el uso de Terraform. Dentro habrá creado un directorio .terraform y un fichero terraform.tfstate donde alberga la configuración.
Terraform automáticamente buscará y descargará la última versión del provider seleccionado.

4. Consulta y creación de recursos en la nube

Ahora que tenemos inicializado Terraform y los binarios del provider (en este caso AWS) descargados podemos empezar a provisionar nuestro cloud con diferentes componentes. Antes de continuar debemos conocer cuál es el ACCESS_KEY y el SECRET_KEY de la cuenta de AWS.
El SECRET_KEY solo es visible la primera vez que lo creamos, es decir, no se puede consultar de nuevo. Si no se dispone de estos datos es posible crearlos nuevos a partir de la documentación oficial.

Para la ejecución de las siguientes instrucciones es necesario indicar tanto el ACCESS_KEY como SECRET_KEY. Podemos indicarlos explícitamente en el fichero main.tf de la siguiente forma:

Esta no es la forma más segura, ya que dejaría expuestos nuestros datos aunque puede servir para el propósito de la prueba. Otra opción sería indicar estos datos antes de la ejecución de la instrucción:

Ejecutamos el comando para ver qué cambios hay con respecto a AWS. Ejecutar el siguiente comando:

No hay diferencias. Vamos a crear una instancia EC2 a través del script de Terraform. Añadimos la siguiente sentencia al fichero main.tf:

Al volver a ejecutar el comando anterior nos indica que, si se aplican los cambios, se crearía una nueva instancia EC2:

5. Aplicando los cambios

Llevar a cabo este paso puede acarrear gastos si hemos pasado el tiempo de gracia de la capa gratuita de AWS. Ejectuar el siguiente comando para aplicar los cambios:

Si se inicia sesión en la consola de AWS la instancia EC2 se habrá creado.

6. Destruir cambios

Vamos a deshacer lo que hemos creado:

7. Conclusiones

El ejemplo es muy simple pero una infraestructura mucho más compleja podría crearse de igual forma. Estos mismo pasos podríamos hacerlos directamente desde la consola del proveedor, pero es muy propenso a errores además de tedioso. Crear un script para gestionar nuestro cloud desde Terraform nos aporta la flexibilidad de crear, modificar o borrar recursos de forma automatizada además de poder tener documentada y versionada la arquitectura de nuestra aplicación.

8. Referencias