tutoriales.com

Optimización y Gestión de Costos en la Nube con Terraform y AWS Budgets

Este tutorial práctico y completo te guía paso a paso en la implementación de infraestructura como código para AWS Budgets utilizando Terraform. Descubre cómo definir límites de gasto, configurar notificaciones automáticas vía SNS y optimizar tus costos operativos en entornos cloud.

Intermedio10 min de lectura9 views
Reportar error

🚀 Introducción a la Gestión Financiera en la Nube con Terraform

En el mundo del desarrollo y operaciones moderno, el control financiero es tan importante como la estabilidad técnica. A medida que nuestras arquitecturas en la nube crecen, también lo hace el riesgo de incurrir en costos inesperados. AWS Budgets es la herramienta definitiva para establecer límites de costos y uso, pero configurarla manualmente a través de la consola es un proceso tedioso y propenso a errores humanos.

Al integrar AWS Budgets dentro de nuestros flujos de Terraform, logramos automatizar la gobernanza financiera desde el primer día de despliegue. Esto garantiza que cada nuevo entorno, ya sea de desarrollo, pruebas o producción, nazca con sus propias salvaguardas económicas integradas.


🛠️ Prerrequisitos y Configuración Inicial

Antes de escribir nuestro código de Terraform, asegúrate de cumplir con los siguientes requisitos:

  • Tener instalado Terraform (versión 1.0 o superior).
  • Una cuenta de AWS activa con permisos administrativos o suficientes para gestionar Budgets y SNS.
  • Configuración de credenciales de AWS en tu entorno local (vía aws configure o variables de entorno).
📌 Nota: AWS Budgets requiere que tengas permisos específicos para interactuar con el servicio de presupuestos y notificaciones de Simple Notification Service (SNS).

🏗️ Arquitectura de la Solución

Para este tutorial, construiremos una infraestructura compuesta por un tópico de SNS para enviar alertas por correo electrónico, un presupuesto mensual de costos para AWS y un conjunto de umbrales de notificación configurados al 50%, 80% y 100% del presupuesto asignado.

Terraform Infra as Code AWS Budgets Control de Costes AWS SNS Notificaciones Finanzas Alerta Email DevOps Alerta Email Configura Dispara Envía Alertas

📝 Creación del Código de Terraform

Vamos a estructurar nuestro proyecto en tres archivos principales: providers.tf, variables.tf y main.tf. Esto mantendrá nuestro código limpio, modular y fácil de mantener a largo plazo.

1. Configuración del Proveedor (providers.tf)

Comenzaremos definiendo la versión requerida de Terraform y el proveedor de AWS. Es una buena práctica fijar la región, aunque AWS Budgets es un servicio global, los recursos asociados como SNS pueden residir en regiones específicas.

terraform {
  required_version = ">= 1.0.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

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

2. Definición de Variables (variables.tf)

Utilizar variables nos permite reutilizar este código para diferentes departamentos, proyectos o entornos simplemente cambiando los valores de entrada.

variable "budget_limit" {
  type        = string
  description = "Límite mensual del presupuesto en USD"
  default     = "100.0"
}

variable "notification_email" {
  type        = string
  description = "Correo electrónico para recibir alertas de costos"
  default     = "devops-team@miempresa.com"
}

variable "environment_name" {
  type        = string
  description = "Nombre del entorno para etiquetado"
  default     = "Producción"
}

3. Lógica Principal del Presupuesto y Alertas (main.tf)

Aquí es donde ocurre la magia. Configuraremos el tópico de SNS, la suscripción de correo y el recurso aws_budgets_budget que define las reglas de gasto.

resource "aws_sns_topic" "budget_alerts" {
  name = "budget-cost-alerts-topic"
}

resource "aws_sns_topic_subscription" "email_subscription" {
  topic_arn = aws_sns_topic.budget_alerts.arn
  protocol  = "email"
  endpoint  = var.notification_email
}

resource "aws_budgets_budget" "monthly_cost_budget" {
  name              = "budget-mensual-infraestructura-${var.environment_name}"
  budget_type       = "COST"
  limit_amount      = var.budget_limit
  limit_unit        = "USD"
  time_unit         = "MONTHLY"
  time_period_start = "2024-01-01_00:00"

  cost_filter {
    name   = "TagKeyValue"
    values = ["Environment\$${var.environment_name}"]
  }

  notification {
    comparison_operator        = "GREATER_THAN"
    threshold                  = 50
    threshold_type             = "PERCENTAGE"
    notification_type          = "FORECASTED"
    subscriber_sns_topic_arns = [aws_sns_topic.budget_alerts.arn]
  }

  notification {
    comparison_operator        = "GREATER_THAN"
    threshold                  = 80
    threshold_type             = "PERCENTAGE"
    notification_type          = "ACTUAL"
    subscriber_sns_topic_arns = [aws_sns_topic.budget_alerts.arn]
  }

  notification {
    comparison_operator        = "GREATER_THAN"
    threshold                  = 100
    threshold_type             = "PERCENTAGE"
    notification_type          = "ACTUAL"
    subscriber_sns_topic_arns = [aws_sns_topic.budget_alerts.arn]
  }
}
⚠️ Advertencia: Cuando configures una suscripción de SNS por correo electrónico, AWS enviará un mensaje de confirmación («Subscription Confirmation») a la dirección provista. Debes hacer clic en el enlace de confirmación para empezar a recibir las alertas.

🚀 Despliegue y Validación de la Infraestructura

Una vez que hayas creado tus archivos de configuración en un directorio de trabajo, sigue estos pasos para desplegar el presupuesto:

Paso 1: Inicialización: Ejecuta terraform init para descargar los proveedores necesarios.
Paso 2: Planificación: Ejecuta terraform plan para revisar los recursos que se van a crear.
Paso 3: Aplicación: Ejecuta terraform apply y confirma escribiendo yes.

Verificación en la Consola de AWS

  1. Ingresa a la consola de AWS y busca AWS Budgets.
  2. Deberías ver listado tu nuevo presupuesto con el nombre configurado.
  3. Revisa que los umbrales del 50%, 80% y 100% estén correctamente asociados al tópico de SNS.

💡 Buenas Prácticas Avanzadas

Para llevar tu gestión de costos al siguiente nivel con Terraform, ten en cuenta las siguientes recomendaciones:

  • Modularización: Si manejas múltiples cuentas de AWS a través de AWS Organizations, encapsula este código en un módulo reutilizable de Terraform.
  • Automatización de Acciones: Puedes combinar AWS Budgets con políticas de AWS IAM o lambdas para apagar recursos automáticamente cuando se supere el 100% del presupuesto.
  • Revisión Periódica: Los costos de la nube cambian; ajusta la variable budget_limit trimestralmente acorde al crecimiento de tu negocio.

❓ Preguntas Frecuentes (FAQ)

¿Puedo crear presupuestos basados en uso en lugar de costo? Sí, cambiando la propiedad budget_type = "USAGE" puedes definir límites basados en horas de cómputo, gigabytes transferidos, entre otros.
¿Qué pasa si mi correo no recibe la confirmación de SNS? Verifica tu bandeja de spam o correo no deseado. También puedes volver a aplicar Terraform o verificar manualmente el estado de la suscripción en la consola de SNS.

🎯 Conclusión

Has aprendido a integrar la gestión financiera dentro de tu ciclo de vida de infraestructura como código utilizando Terraform y AWS Budgets. Automatizar el control de costos no solo previene sorpresas desagradables en la factura a fin de mes, sino que fomenta una cultura de responsabilidad financiera en todo el equipo técnico.

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!