Optimiza tus costos con instancias Spot y Terraform en solo unos pasos
- victoriagimenez5
- 1 jul
- 2 Min. de lectura

Cuando buscamos reducir nuestros costos en la nube, las instancias spot de AWS se presentan como una de las mejores alternativas. Hoy te muestro cómo aprovecharlas con Terraform para tus entornos no productivos.
Las instancias spot son ideales para bajar gastos en ambientes no críticos. Eso sí: hay que tener en cuenta la estrategia de asignación, los tipos de instancia y ciertos riesgos antes de configurarlas.
Vamos paso a paso.
Paso 1: Configura aws_launch_template y autoscaling_group
Primero, definimos los recursos aws_launch_template y aws_autoscaling_group en Terraform. Asegurate de incluir variables como la AMI, tipo de instancia, perfil IAM y configuración de red. Un ejemplo:
resource "aws_launch_template" "Lt" {
name_prefix = "asg-testLT-"
image_id = var.ami_id
ebs_optimized = "false"
instance_type = var.instance_type
key_name = var.key_name
security_groups = var.security_groups
user_data = var.user_data
metadata_options {
http_endpoint = "enabled"
http_tokens = "required"
http_put_response_hop_limit = 2
}
network_interfaces {
associate_public_ip_address = var.public_ip
security_groups = var.security_group
}
iam_instance_profile {
arn = var.instance_profile_arn
}
block_device_mappings {
device_name = "/dev/xvda"
ebs {
volume_size = var.root_vol_size
volume_type = "gp2"
delete_on_termination = true
}
}
}
Y luego, configurá el autoscaling group con política de instancias mixtas
resource "aws_autoscaling_group" "asg" {
vpc_zone_identifier = data.aws_subnet_ids.private.ids
name = var.asgName
max_size = var.maxSize
min_size = var.minSize
health_check_grace_period = 100
default_cooldown = var.cooldown
health_check_type = var.healthCheckType
desired_capacity = var.desiredSize
capacity_rebalance = true
force_delete = true
mixed_instances_policy {
instances_distribution {
spot_allocation_strategy = "capacity-optimized-prioritized"
}
launch_template {
launch_template_specification {
launch_template_id = aws_launch_template.Lt.id
version = "$Latest"
}
override {
instance_type = "t3.large"
}
override {
instance_type = "t3a.large"
}
override {
instance_type ="t2.large"
}
}
}
termination_policies = [
"OldestInstance",
"OldestLaunchConfiguration",
"Default",
]
}
Paso 2: Definí una política de instancias mixtas
Para utilizar Spot en Auto Scaling, necesitás configurar mixed_instances_policy con:
instances_distribution: define cómo combinar instancias spot y on-demand. En este caso usamos solo spot, pero podés usar un mix si tu aplicación lo requiere.
launch_template: especifica el template de lanzamiento, incluyendo los tipos de instancia a utilizar.
Este enfoque te da control total sobre cómo AWS asigna tus instancias.
Paso 3: Elige tu estrategia de asignación Spot
La estrategia de asignación es clave. Estas son las más comunes:
priceCapacityOptimized: balancea entre precio bajo y baja interrupción.
capacityOptimized (usada en este ejemplo): selecciona las pools con mayor capacidad disponible, ideal para cargas sensibles.
lowestPrice: elige instancias del pool más barato. Es la estrategia por defecto, pero puede ser más riesgosa.
Para ayudarte a elegir, usá AWS Spot Instance Advisor.
Paso 4: Seleccioná tipos de instancia
Para elegir el tipo correcto de instancia spot:
Considerá vCPUs, memoria y región.
Revisá el historial de interrupciones y disponibilidad en AWS Spot Advisor.
Por ejemplo, t3.large en us-east-2 tiene <5% de interrupciones y hasta 70% de ahorro frente a on-demand.
Recomendamos definir al menos 4 tipos distintos para garantizar disponibilidad.

Reflexión final
Las instancias spot son una excelente herramienta para reducir costos en entornos no productivos. Sin embargo, es vital analizar bien la estrategia, los tipos de instancia y los riesgos antes de implementarlas.
Con Terraform y herramientas como el Spot Advisor, podés tomar decisiones informadas, optimizar tus recursos y mantener tus cargas de trabajo estables y eficientes.

Juan Bermudez
Cloud Engineer
Teracloud