CloudFormation part 2 Flashcards
Что нужно сделать с bootstrap скриптом перед тем, как передать его в свойство User-Data в объявление EC2 instance’а?
Как с этим связаны CloudFormation Helper-Scripts?
Какие примеры helper-scripts?
Как установить эти helper-scripts?
Пропустить через функцию Fn::Base64
CloudFormation Helper Scripts - это скрипты на Python, которые решают некоторые проблемы UserData скриптов:
- читабельность
- мониторинг успешности выполнения
- расширяемость
Примеры
- cfn-init
- cfn-signal
- cfn-get-metadata
- cfn-hub
CloudFormation Helper Scripts доступны по-умолчанию на Amazon Linux AMI.
А на других AMI их можно установить через yum
или dnf
В какой файл пишет логи user-data?
В какой файл пишет логи cfn-init?
cfn-signal?
- UserData script пишет логи в /var/log/cloud-init-output.log
-
cfn-init
пишет логи в/var/log/cfn-init.log
и в/var/log/cfn-init-cmd.log
-
cfn-signal
пишет логи в `/var/log/cloud-init.log
cfn-init helper script
Где он объявлен?
Что он содержит?
В чём его польза?
Resources => EC2Instance => Metadata => AWS::CloudFormation::Init
Содержит объявление пакетов для предустановки, user’ов и групп на ОС, файлов для скачивания и создания, CLI команд для выполнения, сервисов ОС для запуска
Смысл этого блока в том,
чтобы читабельно указать список всех пакетов/файлов/команд,
которые нужно установить/выполнить во время EC2 bootstrap фазы
cfn-signal helper script
Где он объявлен?
Что он содержит?
В чём его польза?
Resources => ASG/EC2Instance => CreationPolicy => ResourceSignal => Timeout
Или отдельный ресурс AWS::CloudFormation::WaitCondition
Содержит время timeout, которое дано EC2 instance’у для инициализации и отчёта о своём здоровье
Смысл этого скрипта в том,
чтобы EC2 отчитался о своём здоровье после инициализации
(после выполнения скрипта cfn-signal)
Какая последовательность взаимодействий EC2 с CloudFormation API в рамках cfn-init и cfn-signal
- CloudFormation запускает новый EC2 instance
- Начинается ожидание
WaitCondition
- EC2 instance запрашивает init данные из CloudFormation API
- EC2 instance выполняет инициализацию
cfn-init
- EC2 instance шлёт сигнал в CloudFormation API
cfn-signal
Проблема
CloudFormation WaitCondition НЕ получил сигнал подтверждения от EC2 instance’а
Как troubleshoot’ить?
- убедиться, что AMI нашего EC2 instance’а имеет CloudFormation Helper scripts
- прочитать output команд
cfn-init
иcfn-signal
- убедиться, что EC2 имеет выход в интернет (потому что EC2 должен слать запрос в CloudFormation)
Проблема
Произошла ошибка инициализации EC2 instance’а
Но логов нет
Что делать?
disable rollback
По-умолчанию CloudFormation совершит rollback, если EC2 instance НЕ удачно инициализирован. Тогда логи выполнения helper scripts пропадут.
Чтобы это предотвратить, нужно отключить rollback
cfn-hup helper script
Где он объявлен?
Что он содержит?
В чём его польза?
/etc/cfn/cfn-hup.conf
cfn-hup
- это скрипт, который заставляет EC2 instance
отслеживать изменения в коде yaml-блока Metadata
каждые 15 минут (интервал задаётся)
- и применять их, если они появились.
Изменения применяются через повторный запуск cfn-init
скрипта.
Этот скрипт даёт возможность динамически подтягивать изменения в конфигурации EC2 instance’а (которые задаются в UserData скрипте) БЕЗ пересоздания EC2 instance’а.
Metadata - это yaml блок в объявлении EC2 instance’а, в котором указан AWS::CloudFormation::Init блок
(инструкции по предустановке программ, начальной конфигурации и прочему bootstrap’ингу)
Что может вызвать проблемы при попытке выполнить Rollback?
Drift Detection
CloudFormation Update Policy
Что это такое?
Для каких ресурсов это можно объявить?
Какие настройки оно имеет?
Как выглядит в CloudFormation Template’е?
Какую проблему решает?
Какую технологию напоминает?
Проблема
В CloudFormation можно объявить ресурс ASG.
У ASG есть её Launch Template/Configuration.
Частая задача - изменить (обновить) этот Launch Template.
При этом, если сделать это просто так (без указания Update Policy), то будет downtime у всей ASG.
ASG Update Policy Rolling Update
очень напоминает идею ASG Instance Refresh
Но я НЕ уверен, что это одно и то же.
Update Policy - это атрибут CloudFormation ресурса ASG.
В нём можно указать Rolling Update и его настройки.
Главная настройка - это минимальное количество EC2 instance’ов, которые будут в состоянии Running во время поочерёдного обновления ASG Launch Template.
Таким образом
Наличие атрибута UpdatePolicy
→ RollingUpdate
у ресурса ASG спасает нас от полного downtime’а всей ASG во время обновления EC2 Launch Template’а