Как проверить спотовую цену AWS автоматически?

15

Я думал о работе Дженкинса, чтобы проверить цены на ящики с агентами, которые мы раскручиваем; время от времени цена резко возрастает, и пройдет час или два, прежде чем кто-нибудь заметит, что новых агентов не появляется, а затем мы должны войти вручную и проверить спотовую цену и соответственно скорректировать ее, или переключить зоны и т. д.

Моим первым инстинктом было то, что лучше всего иметь почасовую работу Дженкинса, которая запускает aws ec2 describe-spot-instance-requestsи проверяет неудавшиеся запросы (а затем ослабляет нас при сбое). Но мне интересно, есть ли более чистый метод, который включает в себя фактическое сравнение жестких цен (и, следовательно, может сказать нам точно, что и сколько), вместо того, чтобы рассматривать успешные / неудачные запросы.

Кто-нибудь настраивал нечто подобное? Как ты это сделал?

Alex
источник
1
Думаю, разумный вопрос ... но почему бы вам не просто предложить цену, которая действительно стоит для вас, выбрать несколько типов экземпляров (включая экземпляры больше, чем нужно), которые иногда дешевле, когда спотовые цены на меньшие экземпляры растут ... иногда - в том числе прямо сейчас, когда я пишу это - я обнаруживаю себя с cc2.8xlarge, потому что в настоящее время он дешевле, чем c3.2xlarge, который мне нужен, несмотря на то, что у меня 4x ядер и 4x памяти), и пусть система обрабатывает экземпляр выбор типа и размещение AZ на основе рынка?
Майкл - sqlbot
1
@ Michael-sqlbot Я не говорю об этой части процесса; у нас есть документация, в которой говорится, что мы приобретаем экземпляр определенного размера для целей аудита, и это то, с чем мы застряли. Просто пытаюсь максимально использовать неидеальную ситуацию.
Алекс
1
Достаточно справедливо, @Alex. Просто подумал, что я добавлю это, на случай, если ты не учел это.
Майкл - sqlbot
@ Алекс Из интереса, есть ли определенный размер экземпляра, чтобы его можно было легко увидеть на счетах? Потому что вы (точнее, они!) Можете использовать теги, а затем просматривать их в проводнике затрат.
Тим Мэлоун

Ответы:

15

Обнаружил инструмент с открытым исходным кодом под названием autospotting, который может помочь в этом:

После включения в существующую группу AutoScaling по требованию, он запускает точечный экземпляр EC2, который дешевле, по крайней мере такой же большой, и настроен идентично вашим текущим экземплярам по требованию. Как только новый экземпляр готов, он добавляется в группу, а экземпляр по требованию отсоединяется от группы и завершается.

У нас это есть в нашем конвейере задач, мы сможем добавить больше контекста, как только мы закончим это.

Обновить:

Другим инструментом, который недавно был продемонстрирован на конференции, был mapbox / spotwap

Это работает немного по-другому. Он отслеживает обычную ASG с экземплярами по требованию или зарезервированными, а затем, если возникает масштабирование, предлагает и обеспечивает выборку экземпляров аналогичного уровня вычислений в отдельной ASG.

Hashfyre
источник
2
Добро пожаловать на сайт, Hashfyre :)
Dawny33
1
Я автор AutoSpotting, спасибо, что упомянули об этом! Вы уже попробовали? Я все уши за отзывы пользователей.
Кристиан Магерушан-Станчу
6

Я бы лично рассмотрел такую ​​модель:

Timed Lambdas -> Checks spot price -> Push to ElastiCache

Тогда, когда вам нужны экземпляры:

Timed lambdas -> Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -> This is parsed as argument to IaC code and pushes out the spot price

Вы также можете установить некоторые допуски в лямбдах (например, увеличение на 10, 25, 50% в зависимости от важности) и жесткое ограничение по требованию, например. Это также отличное место для построения логики для обработки, например, поиска самого дешевого AZ, поиска относительно самой низкой спотовой цены ( 2xt2.mediumпротив t2.large) и т. Д.

Генри
источник
Просто для информации, вы могли бы отредактировать удаленный ответ и отметить его, чтобы запросить удаление. (Без вреда, это просто информативно :))
Tensibai
1
Я оставлю свой позор настойчивым, чтобы напомнить мне о моих заблудших днях на всю вечность.
Генри
Rofl, действительно не стыдно, не волнуйтесь :)
Tensibai
3
Мои шрамы определяют, кто я есть
Генри
Отличная идея - также стоит упомянуть, что можно подтолкнуть цену к таблице DynamoDB, если у них еще нет кластера ElastiCache;). Или, может быть, даже файл JSON в корзине S3.
Тим Мэлоун
4

Позвольте мне дать вам инструментальный способ сделать это.

время от времени цена резко возрастает, и пройдет час или два, прежде чем кто-нибудь заметит, что новых агентов не появляется, а затем мы должны войти вручную и проверить спотовую цену и соответственно скорректировать ее, или переключить зоны, и т. д.

Мы столкнулись с той же проблемой в инфраструктуре, которую мы строим. Итак, у нас были if-elseблоки стилей для установки цены предложения в зависимости от цены экземпляра по требованию.

В AWS есть API для получения цены экземпляра по требованию. Мы использовали эту оболочку Python для этой цели.

Таким образом, как только мы получили цену по требованию (скажем X), мы подключили if-elseблоки типа, которые 0.4*X, 0.6*X, 0.8*X, X, что означает , что мы пытаемся по цене предложений в пределах 40%, 60%, 80% от на цена спроса. Если все не удается, то мы возвращаемся к созданию экземпляров по требованию.

Кроме того, поскольку это не зависит от текущей спотовой цены AWS, мы никогда не платим цену, превышающую цену по требованию.

Но, если вы ищете способ сделать это «на лету», то решение Hashfyre должно быть правильным.

Dawny33
источник