#devops #otus #terraform #infrastructureascode #iac Infrastructure as Code

Идея Infrastructure as Code заключается в таком же отношении к разработке инфраструктуры, как к разработке программного продукта. Родилась эта практика в ответ на проблемы надежности и повторяемости ручного управления конфигурацией:

- Серверы, настроенные вручную, отличаются друг от друга как снежинки, падающие с неба. И как бы не старался инженер, при настройке очередного сервера, нет-нет, да пропустит точку с запятой. Хорошо, если приложение просто не запустится, а если оно запуститься, но будет вести себя некорректно? Сколько неправильных биржевых ставок оно успеет сделать?

Решение: Иметь один источник изменений. В IaC это описание конфигурации в виде кода.

- Ручная настройка одного сервера - это время инженера. При увеличении количества серверов линейно растут трудозатраты инженера.

Решение: Автоматизировать все действия производимые с инфраструктурой и хранить их вместе с конфигурацией.

- Часто ручные изменения нигде не документируются. Зайдя на окружение можно с удивлением обнаружить старую версию библиотеки от которой зависит приложение, новую версию СУБД или измененную конфигурацию приложения. И никто уже на расскажет кто и зачем это все менял.

Решение: Хранить конфигурацию в системе контроля версий. При изменении конфигурации делать ссылки на тикеты и документацию.

- Как протестировать изменение инфраструктуры? Создать среду максимально похожую на целевую, внести изменение, проверить работоспособность, перенести изменение, не забыть написать о сделанных изменениях в документацию. В контексте описанных выше проблем сразу видны места в которых процесс может дать сбой.

Решение: Создать CI-процесс запускающийся при внесении изменений в репозиторий с кодом инфраструктуры состоящий из уже автоматизированного подъема окружения и прогона автоматических тестов.

Узнать подробнее об IaC и попробовать подход на практике вы можете на курсе “DevOps практики и инструменты” http://otus.ru/lessons/7?utm_source=telegram&utm_medium=internal&utm_campaign=devops&utm_content=deepdevops&utm_term=31.07