Monitoreo de Costos de AWS Lambdas con Terraform.
Augusto Valdivia
Posted on October 15, 2024
Caso
Imaginemos que tienes un equipo de trabajo que utiliza varios servicios en la nube de AWS, incluyendo AWS Lambda para ejecutar funciones sin servidor. A medida que el equipo avanza en sus proyectos, comienzan a notar que los costos de AWS se están incrementando. Sin embargo, no están seguros de cuál de sus funciones Lambda está generando la mayor parte de esos costos.
Desafío
El desafío aquí es identificar qué función Lambda está consumiendo más recursos y, por ende, generando costos innecesarios. Esto puede ser complicado, especialmente si tienes múltiples funciones y no cuentas con un sistema de monitoreo adecuado. Sin un monitoreo efectivo, es fácil perder el control sobre los costos y las métricas de rendimiento.
Solución de Monitoreo
Para abordar este problema, podemos implementar una solución de monitoreo utilizando Terraform, Amazon CloudWatch y Amazon SNS. Esto no solo te ayudará a identificar las funciones que están generando costos excesivos, sino que también te permitirá recibir notificaciones en tiempo real sobre cualquier anomalía.
Diagrame del Proyecto:
Configuración de Terraform
Primero, asegúrate de tener Terraform instalado en tu máquina. Puedes descargarlo desde el sitio oficial de Terraform. Si eres usuario de Mac, este video te guiará como instalar Terraform en tu computadora:
Presentación previa al código que desplegará el Panel de Control de la Nube (CloudWatch) utilizando Terraform:
resource "aws_cloudwatch_dashboard" "lambda_cost_dashboard" {
dashboard_name = "LambdaCostDashboard"
dashboard_body = jsonencode({
widgets = [
{
type = "metric",
x = 0,
y = 0,
width = 24,
height = 6,
properties = {
metrics = [
["AWS/Lambda", "Duration", "FunctionName", "${aws_lambda_function.my_lambda.function_name}"], # Reemplaza con el nombre de tu función Lambda
["AWS/Lambda", "Cost", "FunctionName", "${aws_lambda_function.my_lambda.function_name }"]
],
title = "Costos y Duración de Lambda",
period = 300,
stat = "Average",
view = "timeSeries",
region = "us-east-1"
}
}
]
})
}
resource "aws_cloudwatch_metric_alarm" "lambda_cost_alarm" {
alarm_name = "HighLambdaCost"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "15"
datapoints_to_alarm = "15"
metric_name = "Duration"
namespace = "AWS/Lambda"
period = "60"
statistic = "Average"
threshold = "25000" # Cambia este umbral según tus necesidades
treat_missing_data = "missing"
dimensions = {
FunctionName = "${aws_lambda_function.my_lambda.function_name }" # Reemplaza con el nombre de tu función Lambda
}
alarm_description = "Alarma para costos altos de Lambda"
alarm_actions = [aws_sns_topic.lambda_cost_notifications.arn]
insufficient_data_actions = []
}
Esto creará un dashboard en CloudWatch que te permitirá visualizar los costos y la duración de tu función Lambda, así como una alarma que te notificará si el costo de la función Lambda supera el umbral que has definido. Además, recibirás notificaciones por correo electrónico a través de SNS.
Es importante destacar que el tema suscrito a Amazon SNS (Simple Notification Service) debe de utilizar un correo valido y ademas ser confirmado para poder recibir alertas. Esto significa que si se envía un mensaje a un tema SNS con un punto final que está pendiente de confirmación, no funcionará como se espera hasta que el punto final esté confirmado.
Deberás buscar un correo electrónico de confirmación de suscripción o revisar el tema en SNS para asegurarte de que la suscripción ha sido confirmada. Sin esta confirmación, el dashboard no funcionará correctamente, ya que no se enviarán las alertas.
Optimización de Recursos
Es fundamental optimizar la configuración de memoria de tus funciones Lambda. Se recomienda comenzar con al menos 512 MB en la mayoría de los casos. Esta estrategia no solo mejora el rendimiento, sino que también ayuda a minimizar costos. Realizar ajustes en la memoria puede tener un impacto significativo en la eficiencia operativa y en los costos asociados con el uso de tus funciones Lambda.
Conclusión
Implementar un sistema de monitoreo para tus funciones AWS Lambda es crucial para controlar los costos y optimizar el rendimiento. Utilizando Terraform, CloudWatch y SNS, puedes automatizar la creación de dashboards y alarmas que te ayudarán a identificar rápidamente cualquier función que esté generando costos excesivos. Con esta solución, estarás en una mejor posición para gestionar tus recursos en la nube y asegurarte de que tus AWS Lambdas operen de manera eficiente y rentable.
Aquí encontraras el repositorio de GitHub que contiene el código y las instrucciones.
¿Listo para agilizar tus despliegues en AWS?
Comienza a usar Terraform para gestionar tu infraestructura como código. Experimenta con el código proporcionado y no dudes en compartir tus experiencias en los comentarios. Si te ha gustado este artículo, sígueme para más contenido sobre AWS y Terraform.
Tu participación es valiosa y me encantaría conocer tus opiniones.
Posted on October 15, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.