Ответ
Да, активно работал с Auto Scaling Groups (ASG) в AWS для построения отказоустойчивых и масштабируемых архитектур.
Мой опыт включает:
- Создание и настройка ASG через AWS Console, CLI, и, что важнее, через инфраструктуру как код (IaC) — Terraform и CloudFormation.
- Настройка политик масштабирования:
- Target Tracking Scaling: Например, поддержание среднего использования CPU на уровне 70%.
- Step Scaling: Реагирование на кастомные CloudWatch метрики (например, длина очереди сообщений в SQS) с разными шагами действий.
- Scheduled Scaling: Плановое увеличение/уменьшение емкости перед пиковыми нагрузками.
- Интеграция с другими сервисами: Привязка ASG к Application Load Balancer (ALB) или Network Load Balancer (NLB) для распределения трафика. Настройка Health Checks как от EC2, так и от ELB.
- Использование Lifecycle Hooks для выполнения кастомных скриптов при запуске (например, дополнительная конфигурация) или завершении работы инстанса (например, graceful shutdown и дренаж трафика).
Пример декларации ASG в Terraform:
resource "aws_autoscaling_group" "web_app" {
name_prefix = "web-app-asg-"
min_size = 2
max_size = 10
desired_capacity = 2
vpc_zone_identifier = data.aws_subnets.private.ids
health_check_type = "ELB"
target_group_arns = [aws_lb_target_group.app.arn]
launch_template {
id = aws_launch_template.app.id
version = "$Latest"
}
tag {
key = "Name"
value = "Web-App-Instance"
propagate_at_launch = true
}
}
resource "aws_autoscaling_policy" "scale_on_cpu" {
name = "scale-on-cpu"
autoscaling_group_name = aws_autoscaling_group.web_app.name
policy_type = "TargetTrackingScaling"
target_tracking_configuration {
predefined_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}
target_value = 70.0
}
}
Это позволяет автоматически поддерживать производительность приложения при изменении нагрузки и минимизировать затраты в периоды простоя.