Empezando con Terraform en Windows y Terraform EC2

En el espacio de infraestructura como código (IaC), una de las herramientas más útiles que ha surgido en los últimos años es Terraform de HashiCorp para Windows. La capacidad de versionar la infraestructura, automatizar la provisión de recursos y ejecutar en diferentes proveedores de nube es enorme para cualquier flujo de trabajo de DevOps y automatización.

Un caso de uso para Terraform es en CI/CD. Terraform te permite:

Mis últimos videos

  • crear un entorno de pruebas
  • implementar una aplicación
  • ejecutar pruebas de integración
  • destruir el entorno de pruebas

Todos los pasos se realizan automáticamente. ¡Y no se requiere un centro de datos!

Prerrequisitos

Este artículo es un tutorial sobre cómo instalar y utilizar Terraform para Windows. Si deseas seguirlo, asegúrate de tener los siguientes requisitos previos en su lugar.

  • A Windows 10 device
  • Una cuenta de AWS
  • La CLI de AWS instalada y configurada en ese dispositivo. Puedes aprender cómo instalarla aquí y cómo configurarla aquí.
  • (Opcional) Visual Studio Code con la extensión de Terraform

Instalando la aplicación de Terraform para Windows

Para aprovechar el poder de Terraform, primero debes instalarlo en el sistema operativo de tu elección. En este artículo, me centraré en Windows. Pero ten en cuenta que Terraform también puede ejecutarse en otros sistemas operativos. Si no estás usando Windows, echa un vistazo a la documentación de instalación.

La Manera Difícil

Si no puedes usar un gestor de paquetes o deseas comprender cómo funciona el proceso de instalación, puedes instalar Terraform manualmente. Puedes hacerlo descargando el archivo binario y agregándolo al variable de entorno del sistema. Si esto te parece intimidante, te aseguro que hay una manera más fácil de hacerlo que aprenderás en la siguiente sección.

  1. Descarga la versión adecuada de Terraform desde la página de descargas de HashiCorp. En mi caso, es la versión de Windows de 64 bits.
  2. Crea una carpeta en tu unidad C:\ donde puedas colocar el ejecutable de Terraform. Prefiero colocar instaladores en una subcarpeta (por ejemplo, C:\tools) donde puedes poner los binarios.
  3. Después de que la descarga finalice, busca el archivo en Explorador de archivos. Extrae el archivo zip en la carpeta que creaste en el paso 2.
  4. Abre el menú de Inicio y escribe “entorno” y lo primero que aparecerá debería ser la opción Editar las variables de entorno del sistema. Haz clic en eso y deberías ver esta ventana.
System Properties

5. Haz clic en Variables de entorno… en la parte inferior y verás esto:

Windows environment variables

6. En la sección inferior donde dice Variables del sistema, busca una llamada Ruta y haz clic en editar. Luego verás una lista de dónde encontrar los binarios que Windows podría necesitar por cualquier razón dada.

7. Haz clic en Nuevo y agrega la ruta de la carpeta donde se encuentra terraform.exe al final de la lista. Debería lucir así cuando termines.

Editing the system path

8. Haz clic en Aceptar en cada uno de los menús que has abierto hasta que no haya más.

9. Para asegurarte de que Windows detecte la nueva ruta, abre un nuevo prompt de CMD/PowerShell e ingresa refreshenv.

10. Verifica que la instalación fue exitosa ingresando terraform --version. Si devuelve una versión, estás listo para continuar.

La manera fácil

¡Uf, eso fue mucho trabajo! Sería terrible tener que hacerlo cada vez que necesites instalar un nuevo software en tu dispositivo. Vamos a usar un gestor de paquetes en su lugar. Hay algunos gestores de paquetes que puedes usar para instalar Terraform en Windows. Para Windows, mi favorito es Chocolatey. Hace que instalar, eliminar y actualizar software sea tan simple como un comando de una línea, y Terraform no es una excepción a eso.

Para instalar Terraform con Chocolatey, sigue estos pasos:

  1. Abre un símbolo del sistema/Prompt de PowerShell como administrador e instala Chocolatey usando el comando de su página de instalación.
  2. Una vez que eso esté completo, ejecuta choco install terraform. Si prefieres, también puedes agregar -y al final para aceptar automáticamente la instalación en tu dispositivo.

Después de que se ejecute ese comando, obtendrás algo como esto:

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3. Verifica que la instalación haya sido exitosa ingresando terraform --version.

El método para Linux

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

Sí, y aún lo es. Pero una de las características en Windows 10 es el Subsistema de Windows para Linux, o WSL. Esto te permite ejecutar comandos de Linux en Windows.

  1. Instala WSL. No voy a entrar en detalles sobre cómo instalar y configurar WSL aquí, pero si deseas seguir y aún no lo tienes configurado. Un video de TechSnips que hice sobre este tema se puede encontrar a continuación.

2. En tu terminal de WSL, ejecuta apt-get install unzip. Necesitarás esto para extraer los binarios de Terraform más tarde.

3. Descarga Terraform ejecutando wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip. Recuerda reemplazar la versión y la arquitectura con la que mejor se adapte a tu dispositivo. Puedes encontrar la lista completa de versiones de Terraform aquí.

4. Ejecute unzip terraform_0.12.6_linux_amd64.zip terraform para descomprimir el contenido del archivo zip en una carpeta llamada terraform.

5. Una vez que el archivo ZIP esté descomprimido, necesitará moverlo a algún lugar accesible por la ruta del sistema. Afortunadamente, Linux tiene una carpeta a la que los usuarios pueden agregar binarios de forma predeterminada. Mueva el binario de Terraform allí ejecutando mv terraform /usr/local/bin/. La carpeta /usr/local/bin ya está configurada en la ruta de su sistema.

6. Verifique que la instalación haya sido exitosa ejecutando terraform --version.

Automatización de una Instancia EC2 de Terraform en AWS

Ahora que ha instalado Terraform, puede comenzar a usarlo. En esta publicación, voy a demostrar la creación de una instancia EC2 de Terraform simple en AWS. Pero tenga en cuenta que Terraform puede aprovisionar cientos de tipos diferentes de infraestructura.

Para comenzar, primero necesitará un directorio para ejecutar los scripts de Terraform EC2 desde. Es importante tener un directorio separado para cada entorno. En el momento en que estoy escribiendo esto, Terraform no tiene una forma de filtrar lo que ejecuta. Ejecutará cada script en su directorio de trabajo actual.

Configuración de un Script de TF

  1. En su consola de cmd o PowerShell ejecutada como administrador, ejecute mkdir hello-terraform luego cd ./hello-terraform
  2. Una vez que tienes un directorio, necesitarás un script de Terraform. A continuación se muestra un ejemplo que puedes utilizar. Este es un script típico de Terraform que utiliza el proveedor AWS provider para crear una instancia AWS resource.

Si deseas el script completo, cópialo a continuación. Si quieres entender lo que hace este script, sigue leyendo a continuación.

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3. Guarda el script anterior como main.tf en tu directorio de trabajo.

Entendiendo los Scripts de TF

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

Antes de continuar, mira el bloque a continuación y lo que está declarando.

#Terraform HCL

Este bloque le dice a Terraform EC2 qué proveedor utilizar. Hay proveedores para todos los principales proveedores de nube, así como algunos proveedores locales. Si eres más avanzado y sabes cómo escribir en Golang, también puedes escribir tu propio proveedor.

Este bloque indica a Terraform que utilice el proveedor AWS y las claves de acceso en el archivo ~/.aws/credentials bajo el nombre de perfil default. Este archivo se crea cuando configuras AWS CLI con el comando aws config, como se indica en los requisitos previos.

También es importante señalar que ~/ es una abreviatura del directorio del usuario actual. Si provienes de un entorno Windows, esto es equivalente a $env:USERPROFILE o %USERPROFILE%. Pero Terraform no admite esa notación en el momento de escribir esto.

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

El siguiente bloque describe una instancia EC2 de Terraform y cómo construirla. Si observas la documentación de Terraform para aws_instance, podrás ver que algunos parámetros son obligatorios y otros opcionales. En este caso, los parámetros obligatorios son el ID de la AMI (ami-07d0cf3af28718ef8) para Ubuntu 18.04 LTS y t2.micro como tipo de instancia.

Al pasar un bloque de etiquetas con la clave Name y el valor HelloTerraform, esta etiqueta también se asignará a la instancia que se cree. Esto es opcional.

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  Construyendo la instancia EC2 de Terraform en AWS: Pruebas
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Ahora que el script está configurado, llámalo ejecutando terraform init desde tu directorio de trabajo. Esto descargará todas las dependencias y el proveedor en una carpeta llamada .terraform. Si todo va bien, deberías obtener algo como esto:

Antes de realizar cambios, Terraform EC2 te permite ver qué se creará ejecutando terraform plan. Aquí está lo que producirá esa salida:

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# aws_instance.ubuntu se creará

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Construyendo la instancia EC2 de AWS: Creación

Ahora estás listo para ejecutarlo por ti mismo ejecutando terraform apply. A continuación, verás una salida similar a terraform plan, pero con una confirmación adicional para asegurarte de que realmente deseas aplicar estos cambios.

Una vez que escribas ‘sí’, Terraform EC2 comenzará a aprovisionar la instancia de Terraform EC2 llamando a las APIs de AWS con la clave de acceso en tu archivo de credenciales. Esto puede llevar algo de tiempo. Una vez finalizado, verás algo como lo siguiente:

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

Destruyendo la Instancia EC2 de AWS

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

Una vez que hayas terminado con el entorno de prueba, puedes destruir la instancia.

En tu consola cmd/PowerShell, escribe terraform destroy. Al igual que con el comando apply, verás una lista de recursos que Terraform va a destruir y luego una solicitud antes de destruirlos realmente.

Una vez que escribas sí, Terraform EC2 comenzará a destruir la instancia y confirmará cuando haya terminado.

Source:
https://adamtheautomator.com/terraform-windows/