Creando una Instancia EC2 con Terraform desde Cero

Lo primero que debemos hacer es abrir VSCode o un editor de código.
Creamos la carpeta de trabajo y creamos el primer archivo con nombre main.tf
El archivo main.tf será nuestro archivo terraform principal.
Dentro de el archivo main.tf escribimos lo siguiente:

provider "aws" {
  region = "us-east-1"
}

Con esto le estamos indicando:
provider “aws”:
Esta instrucción le indica a Terraform que usará el proveedor de AWS para crear y administrar recursos en la nube de Amazon Web Services.

region = “us-east-1”:
Se especifica la región de AWS donde se desplegarán los recursos. En este caso, la región es “us-east-1”, que corresponde a Norte de Virginia, una de las regiones más populares y económicas de AWS.
Este bloque asume que las credenciales de acceso a AWS están disponibles.
Si quieres saber como obtener las credenciales de AWS para el acceso a tu cuenta, ve a este link ->

Ver video crear access key en AWS (abrir en nueva pestaña)

Seguidamente debemos indicarle a Terraform cual o cuales recursos queremos crear

resource "aws_instance" "mi-instancia-ec2" {`
  `ami           = "ami-084568db4383264d4" 
  `instance_type = "t2.micro"`
`}

“aws_instance”: es el tipo de recurso y requiere al menos dos parámetros que son, la ami que usará y el tipo de instancia.

“mi-instancia-ec2”: es el nombre lógico del recurso dentro del código Terraform. Lo usas para referenciarlo en otras partes.

ami = “ami-084568db4383264d4”
Especifica la AMI (Amazon Machine Image) que se usará para lanzar la instancia.
Este ID corresponde a una Amazon Linux 2 en la región us-east-1.

instance_type = “t2.micro”
Define el tipo de instancia EC2. t2.micro es elegible para el nivel gratuito de AWS y es adecuado para cargas de trabajo livianas.

Nota: si queremos obtener un listado de amis en determinada region podemos usar desde la terminal el comando:

aws ec2 describe-images --region us-east-1 --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-*-20.04-amd64-server-*"            "Name=architecture,Values=x86_64" "Name=virtualization-type,Values=hvm" "Name=root-device-type,Values=ebs" --query "Images[*].[ImageId,Name,CreationDate]" 
--output table

El archivo main.tf debe quedar así:

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "mi-instancia-ec2" {
  ami           = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI (HVM), SSD Volume Type
  instance_type = "t2.micro"
}

Guardamos el archivo main.tf

A partir de acá ya es posible crear una instancia EC2 con Terraform en AWS.
Pero primero debes estar logueado en la terminal y eso lo hacemos con el comando:
AWS configure e ingresar las credenciales de seguridad de tu cuenta AWS.

Seguidamente debemos decirle a Terraform que queremos iniciar con la creación de recursos en AWS.
En la terminal y en la carpeta del proyecto escribimos el siguiente comando:

terraform init

terraform init es el primer comando que debes ejecutar en cualquier nuevo proyecto de Terraform.
Descarga el proveedor (en este caso AWS) especificado en el archivo.
Crea el directorio .terraform/ para guardar configuraciones internas, entre otras cosas.
Una vez terminado ese proceso mostrará un mensaje:
Terraform has been successfully initialized!
Ahora procedemos a ejecutar el comando:

terraform plan

El comando terraform plan muestra una vista previa de los cambios que Terraform hará en tu infraestructura. Ayuda a verificar y revisar los cambios antes de aplicarlos, para evitar errores o sorpresas.
Además, compara el estado actual (real o guardado) con el código en tus archivos .tf.
Muestra qué recursos se crearán, modificarán o destruirán.
Y si no se realiza ningún cambio todavía, solo lo simula.

Una vez aplicado el Terraform plan nos mostrará algo como esto:

Simplemente está diciendo lo que va a hacer cuando se lo indiques.
Como recomendación, tómate un tiempo para revisar el plan de terraform antes de aplicarlo e intenta ver que va a hacer exactamente. A veces se puede cometer un error y esta revisión previa te puede salvar.
Algunos elementos no se muestran o terraform no tiene forma de saber su contenido si no hasta después de aplicar la configuración. Un ejemplo sería la dirección ip pública de la instancia EC2.
Por tanto en este plan, Terraform creará 1 recurso, 0 para cambiar y 0 para destruir.
Una vez tengamos el plan tal como lo queremos, procedemos a aplicarlo.
Esto lo hacemos con el comando

terraform apply

El comando terraform apply ejecuta realmente los cambios en tu infraestructura según lo que hemos definido en el archivo main.tf.
Antes de aplicar, nos muestra el plan y nos pregunta si queremos realmente ejecutar los cambios. Le decimos yes.

Existe un parámetro que ejecute los cambios sin requerir la confirmación manual. El parámetro es:
-auto-approve

terraform apply -auto-approve

Debemos tener cuidado con este comando.

Cuando Terraform termina de aplicar los cambios en AWS nos mostrará el siguiente mensaje:

Esto significa que, en nuestro caso, a creado una instancia EC2 t2.micro en nuestra VPC por defecto.
Podemos ir a AWS y comprobarlo.
Vemos que el id de la instancia EC2 creada, coincide con la que muestra la consola de AWS .
EC2 -> Instances

Esta es la forma mas simple de crear una instancia EC2 en AWS con Terraform.

Por otra parte, podemos agregar mas parámetros específicos para nuestra instancia EC2.
Si estas usando VSCode como editor, te recomiendo que instales las extenciones HashiCorp HCL y HashiCorp Terraform oficiales. Estas extenciones entre otras cosas, autocompleta de forma inteligente (recursos, atributos, argumentos, bloques), valida la de sintaxis en tiempo real y resaltala sintaxis (syntax highlighting).

Sigamos ->
Podemos especificar un key pair en nuestra instancia para poder acceder a ella por ssh
Agreguemos la linea
key_name = “mi-key-pair”
Debemos tener creado previamente el par de llaves en AWS para poder asignarlo a la Instancia EC2.
Si quieres saber como crear el key pairs mira el siguiente video:


Ver video crear Key Pairs en AWS (abrir en nueva pestaña)

Adicionalmente podemos asignar una subnet de la cual debemos tener el id
subnet_id = “subnet-0153a80d16b244e30” # Reemplaza con el ID de tu subred

El bloque de código debe quedar asi:

resource "aws_instance" "mi-instancia-ec2" {
  ami           = "ami-084568db4383264d4" # Amazon Linux 2 AMI (HVM), SSD Volume Type
  instance_type = "t2.micro"
  key_name = "mi-key-pair" # Reemplaza con el nombre de tu par de claves
  subnet_id = "subnet-0153a80d16b244e30" # Reemplaza con el ID de tu subred
}

Guardamos y ejecutamos un terraform apply -auto-approve
Terraform procede a destruir la instancia EC2 que creó anteriormente para luego crear una nueva instancia con las características nuevas que hemos asignado.

Terraform detectó que un cambio en tu código de el archivo main.tf

¿Como sabe Terraform que debe hacer ahora?
Terraform crea un archivo llamado terraform.tfstate, donde mantiene un registro detallado de los recursos creados, sus configuraciones actuales y atributos.
Este archivo guarda el estado real de la infraestructura, como instancias EC2, VPCs, volúmenes, entre otros.
Permite a Terraform comparar el estado actual con la configuración deseada (archivos .tf) al ejecutar comandos como terraform plan, y así determinar qué cambios aplicar.
También contiene datos sensibles, como claves, contraseñas o direcciones IP, por lo que debe almacenarse en un lugar seguro y no debe editarse manualmente, a menos que sepas exactamente lo que estás haciendo.
Gracias a este archivo, Terraform sabe qué recursos ya existen y cuáles necesita crear, modificar o eliminar.
Por ejemplo, si queremos agregar otra instancia EC2, simplemente la definimos en el código y ejecutamos terraform apply.
Terraform leerá el archivo terraform.tfstate, verá que ya existe una instancia EC2, y en lugar de recrearla, la dejará intacta y solo creará la nueva con los parámetros indicados.

Debemos tener en cuenta estos detalles ya que este reemplazo implica una interrupción del servicio si no está gestionado con un balanceador de carga o una estrategia de alta disponibilidad.

Se ha eliminado la instancia anterior y se ha creado una nueva con un id diferente.

Eliminemos la Instancia EC2 que hemos creado con Terraform.

Eso se hace con el comando terraform destroy.
El comando terraform destroy se utiliza para eliminar por completo toda la infraestructura que Terraform ha creado y que está registrada en el archivo terraform.tfstate.

Hasta acá hemos visto el ciclo de vida de Terraform.
terraform init -> inicia la configuración de Terraform.
terraform plan -> Mostrará que se va a crear
terraform apply -> aplica la configuración.
terraform destroy -> limpiar completamente tu infraestructura.

Link de la documentación Terraform

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/instances

Agregar un comentario

Tu dirección de correo electrónico no será publicada. Los campos requeridos están marcados *