2016-08-21 5 views
2

Просто попробуйте получить информацию о aws asg.AWS AutoScaling - жизненный цикл экземпляра

Вот мой сценарий;

  • запуск asg из launch config, используя по умолчанию ubuntu ami
  • положения (установить все необходимые пакеты и конфигурацию) экземпляры в asg с помощью кода ansible
  • развернуть экземпляры с помощью python

Счастливые дни, каждая вещь настроена.

Проблема заключается в том, что я должен изменить метрики моего asg, чтобы все экземпляры были завершены, а затем изменили их на исходные показатели, новые экземпляры пустые! Нет пакетов, нет кода!

1 - Ожидаемое поведение?

2 - Также, если asg имеет 2 экземпляра и весы до 5, он добавит 3 пустых экземпляра или возьмет копию 1 из запущенных экземпляров с кодом и пакетами и запустит 3 новых?

Если 1 есть Да, как мне обойти это? Нужно ли использовать предварительно испеченное изображение? Но тогда даже у этого не будет последнего кода.

В основном в часы пик я хочу, чтобы «нулевать» мой asg, поэтому экземпляры не запускаются, а затем снова возвращаются в часы пик. Не имеет смысла каждый раз предоставлять и развертывать код.

Любая помощь/совет оценены.

ответ

2

Проблема, связанная с вашим подходом, заключается в развертывании кода для экземпляра запуска. Поэтому, когда вы меняете экземпляр метрики ASG и возвращаетесь снова, они запускаются из AMI, поэтому они пропускают код и конфигурацию. Всегда помните, что при автоматическом масштабировании запущенные экземпляры запускаются с использованием AMI, используемого ASG, и запущенного экземпляра.

Чтобы избежать этого, вы можете использовать пользовательские данные, которые будут запускать сценарий конфигурации и вытаскивать данные из вашего репо в экземпляр на каждом экземпляре, когда экземпляр запускается из AMI, чтобы пустой экземпляр не получал запущен.

Прочтите это руководство разработчика для пользовательских данных

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

2
  1. Да, это ожидаемое поведение
  2. Это добавит 3 пустых экземпляров (если по blank вы имеете в виду from my base image)

Обычные опции:

  1. Выпекать новое изображение каждый раз, когда появляется новая версия кода (его можно легко автоматизировать как шаг в процессе сборки/развертывания), но, вероятно, он имеет смысл, только если это не так уж часто.

  2. Настройте свой экземпляр, чтобы вытащить последнюю версию программного обеспечения при запуске. Существует несколько вариантов, которые включают в себя user-data scripts. Вы можете вытащить последнюю версию непосредственно из SCM или, например, поместить последний пакет в ведро S3 как часть процесса сборки, а также настроить экземпляр при запуске, чтобы вытащить его из S3 и самостоятельно развернуть, или что бы вы ни нашли. .

+0

Итак, если я предварительно испек ami, то используйте это в моем asg с конфигурацией запуска с помощью этого ami, я исправил свою первую проблему, которая является пакетами и config. Теперь, если я развожу код в новые экземпляры, скажем, 3, и моя служба запущена и запущена. Когда asg масштабируется до 5, будут ли у 2 новых экземпляров код, который есть у остальных 3? –

+0

№ При развертывании кода в активные экземпляры одновременно выпекайте новый ami. –

+0

Если вы чувствуете, что слишком много накладных расходов для создания нового AMI для каждой версии программного обеспечения, вы можете пойти с опцией 2. –