Рис. 1.5. Средства инициализации ресурсов можно использовать в связке с вашим облачным провайдером, чтобы создавать серверы, базы данных, балансировщики нагрузки и любые другие элементы вашей инфраструктуры
Например, следующий код развертывает веб-сервер с помощью Terraform:
resource "aws_instance" "app" {
instance_type = "t2.micro"
availability_zone = "us-east-2a"
ami = "ami-0c55b159cbfafe1f0"
user_data = <<-EOF
#!/bin/bash
sudo service apache2 start
EOF
}
Не нужно волноваться, если вам непонятны какие-то элементы данного синтаксиса. Пока что сосредоточьтесь на двух параметрах.
•ami определяет идентификатор образа AMI, который нужно развернуть на сервере. Вы можете присвоить ему ID образа, собранного из шаблона Packer web-server.json в подразделе «Средства оркестрации» на с. 35. В нем содержатся PHP, Apache и исходный код приложения.
•user_data. Этот bash-скрипт выполняется при загрузке веб-сервера. В предыдущем примере этот скрипт используется для запуска Apache.
Иными словами, это демонстрация того, как объединить инициализацию ресурсов и шаблонизацию серверов, что является распространенной практикой в неизменяемой инфраструктуре.
Преимущества инфраструктуры как кода
Теперь, когда вы познакомились со всевозможными разновидностями IaC, можно задаться вопросом: зачем нам это нужно? Зачем изучать целую кучу новых языков и инструментов, обременяя себя еще большим количеством кода, который нужно поддерживать?
Дело в том, что код довольно мощный. Усилия, которые идут на преобразование ручных процессов в код, вознаграждаются огромным улучшением ваших возможностей по доставке ПО. Согласно докладу о состоянии DevOps за 2016 год (bit.ly/31kCUYX), организации, применяющие такие методики, как IaC, развертывают код в 200 раз чаще и восстанавливаются после сбоев в 24 раза быстрее, а на реализацию новых функций уходит в 2555 раз меньше времени.
Когда ваша инфраструктура определена в виде кода, можно существенно улучшить процесс доставки ПО, используя широкий диапазон методик из мира программирования. Это дает преимущества.
•Самообслуживание. В большинстве команд, которые развертывают код вручную, мало сисадминов (часто один), и только они знают все магические заклинания для выполнения развертывания и имеют доступ к промышленной среде. Это становится существенным препятствием на пути роста компании. Если же ваша инфраструктура определена в виде кода, весь процесс развертывания можно автоматизировать, благодаря чему разработчики смогут доставлять свой код тогда, когда им это нужно.
• Скорость и безопасность. Автоматизация значительно ускоряет процесс развертывания, потому что компьютер может выполнить все его этапы куда быстрее человека. При этом повышается безопасность, так как автоматический процесс будет более последовательным, воспроизводимым и устойчивым к ошибкам с человеческим фактором.
• Документация. Вместо того чтобы держать состояние инфраструктуры в голове одного сисадмина, вы можете описать его в исходном файле, который каждый сможет прочитать. Иными словами, IaC играет роль документации, позволяя любому работнику компании понять, как все работает, даже если сисадмин уходит в отпуск.
• Управление версиями. Исходные файлы IaC можно хранить в системе управления версиями, благодаря чему в журнале фиксаций кода будет записана вся история вашей инфраструктуры. Это очень помогает при отладке, так как в случае возникновения проблемы всегда можно первым делом открыть журнал и посмотреть, что именно поменялось в вашей инфраструктуре. Вслед за этим проблему можно решить за счет простого отката к предыдущей версии кода IaC, в которой вы уверены.
• Проверка. Если состояние вашей инфраструктуры описано в файле, при каждом его изменении можно устраивать разбор кода, запускать набор автоматических тестов и прогонять его через средства статического анализа. Опыт показывает, что все это значительно уменьшает вероятность дефектов.
• Повторное использование. Вы можете упаковать свою инфраструктуру в универсальные модули, и вместо того, чтобы производить развертывание каждого продукта в каждой среде с нуля, у вас будет возможность использовать в качестве основы известные, задокументированные и проверенные на практике компоненты8.
•Радость. Есть еще одна очень важная причина, почему вы должны использовать IaC, которую часто упускают из виду: радость. Развертывание кода и управление инфраструктурой вручную — рутинный и утомительный процесс. Разработчики и сисадмины терпеть не могут такого рода работу, поскольку в ней нет никакого творчества, вызова или признания. Вы можете идеально развертывать код на протяжении месяцев, и никто даже не заметит, пока в один прекрасный день вы не напортачите. Это создает напряженную и неприятную обстановку. IaC предлагает лучшую альтернативу, которая позволяет компьютерам и людям делать то, что они умеют лучше всего: автоматизировать и, соответственно, писать код.