Ответ
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.