Terraform: инфраструктура на уровне кода | страница 34
Резюме
Ниже показана сводная таблица самых популярных средств IaC (табл. 1.4). Заметьте, что здесь приводятся стандартные и самые распространенные способы их применения. Как уже упоминалось ранее, данные инструменты достаточно гибкие, чтобы их можно было применять и в других конфигурациях (например, Chef можно запускать без центрального сервера, а Salt поддерживает неизменяемую инфраструктуру).
Таблица 1.4. Сравнение наиболее распространенных способов использования самых популярных средств IaC
Инструмент
Код
Облака
Тип
Инфраструктура
Язык
Агент
Вед. cервер
Сообщество
Зрелость
Chef
Откр.
Все
Упр. конф.
Изменяемая
Процедурный
Есть
Есть
Большое
Высокая
Puppet
Откр.
Все
Упр. конф.
Изменяемая
Декларативный
Есть
Есть
Большое
Высокая
Ansible
Откр.
Все
Упр. конф.
Изменяемая
Процедурный
Нет
Нет
Огромное
Средняя
SaltStack
Откр.
Все
Упр. конф.
Изменяемая
Декларативный
Есть
Есть
Большое
Средняя
CloudFormation
Закр.
AWS
Иниц. рес.
Неизменяемая
Декларативный
Нет
Нет
Маленькое
Средняя
Heat
Откр.
Все
Иниц. рес.
Неизменяемая
Декларативный
Нет
Нет
Маленькое
Низкая
Terraform
Откр.
Все
Иниц. рес.
Неизменяемая
Декларативный
Нет
Нет
Огромное
Низкая
В компании Gruntwork нам нужно было открытое, не привязанное к конкретному облаку средство инициализации ресурсов, которое поддерживает неизменяемую инфраструктуру, декларативный язык, архитектуру, не требующую наличия центральных серверов и агентов, и имеет большое сообщество и зрелую кодовую базу. Как показывает табл. 1.4, проект Terraform хоть и неидеальный, но именно он больше всего удовлетворяет нашим критериям.
Подходит ли он под ваши критерии? Если да, то переходите к главе 2, в которой вы научитесь его использовать.
3 Источник: KimG., HumbleJ., DeboisP., WillisJ. TheDevOpsHandbook: HowtoCreateWorld-ClassAgility, Reliability & SecurityinTechnologyOrganizations. — ITRevolutionPress, 2016.
4 Идемпотентность — свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом.
5 В современных операционных системах код выполняется в одном из двух «пространств»: в пространстве ядра и пространстве пользователя. Код, который работает в пространстве ядра, имеет прямой и неограниченный доступ ко всему оборудованию. На него не распространяются ограничения безопасности: вы можете выполнять любые процессорные инструкции, обращаться к любому участку жесткого диска, записывать в любой адрес памяти. При этом сбой в пространстве ядра обычно приводит к сбою всего компьютера. В связи с этим оно обычно отводится для самых низкоуровневых и доверенных функций ОС (которые называют ядром). Код в пользовательском пространстве не имеет непосредственного доступа к аппаратному обеспечению и вместо этого должен использовать API, предоставляемые ядром ОС. Эти интерфейсы могут накладывать ограничения безопасности (скажем, права доступа) и локализовать сбои в пользовательских приложениях, поэтому весь прикладной код работает в пользовательском пространстве.