Lee esto antes de crear una flota de AWS EC2s con Terraform
Tags: awscompu, awsec2, terraform, proyectoaws
Published: 2023-09-25 13:10:28

Hay momentos en los que compañías de cualquier tamaño se encuentran limitado por las capacidades de sus flotas de computadora o laptop. En este artículo conoceremos algunas de las ventajas de usar Amazon Web Services(AWS) y cómo crear dinámicamente máquinas virtuales (EC2) que pueden ayudar con estas limitaciones en minutos. En este artículo también presentaré Terraform y como se puede utilizar para crear EC2s-AMIs de una manera dinámica y productiva.

###*Introducción*

**¿Que son máquinas virtuales-EC2?**

Las máquinas virtuales o AWS EC2, también llamadas instancias, son diferentes sistemas operativos (Os), que se pueden rentar a AWS de una manera muy fácil. Algunos ejemplos de Os que AWS ofrece son: Amazon Linux, Red Hat Enterprise, MacOs, Suse Linux, Ubuntu, Microsoft Windows.

Como se puede observar la selección de Os es extensa lo cual brinda una gran ventaja a poder elegir EC2 basado en requisitos de Os, RAM, y CPU. EC2 también ofrece infraestructura como servicio (IaaS) la que proporciona un control completo de los recursos informáticos, los que se pueden incrementar y disminuir según la demanda. Uno de los grandes beneficios de usar EC2 es el ahorro de costo administrativo, planificación y inversión en extra-hardware que no es necesario lo que convierte compañías grandes costos en costos mucho más pequeños. En un momento explicaré más detalles.

**Costo = Demanda * Hora**

Costo = 💰 💰 💰 💰 💰 💰 💰 💰
Demanda = 🖥 🖥 🖥 🖥 🖥 🖥 🖥 🖥
x Hora = ⏱

**EC2 se clasifican en cinco tipos:**

- Propósito general
- Computación optimizada
- Memoria optimizada
- Computación acelerada
- Almacenamientos optimizados

**Diagrama 1: AWS EC2s**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zh0vmty3iu2jyz6oklyk.png)

Teniendo en cuenta que podemos crear o configurar cualquier número de AWS-EC2 a través de la consola una y otra vez esto lleva tiempo lo cual es un problema. Creando infraestructura usando código (IaC) alivia este problema. Les presento una de mis herramientas preferidas – Terraform.

**¿Que es Terraform?**

Terraform es una poderosa herramienta declarativa que nos ayuda a administrar la gran mayoría de los servicios en la nube, además de brindar consistencia y visibilidad de los cambios de infraestructura que ocurren en diferentes espacios de trabajo y entornos. Esta funcionalidad una pieza importante de mejora a la calidad del ciclo de vida del proyecto, y también mantiene informados a los ingenieros de software y otras personas del mismo equipo.

Al usar Terraform, no necesitamos iniciar sesión en la consola de administración de AWS. Esto reduce el tiempo de creación de servicios. También permite detectar posibles riesgos de seguridad y errores durante una etapa temprana del proyecto.

Con Terraform podemos trabajar directamente desde la terminal de nuestra computadora utilizando un par de líneas de comandos.

En este proyecto encontrará un repo que guarda una lista de archivos de Terraform los cuales podrá usar para configurar y crear una o más EC2s-AMIs en cuestión de minutos.

**Terraform: Archivos-vista previa**
```
#---main/root---

module "ec2_vm" {
  source = "./ec2_compu"

  for_each = var.ec2s

  instances_type = each.value.vm_type
  instances_count = each.value.vm_count

}
```

```
#---variable/root---

variable "ec2s"{
  description = "Map vms names configuration"
  type = map(any)
  default = {
    linux-vm = {
      vm_type = "t2.micro",
      vm_count = 1
    },
    ubuntu-vm = {
      vm_type = "t2.medium",
      vm_count = 1
    }
  }
}
```

Ahora es el momento de poner manos a la obra en la construcción de esta infraestructura.

[Encuentre el repo de este proyecto y instrucciones aquí](https://github.com/ValAug/aws-compu-terraform)

**Funciones, argumentos y expresiones de Terraform que se utilizaron en este proyecto:**

[providers](https://www.terraform.io/docs/language/providers/index.html)
[variables](https://www.terraform.io/docs/language/values/index.html)
[modules](https://www.terraform.io/docs/language/modules/index.html)
[resources](https://www.terraform.io/docs/language/resources/index.html)
[types and values](https://www.terraform.io/docs/language/expressions/types.html)
[for_each](https://www.terraform.io/docs/language/meta-arguments/for_each.html)

No olvides compartir tus comentarios y seguirme para obtener más contenido de AWS!