Jak automatycznie sprawdzać ceny spot AWS?

15

Zastanawiałem się nad pracą Jenkinsa, by sprawdzić ceny pudełek agentów, które rozwijamy; co jakiś czas gwałtowne wzrosty cen i minie godzina lub dwie, zanim ktokolwiek zauważy, że nie pojawiają się nowi agenci, a następnie musimy wejść ręcznie i sprawdzić cenę spotową i odpowiednio ją dostosować lub zmienić strefy itp.

Mój pierwszy instynkt polegał na tym, że najlepszą drogą jest cogodzinne zadanie Jenkinsa, które uruchamia aws ec2 describe-spot-instance-requestsi sprawdza, czy nie ma nieudanych żądań (a następnie zwalnia nas z błędu). Zastanawiam się jednak, czy istnieje czystsza metoda, która polega na porównywaniu twardych cen (i dlatego mogłaby powiedzieć nam dokładnie, co jest nie tak i o ile), zamiast patrzeć na udane / nieudane żądania.

Czy ktoś skonfigurował coś podobnego? Jak to zrobiłeś?

Alex
źródło
1
Wydaje mi się, że rozsądne pytanie ... ale dlaczego nie licytować, które instancje są dla ciebie warte, wybrać wiele typów instancji (w tym instancje większe niż to, czego potrzebujesz, które są czasami tańsze, gdy ceny spotów mniejszych instancji rosną ... od czasu do czasu - także teraz, kiedy to piszę - znajduję się z cc2.8xlarge, ponieważ jest on obecnie tańszy niż c3.2xlarge, którego potrzebowałem, pomimo posiadania 4x rdzeni i 4x pamięci) i pozwalam systemowi obsłużyć wystąpienie wybór typu i rozmieszczenie AZ na podstawie rynku?
Michael - sqlbot
1
@ Michael-sqlbot Nie mam nic do powiedzenia w tej części procesu; mamy dokumentację stwierdzającą, że kupujemy instancje o określonym rozmiarze w celach kontrolnych i dlatego utknęliśmy. Próbuję jak najlepiej wykorzystać wyjątkową sytuację.
Alex
1
W porządku, @Alex. Pomyślałem, że wrzucę to, na wypadek, gdybyś tego nie wziął pod uwagę.
Michael - sqlbot
@Alex Nie interesuje mnie to, czy rozmiar określonej instancji jest łatwo widoczny na rachunkach? Ponieważ ty (a raczej oni!) Możesz użyć tagów, a następnie zobaczyć je w Eksploratorze kosztów.
Tim Malone

Odpowiedzi:

15

Zauważyłem narzędzie typu open source o nazwie autospotting, które może pomóc:

Po włączeniu w istniejącej grupie Autoskalowania na żądanie uruchamia instancję spot EC2, która jest tańsza, co najmniej tak duża i skonfigurowana identycznie jak bieżące instancje na żądanie. Gdy tylko nowe wystąpienie będzie gotowe, zostanie dodane do grupy, a wystąpienie na żądanie zostanie odłączone od grupy i zakończone.

Mamy to w przygotowaniu, będziemy w stanie dodać więcej kontekstu, kiedy to zakończymy.

Aktualizacja:

Kolejnym narzędziem, które niedawno zostało zaprezentowane podczas konferencji, było mapbox / Spotwap

Działa to nieco inaczej. Monitoruje normalny ASG za pomocą instancji On-Demand lub Reserved, a następnie, jeśli pojawi się skala, oferty i rezerwy wykrywają instancje o podobnym poziomie obliczeniowym na osobnym ASG.

Hashfyre
źródło
2
Witamy na stronie, Hashfyre :)
Dawny33
1
Jestem autorem AutoSpotting, dziękuję, że o tym wspomniałeś! Czy próbowałeś już? Zależy mi na opiniach użytkowników.
Cristian Măgherușan-Stanciu
6

Osobiście rozważyłbym taki model:

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

Gdy potrzebujesz instancji:

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

Można również ustawić pewne tolerancje w ramach lambdas (tj. 10, 25, 50% wzrostów w zależności od ważności) i na przykład twardy limit zapotrzebowania na żądanie. Jest to również świetne miejsce do zbudowania logiki do obsługi, na przykład znalezienia najtańszej AZ, znalezienia stosunkowo najtańszej ceny spotowej ( 2xt2.mediumvs t2.large) itp.

Henz
źródło
Tylko dla informacji mogłeś edytować usuniętą odpowiedź i oflagować ją, by poprosić o usunięcie. (Nie szkodzi, to tylko pouczające :))
Tensibai 19.04.17
1
Odejdę ze wstydu, aby wytrwać, aby przypomnieć mi o moich błędnych dniach na całą wieczność.
Henry
Rofl, naprawdę nie ma się czego wstydzić, nie martw się :)
Tensibai
3
MOJE blizny określają, kim jestem
Henry
Fajny pomysł - warto również wspomnieć, że można zepchnąć cenę do tabeli DynamoDB, na wypadek, gdyby jeszcze nie mieli klastra ElastiCache;). A może nawet plik JSON w segmencie S3.
Tim Malone
4

Pozwól, że podam ci próbę zrobienia tego bez użycia narzędzi.

co jakiś czas gwałtowne wzrosty cen i minie godzina lub dwie, zanim ktokolwiek zauważy, że nie pojawiają się nowi agenci, a następnie musimy wejść ręcznie i sprawdzić cenę spotową i odpowiednio ją dostosować lub zmienić strefy itp.

Ten sam problem napotkaliśmy w infrastrukturze, którą budujemy. Mieliśmy więc if-elsebloki stylu, aby ustawić cenę oferty, w zależności od ceny instancji na żądanie.

AWS posiada interfejs API do uzyskiwania ceny instancji na żądanie. W tym celu wykorzystaliśmy to opakowanie w języku Python .

Więc kiedy dostaliśmy cenę na żądanie (powiedzmy X), podłączyliśmy w if-elseblokach typu, które są 0.4*X, 0.6*X, 0.8*X, X, co oznacza, że próbują za cenę kupna w granicach 40%, 60%, 80% ceny na -potrzebna cena. Jeśli wszystko zawiedzie, wracamy do tworzenia instancji na żądanie.

Ponieważ jest to niezależne od aktualnych cen spotowych AWS, nigdy nie płacimy ceny wyższej niż cena na żądanie.

Ale jeśli szukasz sposobu na zrobienie tego w locie, rozwiązaniem powinno być rozwiązanie Hashfyre.

Dawny33
źródło