Chcę zoptymalizować koszt naszych grup EC2 z automatycznym skalowaniem, umożliwiając im uruchamianie instancji dodatkowych zamiast instancji na żądanie.
Naprawdę chcę mieć możliwość utrzymania niektórych serwerów w grupie jako instancji na żądanie, niezależnie od tego, co stanie się z rynkiem cen instancji spotowych. Następnie chcę, aby wszystkie dodatkowe serwery w grupie, powyżej mojego skonfigurowanego minimum, były przypadkowymi wystąpieniami. Ogólnie jestem w porządku z opóźnieniem w dodawaniu serwerów za pomocą żądań natychmiastowych.
Nie mogę znaleźć sposobu, aby to zrobić i próbowałem przeszukać dokumentację AWS. Wygląda na to, że ASG może być albo na żądanie, albo na miejscu, ale nie może być hybrydą.
Mogłabym ewentualnie ręcznie dodać instancję na żądanie do modułu elastycznego równoważenia obciążenia przypisanego do grupy automatycznego skalowania, ale wtedy obciążenie tego serwera nie zostanie uwzględnione w pomiarach i wyzwalaczach automatycznego skalowania.
Przypuszczam, że mógłbym wprowadzić absurdalnie wysoką cenę oferty, aby mieć pewność, że zawsze dostanę serwery, których potrzebuję, ale potem patrzę na historię cen i widzę od czasu do czasu duże skoki.
Dokumentacja AWS jest sprzeczna ze sobą, ponieważ w jednym miejscu mówi się, że jeśli wprowadzisz minimum serwera, liczba ta jest „zapewniona”, aby tam być. Ale kiedy czytasz o instancjach spotowych, nie ma żadnych zapewnień. Różnica w cenie spot jest przekonująca, dlatego chciałbym wykorzystać ją tak mocno, jak to możliwe, jednocześnie utrzymując zawsze stałą linię bazową. czy to możliwe?
źródło
Podejście omówione powyżej byłoby trochę niechlujne i mało elastyczne. Bardziej kanonicznym podejściem jest po prostu utworzenie 2 ASG (jeden dla spotu, jeden dla na żądanie), a następnie zarejestrowanie ich obu z tym samym ELB (omówionym tutaj ). Daje to możliwość kontrolowania każdego niezależnie, zamiast próbować zamieniać za pomocą swapów LC w jednym ASG.
źródło
Ten hybrydowy Auto Scaling podejście wydaje się nie być dostępne po wyjęciu z pudełka Rzeczywiście, niestety.
Jednak możesz być w stanie obejść to ograniczenie w następujący sposób (niesprawdzony, tylko projekt systemu, nad którym żonglowałem od dłuższego czasu):
Potencjalne obejście
Jak opisano w sekcji Używanie automatycznego skalowania do uruchamiania instancji spotów, cena ofertowa spot jest parametrem używanej konfiguracji uruchamiania . Jak już wskazałeś, hybrydowa konfiguracja uruchamiania nie jest dostępna, raczej musi być na żądanie lub na miejscu, co oznacza, że przypadek użycia wymaga dwóch różnych konfiguracji uruchamiania.
Nie wydaje się to od razu pomocne, ponieważ można dołączyć tylko jedną konfigurację uruchamiania do grupy automatycznego skalowania naraz , z następującymi (częściowo nieaktualnymi) ograniczeniami (patrz Konfiguracja uruchamiania ):
Podkreślone części są jednak kluczowe, przy czym te pierwsze obejmują wymóg utrzymania instancji działających na żądanie po zmianie z odpowiedniej początkowej konfiguracji uruchamiania na dodatkową konfigurację uruchamiania dodatkowego na żądanie, a ta druga niekoniecznie już tak jest z powodu niedawno wprowadzone zasady zakończenia automatycznego skalowania (dla odmiany zwykle nie było fanfarów za pośrednictwem dołączonego posta na blogu AWS), udokumentowane w zasadach zakończenia wystąpienia dla Twojej grupy automatycznego skalowania :
Jak opisano w zasadach działania zasad zakończenia , możesz teraz określić opcję NewestInstance , jeśli chcesz, aby ostatnia uruchomiona instancja została zakończona , co byłoby jedną z ostatnio uruchomionych instancji dodatkowych:
Oczywiście może być w tym nieco więcej, np. Możesz określić dowolną z zasad jako autonomiczną zasadę lub możesz wyświetlić wiele polityk na liście uporządkowanej , ale takie podejście powinno zapewnić obciążenie wszystkich instancji uwzględnianych w automatyczne skalowanie pomiarów i wyzwalaczy ; pozostaje jednak jedno zastrzeżenie:
Zastrzeżenie
Jeśli moduł równoważenia obciążenia zakończy jedną z instancji na żądanie z jakiegokolwiek innego powodu (np. Ponieważ sam stał się niezdrowy), nie zostanie automatycznie zastąpiony przez instancję na żądanie. Musisz więc monitorować to zdarzenie i rozliczać je osobno, np. Poprzez tymczasową aktywację konfiguracji uruchamiania na żądanie.
Powodzenia!
źródło
Inspiracją dla odpowiedzi tutaj znalazłem https://github.com/ashwanthkumar/matsya
Pomaga Ci wykonać następujące czynności
źródło
Jeśli chcesz tylko 1 ASG ze statyczną liczbą instancji na żądanie, powinny działać:
Utwórz grupę automatycznego skalowania na podstawie konfiguracji uruchamiania wystąpienia punktowego.
Zawieś automatyczne skalowanie na ASG
Ręcznie dodaj instancje na żądanie (statyczne obciążenie podstawowe) do ASG i włącz ochronę instancji dla tych instancji.
Wznów automatyczne skalowanie w ASG
Domyślne zasady automatycznego skalowania będą teraz ignorować instancje na żądanie (ze względu na ochronę) i zakończą tę samą liczbę instancji dodatkowych co instancja na żądanie, aby osiągnąć żądaną liczbę grup. Wszelkie działania zwiększania lub zmniejszania będą uruchamiać lub przerywać tylko instancje spot.
źródło