Выбрать главу

Рис. 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 предлагает лучшую альтернативу, которая позволяет компьютерам и людям делать то, что они умеют лучше всего: автоматизировать и, соответственно, писать код.