7. www.fivexl.io | hello@fivexl.io
Что будет, если не указать Spot
Max Price?
По умолчанию будет использована On-Demand Price. Это
верно для AutoScaling Group, Spot Request, Spot Fleet
8. www.fivexl.io | hello@fivexl.io
При каких условиях будет
запущен Spot Instance?
Ваш Spot Instance запускается всякий раз, когда имеется
доступная емкость, а Spot Max Price для Вашего запроса
превышает текущую Spot price
10. www.fivexl.io | hello@fivexl.io
Готовность к
прерываниям
Оповещение придет за 2 минуты. Обработка событий
возможна через EventBridge
2 minutes for Terminate/Stop
Termination
notification
Terminated/Stopped
11. www.fivexl.io | hello@fivexl.io
EC2 Auto Scaling Group
и Spot Fleet
Spot Instance становятся устойчивыми и эластичными.
Что необходимо в условиях прерываний
12. www.fivexl.io | hello@fivexl.io
Разные Instance Type и AZ
Увеличивает вероятность запустить новый Spot Instance.
В некоторых случаях можно добавить прошлые
поколения
13. www.fivexl.io | hello@fivexl.io
Spot Instance Advisor
Поможет подобрать набор Instance Type для нужного
региона с наиболее оптимальным сочетанием
вероятности прерывания и ценой
15. www.fivexl.io | hello@fivexl.io
Allocation Strategy:
Lowest-price
Выбор Spot Instance из Spot Instance Pool с наименьшей
ценой. Рекомендуется для нагрузок, которые легко
прервать.
19. www.fivexl.io | hello@fivexl.io
Сколько же стоят Spot
Instance?
Cost Explorer - базовая информация всегда доступна
Spot Instance data feed - детальный отчет в S3
23. www.fivexl.io | hello@fivexl.io
Какие будут расходы, если не
указать Spot Max Price?
Расходы на Spot Instance будут переменными. С
максимумом в размере On-Demand Price.
24. www.fivexl.io | hello@fivexl.io
Может не указывать Spot Max
Price и иногда платить чуть
больше?
Spot price на отдельные Instance Type может сохранятся
на уровне On-Demand Price в течение нескольких
месяцев. “Чуть” может быть сильно большим, чем кажется
26. www.fivexl.io | hello@fivexl.io
И что тогда? Отказываемся от
Spot Instance?
Для данной проблемы есть решение
Не открывая Spot Price History, автоматически, внутри CI
28. www.fivexl.io | hello@fivexl.io
Автоматизация
расчета
Spot Max Price
spot_price_current_min
Хотя бы один Instance Type в хотя бы одной AZ
spot_price_current_optimal
Хотя бы один Instance Type во всех AZ
spot_price_current_max
Все Instance Type во всех AZ
spot_price_current_max_mod
Все Instance Type во всех AZ с повышенной
надежностью
29. www.fivexl.io | hello@fivexl.io
Исходные данные
AZ Type r5.2xlarge r5d.2xlarge r5a.2xlarge
eu-central-1a 0.160 0.168 0.164
eu-central-1b 0.160 0.155 0.157
eu-central-1c 0.157 0.176 0.150
*Данные цены не являются реальными ценами на EC2 Spot Instance
30. www.fivexl.io | hello@fivexl.io
module "ec2_spot_price" {
source = "fivexl/ec2-spot-price/aws"
version = "2.0.0"
instance_types_list = ["r5d.2xlarge"]
availability_zones_names_list = ["eu-central-1a"]
}
output "spot_price_current_min" {
value = module.ec2_spot_price.spot_price_current_min
}
Простой пример
- Просто получить текущую Spot Price для Instance Type и AZ
0.168
31. www.fivexl.io | hello@fivexl.io
module "ec2_spot_price" {
source = "fivexl/ec2-spot-price/aws"
version = "2.0.0"
instance_types_list = ["r5.2xlarge", "r5d.2xlarge", "r5a.2xlarge"]
availability_zones_names_list = ["eu-central-1a", "eu-central-1b", "eu-central-1c"]
}
output "spot_price_current_min" {
value = module.ec2_spot_price.spot_price_current_min
}
spot_price_current_min
- Минимальная текущая Spot Price
- Хотя бы один Instance Type в хотя бы одной AZ.
- ВАЖНО: все EC2 будут запущены только в одной AZ.
- В процессе изменения цен получаем каждый раз самый дешевый Spot Instance
- Вызывает более частые прерывания и требует частого запуска terraform apply
0.150
32. www.fivexl.io | hello@fivexl.io
Исходные данные
AZ Type r5.2xlarge r5d.2xlarge r5a.2xlarge
eu-central-1a 0.160 0.168 0.164
eu-central-1b 0.160 0.155 0.157
eu-central-1c 0.157 0.176 0.150
*Данные цены не являются реальными ценами на EC2 Spot Instance
33. www.fivexl.io | hello@fivexl.io
spot_price_current_optimal
- Оптимальная текущая Spot Price
- Хотя бы один Instance Type во всех AZ
- Избавляет от проблемы с определением выгодного Instance Type для каждой AZ
- При изменении цен переключаемся постоянно на самый выгодной для каждой AZ
- В случае повышения цен начинаем терять AZ по одной
module "ec2_spot_price" {
source = "fivexl/ec2-spot-price/aws"
version = "2.0.0"
instance_types_list = ["r5.2xlarge", "r5d.2xlarge", "r5a.2xlarge"]
availability_zones_names_list = ["eu-central-1a", "eu-central-1b", "eu-central-1c"]
}
output "spot_price_current_optimal" {
value = module.ec2_spot_price.spot_price_current_optimal
}
0.160
34. www.fivexl.io | hello@fivexl.io
Исходные данные
AZ Type r5.2xlarge r5d.2xlarge r5a.2xlarge
eu-central-1a 0.160 0.168 0.164
eu-central-1b 0.160 0.155 0.157
eu-central-1c 0.157 0.176 0.150
*Данные цены не являются реальными ценами на EC2 Spot Instance
35. www.fivexl.io | hello@fivexl.io
spot_price_current_max
- Максимальная текущая Spot Price
- Все Instance Type во всех AZ
- Решает проблему отсутствия Spot Instance за счет использования разных типов
- Допускает большую задержку между запусками terraform apply
module "ec2_spot_price" {
source = "fivexl/ec2-spot-price/aws"
version = "2.0.0"
instance_types_list = ["r5.2xlarge", "r5d.2xlarge", "r5a.2xlarge"]
availability_zones_names_list = ["eu-central-1a", "eu-central-1b", "eu-central-1c"]
}
output "spot_price_current_max" {
value = module.ec2_spot_price.spot_price_current_max
}
0.176
36. www.fivexl.io | hello@fivexl.io
Исходные данные
AZ Type r5.2xlarge r5d.2xlarge r5a.2xlarge
eu-central-1a 0.160 0.168 0.164
eu-central-1b 0.160 0.155 0.157
eu-central-1c 0.157 0.176 0.150
*Данные цены не являются реальными ценами на EC2 Spot Instance
37. www.fivexl.io | hello@fivexl.io
spot_price_current_max_mod
- Модифицированная максимальная текущая Spot Price
- Все тоже самое что и у Максимальной текущей Spot Price
- Решает проблему небольших (5-10%) изменений Spot Price с сохранением контроля
расходов
- Доступно для spot_price_current_min, spot_price_current_optimal,
spot_price_current_max
module "ec2_spot_price" {
source = "fivexl/ec2-spot-price/aws"
version = "2.0.0"
instance_types_list = ["r5.2xlarge", "r5d.2xlarge", "r5a.2xlarge"]
availability_zones_names_list = ["eu-central-1a", "eu-central-1b", "eu-central-1c"]
сustom_price_modifier = 1.1
}
output "spot_price_current_max_mod" {
value = module.ec2_spot_price.spot_price_current_max_mod
}
0.185
38. www.fivexl.io | hello@fivexl.io
Но ведь разница получилась
~0.02$, зачем всё это?
~0.02$/час это ~14.5$ и это на каждый EC2 Spot Instance
И это без учета того что без Spot Max Price цена дойдет до On-Demand
39. www.fivexl.io | hello@fivexl.io
Области применения EC2 Spot
Price модуля
Всё что использует Auto Scaling Group: ECS Capacity
Provider, EKS worker nodes, GitLab self-hosted