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
- 2. Terraform: Qué es y cómo instalarlo.
- 3. Inicialización
- 4. Consulta y creación de recursos en la nube
- 5. Aplicando los cambios
- 6. Destruir cambios
- 7. Conclusiones
- 8. Referencias
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:
terraform -v
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:
provider "aws" { region = "eu-west-1" }
Una vez creado el fichero y asignado el provider inicializamos Terraform:
terraform init
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.
terraform provider -v
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:
provider "aws" { region = "eu-west-1" access_key = "myaccesskey" secret_key = "mysecretkey" }
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:
AWS_ACCESS_KEY_ID=myaccesskey AWS_SECRET_ACCESS_KEY=mysecreskey terraform plan
Ejecutamos el comando para ver qué cambios hay con respecto a AWS. Ejecutar el siguiente comando:
terraform plan
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:
provider "aws" { region = "eu-west-1" } # Crear una instancia ec2 de nombre 'example' resource "aws_instance" "example" { ami = "ami-c90195b0" # ubuntu AMI (free tier) instance_type = "t2.micro" }
Al volver a ejecutar el comando anterior nos indica que, si se aplican los cambios, se crearía una nueva instancia EC2:
terraform plan
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:
terraform apply
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:
terraform destroy
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.