Terraform, Lambda y Event Bridge: El trío perfecto para la optimización de costos en AWS
Tags: awscosto, terraform, awslambda, awsec2
Published: 2023-10-31 14:06:51

Si estás leyendo esto, quizás no sea demasiado tarde. Sin embargo, es probable que hayas experimentado el temor de recibir una factura de la nube inesperadamente grande. 

Alternativamente, puede que seas nuevo en AWS y este artículo puede ayudarte a evitar cometer el mismo error. 

En nuestra industria, es demasiado fácil caer en errores comunes, como dejar una instancia EC2 funcionando durante demasiado tiempo, lo que resulta en cargos costosos que pueden acumularse rápidamente. Es por eso que he escrito este artículo, para ayudarte a evitar estos dolores de cabeza financieros y aprovechar una infraestructura más eficiente y rentable.

¿Alguna vez has visto el meme de dos hombres hablando? Uno está vestido elegantemente y pregunta al segundo, que parece un indigente, "¿Cómo terminaste en la calle? ¿Apostando en juegos o algún otro problema?" El segundo hombre responde: "Dejé encendida una instancia EC2". Desafortunadamente, para aquellos de nosotros en la industria tecnológica, conocemos demasiado bien la realidad no tan divertida detrás de esta broma. Uno de los mayores culpables es dejar accidentalmente una instancia EC2 funcionando, lo que resulta en facturas astronómicas que pueden drenar rápidamente un presupuesto.

![money burn](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gfygk9am2u5pssvwmkq.jpeg)

No te preocupes. En este artículo, descubrirás una solución que puede ayudarte a evitar esta pesadilla financiera. Exploraremos los beneficios de una infraestructura completamente sin servidor utilizando AWS Lambda y AWS Event Bridge. La implementación de esta poderosa combinación no solo ofrece posibilidades fascinantes, sino que también tiene el potencial de ahorrarte a ti y a tu empresa miles de dólares en cargos innecesarios.

![money save](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdjveg6dpywst2h75gkc.jpeg)

Antes de adentrarnos en los detalles, si no estás familiarizado con las Instancias de AWS o EC2, te recomiendo que leas mi artículo anterior donde expliqué qué es EC2 y cómo desplegarlo usando Terraform. Necesitarás los ID de las instancias para completar este artículo. [Aquí está el enlace al artículo](https://dev.to/aws-espanol/lee-esto-antes-de-crear-una-flota-de-aws-ec2s-con-terraform-2cod) vuelve cuando estés listo para continuar.

Ahora que has vuelto, este artículo asume que tienes algún conocimiento básico de EC2, AWS Lambda y Event Bridge. Vamos a la parte divertida, déjame describir cómo será esta implementación. Usaremos Terraform para administrar nuestra infraestructura como código. Terraform es una herramienta de código abierto que te permite definir tu infraestructura en código, lo que facilita su mantenimiento, versión y compartición. Al usar Terraform, podemos crear y administrar fácilmente nuestros recursos de AWS, incluyendo nuestra instancia EC2, Event Bridge y funciones Lambda.

Nuestra arquitectura consistirá en dos funciones Lambda: una para iniciar la instancia EC2 y otra para detenerla. Estas funciones se activarán mediante dos reglas de Event Bridge en una programación cron, lo que nos permitirá automatizar el inicio y detención de nuestra instancia EC2 en un momento específico todos los días.

**Diagrama de infraestructura:**

![Diagram](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lgxjmhiu2u5ucnjs5toi.png)

**Código de Lambda:**

```
data "template_file" "ec2_start_large" {
  count = length(local.source_files)

  template = file(element(local.source_files, count.index))
}

data "archive_file" "ec2_start_large_events" {
  type        = "zip"
  output_path = "start.zip"

  source {
    content  = data.template_file.ec2_start_large.0.rendered
    filename = basename(local.source_files[0])
  }


}

resource "aws_lambda_function" "ec2_start_large_lambda" {
  description = "EC2 large EC2"
  function_name    = "start-ec2-large"
  handler          = "start.handler"
  filename         = "${data.archive_file.ec2_start_large_events.output_path}"
  source_code_hash = "${data.archive_file.ec2_start_large_events.output_base64sha256}"
  role             =  aws_iam_role.lambda_role.arn
  memory_size      = 128
  runtime          = "python3.9"
  timeout          = 3
  publish  = true
  depends_on = [
    aws_iam_role_policy_attachment.role_policy_login_attch
]

  tracing_config {
    mode = "PassThrough"
  }

   tags = {
    Project = "large_ec2"
  }
}

```


**Código de EventBridge:**

```
resource "aws_cloudwatch_event_rule" "start_event_rule" {
    name = "start-large-ec2"
    schedule_expression = "cron(0 12 * * ? *)"

    tags = {
    Project = "large_ec2"
  }
}

```

Usando funciones Lambda, podemos ejecutar código sin tener que preocuparnos por la provisión o gestión de servidores, lo que reduce aún más nuestros costos. Además, aprovechar EventBridge nos permitirá gestionar fácilmente nuestros eventos y automatizar nuestros flujos de trabajo, mejorando nuestra eficiencia y reduciendo el riesgo de errores humanos.

Creo que es hora de tomar un descanso. Estiremos las piernas o tomemos un café. En la próxima sección, cubriremos nuestro proyecto y proporcionaremos un repositorio detallado en GitHub que incluye una guía paso a paso sobre cómo completar y dominar esta infraestructura sin servidor. Mientras tanto, si conoces a alguien que podría beneficiarse de este artículo, compártelo o deja un comentario a continuación con tus pensamientos.

¡Hasta pronto y recuerda terminar tus instancias EC2 si ya no las estás usando 😉!

## Conclusión

¡Felicidades!

Has llegado a la conclusión de este blog sobre cómo lograr la optimización de costos de AWS con Terraform, AWS Lambda y Event Bridge. Al aprovechar el poder de la infraestructura como código, las funciones sin servidor y las arquitecturas impulsadas por eventos, estás bien equipado para optimizar costos sin comprometer el rendimiento o la funcionalidad.

Pero el viaje no termina aquí. Me complace anunciar que he creado la última parte de este blog, un repositorio completo en GitHub que encapsula todos los pasos y recursos necesarios para completar este mini proyecto sin esfuerzo. Este repositorio sirve como guía práctica, proporcionándote ejemplos de código, archivos de configuración e instrucciones detalladas.

Con este repositorio al alcance de tu mano, tendrás todo lo que necesitas para profundizar en la optimización de costos de AWS. Es hora de poner tu nuevo conocimiento en acción, automatizar tareas comunes y desbloquear todo el potencial de tu infraestructura de AWS.

Ya seas un desarrollador experimentado o recién comiences tu viaje en DevOps, este repositorio está diseñado para ser de una manera clara y accesible. Las instrucciones paso a paso y los ejemplos intuitivos te capacitarán para tomar decisiones informadas y lograr ahorros tangibles en costos.

Recuerda, la optimización de costos es un proceso continuo. Sigue explorando, experimentando y ajustando tus recursos. Y mientras te embarcas en este proyecto, no dudes en pedir ayuda o compartir tus experiencias con la comunidad de entusiastas de AWS.

[Repositorio en GitHub aquí] (https://github.com/ValAug/serverless-AWS-cost-optimization)