Что такое AWS Auto Scaling Groups и как они работают?

«Что такое AWS Auto Scaling Groups и как они работают?» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

AWS Auto Scaling Groups (ASG) — это сервис, который позволяет автоматически регулировать количество EC2-инстансов в группе в зависимости от заданной нагрузки. Это обеспечивает высокую доступность, отказоустойчивость и оптимизацию затрат, автоматически масштабируя ресурсы вверх или вниз.

Основные компоненты и принципы работы:

  • Launch Templates/Configurations: Определяют, как будут запускаться новые EC2-инстансы (AMI, тип инстанса, группы безопасности и т.д.). Launch Templates являются более современной и гибкой заменой Launch Configurations.
  • Политики масштабирования (Scaling Policies): Определяют условия, при которых ASG должна масштабироваться. Могут быть основаны на метриках CloudWatch (например, загрузка CPU, сетевой трафик), расписании или целевом значении (Target Tracking).
  • Health Checks: ASG постоянно проверяет состояние инстансов. Нерабочие инстансы автоматически заменяются новыми, что повышает отказоустойчивость.
  • Lifecycle Hooks: Позволяют выполнять кастомные действия (например, установку ПО, регистрацию в балансировщике) при запуске или завершении инстансов.

Пример создания ASG и политики масштабирования с помощью boto3 (Python):

import boto3

client = boto3.client('autoscaling')

# 1. Создание Launch Template (предполагается, что шаблон уже существует или создается отдельно)
# Для простоты примера используем существующий шаблон.
# response = client.create_launch_template(...)

# 2. Создание Auto Scaling Group
response_asg = client.create_auto_scaling_group(
    AutoScalingGroupName='my-web-app-asg',
    LaunchTemplate={
        'LaunchTemplateName': 'my-web-app-launch-template', # Замените на имя вашего шаблона
        'Version': '$Latest' # Или конкретная версия шаблона
    },
    MinSize=1, # Минимальное количество инстансов
    MaxSize=5, # Максимальное количество инстансов
    DesiredCapacity=2, # Желаемое количество инстансов при старте
    AvailabilityZones=['us-east-1a', 'us-east-1b'], # Зоны доступности
    Tags=[
        {'Key': 'Project', 'Value': 'WebApp', 'PropagateAtLaunch': True}
    ]
)
print(f"ASG created: {response_asg}")

# 3. Настройка политики масштабирования (Target Tracking Scaling Policy)
# Масштабирование для поддержания средней загрузки CPU на уровне 70%
response_policy = client.put_scaling_policy(
    AutoScalingGroupName='my-web-app-asg',
    PolicyName='scale-out-cpu-70-percent',
    PolicyType='TargetTrackingScaling',
    TargetTrackingConfiguration={
        'PredefinedMetricSpecification': {
            'PredefinedMetricType': 'ASGAverageCPUUtilization' # Метрика средней загрузки CPU
        },
        'TargetValue': 70.0, # Целевое значение CPU в процентах
        'DisableScaleIn': False # Разрешить уменьшение количества инстансов
    }
)
print(f"Scaling policy created: {response_policy}")

Использование ASG является ключевым элементом для построения масштабируемых и отказоустойчивых приложений в AWS.