Мы настраиваем нашу Конфигурацию запуска для использования «чистого» готового AMI - мы используем их: http://aws.amazon.com/amazon-linux-ami/
Одна из особенностей этих AMI - CloudInit - https://help.ubuntu.com/community/CloudInit
Эта функция позволяет нам доставлять во вновь порожденный простой ванильный экземпляр EC2 некоторые данные. В частности, мы даем экземпляру скрипт для запуска.
Скрипт (в двух словах) делает следующее:
- Обновляет себя (чтобы убедиться, что все исправления безопасности и исправления ошибок применены).
- Устанавливает Git и Puppet.
- Клонирует репозиторий Git от Github.
- Применяет кукольный сценарий (который является частью репо) для самостоятельной настройки. Puppet устанавливает остальные необходимые программные модули.
Это занимает больше времени, чем загрузка с предварительно сконфигурированного AMI, но мы пропускаем процесс фактического создания этих AMI каждый раз, когда мы обновляем программное обеспечение (пару раз в неделю), и серверы всегда "чисты" - нет исправления вручную, все программные модули обновлены и т. д.
Теперь, чтобы обновить программное обеспечение, мы используем локальный скрипт boto.
Скрипт убивает серверы, на которых работает старый код, один за другим. Механизм автоматического масштабирования запускает новые (и обновленные) серверы.
Обязательно используйте as-terminate-instance-in-auto-scaling-group
, поскольку использование ec2-terminate-instance
приведет к тому, что ELB продолжит отправлять трафик на экземпляр завершения работы, пока не пройдет проверку работоспособности.
Интересное сообщение в блоге: http://blog.codento.com/2012/02/hello-ec2-part-1-bootstrapping-instances-with-cloud-init-git-and-puppet/