Jak mogę automatycznie cyklicznie przetwarzać nowy obraz w grupie automatycznego skalowania AWS?

21

Mam konfigurację aplikacji sieci Web z modułem równoważenia obciążenia i grupą automatycznego skalowania do zarządzania skalowaniem. Kod źródłowy znajduje się w repozytorium git, więc nie muszę aktualizować obrazów, gdy kod się zmienia, ale czasami środowisko się zmienia, więc tworzymy nowy obraz. Następnie ten obraz musi zostać włączony do grupy automatycznego skalowania.

Czy istnieje sposób automatycznego cyklicznego wyświetlania obrazów? Obecnie planuję akcję zwiększania i zmniejszania skali, która pozbywa się starych instancji.

platformy
źródło
2
Prawdopodobnie jest to bardziej wydajne, jeśli po utworzeniu nowej konfiguracji uruchamiania i aktualizacji grupy automatycznego skalowania oznaczysz każdą instancję jako niezdrową (np. Używając as-set-instance-health), dzięki czemu automatyczne skalowanie po prostu zastąpi ją nową instancją.
cyberx86

Odpowiedzi:

10

W tym celu chciałbym zasugerować „AWS-HA-Release” - sposób działania AWS-HA-Release:

  1. Jeśli bieżąca grupa autoskalowania i ELB zgłaszają 5 wystąpień, które są zdrowe,
  2. AWS-HA-Release wprowadza nową instancję do produkcji i czeka, aż ELB zidentyfikuje ją jako zdrową (zwiększ całkowitą liczbę zdrowych instancji do 6)
  3. Usuwa starą instancję (łącznie do 5)
  4. Wprowadza do użytku kolejną instancję (łącznie do 6)
  5. Usuwa starą instancję (łącznie do 5)
  6. i tak dalej, aż wszystkie wystąpienia zostaną zastąpione

W takim przypadku możesz wysłać nowy kod lub nowe wersje AMI bez przestojów i skorzystać z całkowicie nowych instancji. Narzędzie AWS-HA-Release jest dostępne na stronie https://github.com/colinbjohnson/aws-missing-tools .

Colin Johnson
źródło
9

Najłatwiejszym sposobem jest zwiększenie liczby minimalnych instancji w Grupie automatycznego skalowania (ASG), aby podwoić bieżącą liczbę, poczekać, aż wszystkie zostaną uruchomione, a następnie zmienić minimalną liczbę instancji na taką, jaka była. ELB zabije starsze wystąpienia i pozostawi nowsze z kodem. Aby to osiągnąć, zasadę wypowiedzenia należy ustawić na „ OldestInstance ”, aby działała zgodnie z przeznaczeniem. Domyślna polityka zakończenia może mieć niepożądane skutki uboczne.

Parametry i przykłady interfejsu AWS CLI można znaleźć tutaj: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html

Siergiej Kuzniecow
źródło
Pozdrowienia, jest to bardzo wygodna i bezproblemowa metoda.
Elad Nava,
1
Nie zawsze będzie to działać, zgodnie z dokumentami AWS, nawet po wybraniu niestandardowej zasady zakończenia, ASG utrzyma równowagę AZ przed zastosowaniem zasady zakończenia. Zatem podwojenie i zmniejszenie rozmiaru o połowę może dać ci kilka starych instancji. Jest to szczególnie prawdopodobne w przypadku korzystania z ASG z wieloma typami wystąpień i opcjami zakupu, ponieważ ASG utrzyma równowagę AZ ORAZ opcję rynkową (spot vs na żądanie) przed zastosowaniem zasady „OldestInstance”: docs.aws.amazon.com / autoscaling / ec2 / userguide /…
Shahad
6

sposobem zarządzania tym scenariuszem jest użycie funkcji UpdatePolicy obiektu AWS :: AutoScaling :: AutoScalingGroup w tworzeniu chmury. gdy stos formacji chmur jest aktualizowany, będzie zarządzał cyklem instancji.

niektóre referencje. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy .html

graeme
źródło
Dzięki tonie @graeme. Nie miałem pojęcia, że ​​Cloudformation oferuje tę funkcjonalność.
AJB
Właśnie tego szukałem. Rozmieszczamy nasze stosy za pośrednictwem Jenkins, gdy zmiany w konsoli AWS są zablokowane.
Greg Biles
3

Zobacz także narzędzie Netflix Asgard , które jest teraz open source. Może nie tylko skonfigurować grupy automatycznego skalowania, ale może także wykonywać nowe wersje obrazów AMI dla grupy instancji.

platformy
źródło
Masz na myśli „Netflix Asgard”
4
Netflix Asgard jest teraz przestarzały, zastąpiony przez Netflix Spinnaker
dlaidlaw
0

Szczerze mówiąc, nie ma naprawdę dobrego sposobu na zrobienie tego. Najlepszym sposobem, aby to zrobić, jest umieszczenie wersji w nazwie ASG. Za każdym razem, gdy aktualizuję AMI, tworzę nowy ASG + Launch Config z nową wersją, aby nie powodował konfliktu z inną grupą. Następnie kończę wszystkie wystąpienia w starej grupie.

Jeśli wymagane jest wdrożenie bardziej odporne na awarie, zalecam dodanie kolejnego kroku, obejmując również utworzenie nowego modułu równoważenia obciążenia. Pozwala to na izolację od siebie obu ASG. Pozwala także na utworzenie obszaru przejściowego do testowania zmian po raz ostatni przed aktualizacją. Następnie, gdy jesteś gotowy do zmiany, zaktualizuj rekordy DNS i zakończ wszystkie wystąpienia w starej grupie.

bwight
źródło
0

Jak pisałem tutaj (podobne pytanie, tylko z Terraform), nie jest ono wbudowane w ASG w żaden sposób, z wyjątkiem sytuacji, gdy używasz chmury. Walczyłem również z tym, więc ostatecznie napisałem „rolkę”, która ogląda wiele ASG, sprawdza ich stan i aktualizacje. Zawsze chętnie przyjmujemy opinie. http://github.com/deitch/aws-asg-roller

rowie
źródło