Як я можу автоматично перенести нове зображення в групу автоматичного масштабування AWS?


21

У мене є налаштування веб-додатків з балансиром навантаження та групою автоматичного масштабування для управління масштабуванням. Вихідний код знаходиться у сховищі git, тому мені не потрібно оновлювати зображення, коли змінюється код, але час від часу середовище змінюється, тому ми створюємо нове зображення. Потім це зображення потрібно включити до групи автоматичного масштабування.

Чи є спосіб циклічно зображувати зображення? Зараз я планую дії в масштабі та зменшенні масштабів, які позбавляються від старих примірників.


2
Це, мабуть, ефективніше, якщо після створення нової конфігурації запуску та оновлення групи автоматичного масштабування ви позначите кожен екземпляр як нездоровий (наприклад, використання as-set-instance-health), так що автоматичне масштабування просто замінить його новим екземпляром.
cyberx86

Відповіді:


10

Я хотів би запропонувати "AWS-HA-Release" зробити це - як працює AWS-HA-Release:

  1. Якщо поточна група автоматичного масштабування та ELB повідомляють про 5 здорових випадків,
  2. AWS-HA-Release приносить новий екземпляр у виробництво і чекає, коли ЕЛБ визначить його здоровим (довести загальну кількість здорових примірників до 6)
  3. Вилучає старий екземпляр (всього до 5)
  4. Наводить в експлуатацію ще один екземпляр (всього до 6)
  5. Вилучає старий екземпляр (всього до 5)
  6. і так далі, поки всі екземпляри не будуть замінені

У цьому випадку ви можете відправляти новий код або нові версії AMI без простоїв і мати перевагу абсолютно нових екземплярів. Інструмент AWS-HA-Release доступний на веб- сайті https://github.com/colinbjohnson/aws-missing-tools .


9

Найпростіший спосіб - збільшити кількість мінімальних екземплярів в групі автоматичного масштабування (ASG), щоб подвоїти поточну кількість, дочекатися, коли всі вони запущені, а потім змінити цю мінімальну кількість екземплярів до тієї, яка вона була. ELB знищить старі екземпляри і залишить нові екземпляри з кодом. Для досягнення цієї політики припинення слід встановити " OldestInstance " працювати за призначенням. Політика припинення за замовчуванням може мати небажані побічні ефекти.

Ви можете подивитися параметри та приклади AWS CLI тут: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html


Будьте здорові, це супер зручний, безпроблемний метод.
Elad Nava

1
Це не завжди спрацює, згідно з документами AWS, навіть під час вибору спеціальної політики припинення ASG буде зберігати збалансованість AZ перед застосуванням політики припинення. Тож подвоєння та скорочення розміру вдвічі може залишити вас кількома старими екземплярами. Це особливо ймовірно при використанні ASG з декількома типами екземплярів та варіантами придбання, оскільки ASG буде підтримувати збалансований AZ і ринковий варіант (спот на вимогу) збалансований перед застосуванням політики "OldestInstance": docs.aws.amazon.com / автоматичне масштабування / ec2 / userguide /…
Шахад

6

як я керую цим сценарієм, - це використовувати функцію UpdatePolicy об’єкта AWS :: AutoScaling :: AutoScalingGroup у формуванні хмар. коли оновлено стек формування хмар, він керуватиме циклічністю примірників.

деякі посилання. 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. Я не уявляв, що Cloudformation пропонував цю функціональність.
AJB

Саме те, що я шукав. Ми розгортаємо свої стеки через Jenkins, коли зміни через консоль AWS блокуються.
Грег Білес

3

Подивіться також на інструмент Netflix Asgard , який зараз є відкритим кодом. Він не тільки може створити групи автоматичного масштабування, але також може виконувати прокатні нові зображення AMI для групи примірників.


Ви маєте на увазі "Netflix Asgard"

4
Netflix Asgard тепер застарілий, його замінено на Netflix Spinnaker
dlaidlaw

0

Насправді немає справді хорошого способу зробити це, якщо чесно. Найкращий спосіб, який я знайшов, це ввести версію у назві ASG. Кожен раз, коли я оновлюю AMI, я створюю новий ASG + Launch Config з новою версією, щоб він не конфліктував з іншою групою. Потім я припиняю всі екземпляри в старій групі.

Якщо потрібне більш стійке до відмови розгортання, рекомендую додати ще один крок, включаючи створення нового балансира. Це дозволяє вам обидва ASG ізольовані один від одного. Це також дозволяє мати область "Постановка" для тестування змін в останній раз перед оновленням. Потім, коли ви будете готові до переключення, ви оновите записи DNS та припините всі екземпляри в старій групі.


0

Як я опублікував тут (аналогічне запитання, лише з Terraform), він не вбудований в ASG жодним чином, за винятком випадків, коли ви використовуєте хмарну інформацію. Я також боровся з цим, тому закінчив написати "ролик", який дивиться декілька ASG, перевіряє їх стан та оновлення. Завжди раді прийняти відгуки. http://github.com/deitch/aws-asg-roller

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.