Методология управления инфраструктурой как кодом («Infrastructure as Code») не нова, ровно как и Terraform уже давно не является хайповым словом в IT-сфере. Эта статья будет полезна инженерам, которые хотят понять, в чём суть Terraform и, возможно, начать его изучать, и, быть может, пройти курс машинного обучения онлайн.
Почему «Infrastructure as Code» — это важно?
Вспомните последний случай, когда вам пришлось настраивать инфраструктуру, например, несколько серверов: создавать их через консоль управления, настраивать их ресурсы и сеть. Вспомните, сколько времени вы потратили на это.
А теперь задумайтесь: вы смогли бы это повторить без ошибок несколько раз подряд? А сколько времени вы бы на это потратили?
Чтобы создавать ресурсы без риска что-то забыть и делать это быстро при повторении — придумали Infrastructure as Code. Это подход к управлению инфраструктурой через наборы конфигурационных файлов (кода), в которых декларативно (т.е. в спецификации финального результата) описывается желаемое состояние этой инфраструктуры.
Такой подход решает много задач и проблем, например:
- Конфигурация является источником правды о том, как всё должно быть настроено.
- Она же часто является и документацией.
- Повторные применения этой конфигурации (например, вам нужно несколько окружений) гарантированно приводят к тому же результату.
- Устраняется человеческий фактор (когда забыли что-то добавить или настроить)
Terraform — это один из инструментов реализации Infrastructure as Code.
Как Terraform работает?
Terraform (утилита командной строки) работает с конфигурационными файлами (кодом) и интерпретирует их внутри cloud или on-premise платформы — создает, изменяет или удаляет ресурсы.
Terraform поддерживает большое количество платформ: от основных облачных провайдеров (AWS, Azure, GCP) до более скромных платформ, например, Hetzner или 1&1. Кроме того, он поддерживает работу с таким ПО, как Docker, Kubernetes, Chef, что расширяет функционал и позволяет использовать их в связке. Поэтому Terraform такой популярный — это настоящий швейцарский нож в мире управления инфраструктурой.
Код Terraform использует свой собственный синтаксис, но он выглядит весьма дружелюбно. Например, вот так выглядит минимальный блок кода, который создает EC2 instance в AWS.
resource "aws_instance" “web_server” {
ami = "ami-a1b2c3d4"
instance_type = "t3.micro"
}
Terraform поддерживает множество так называемых провайдеров, которые позволяют интерпретировать код для той или иной платформы хостинга.
Чтобы применить конфигурацию, используется CLI-приложение, которое запускает код на обработку и применение провайдером по отношению к той или иной платформе.
При первом использовании Terraform происходит инициализация проекта — каталога, в котором находятся файлы конфигурации (ваш код). Для этого используется команда terraform init. Эта команда позволяет загрузить необходимые версии провайдеров и прочих зависимостей, используемых в конфигурации инфраструктуры.
Далее во время первого применения команды terraform apply Terraform создаст описанные ресурсы на хостинг-платформе и создаст специальный файл — state file — в каталоге проекта.
Именно этот файл в дальнейшем будет использоваться Terraform для сравнения текущего состояния вашей инфраструктуры с новой версией вашей конфигурации всякий раз при выполнении terraform apply. Таким образом он поймет: какие ресурсы изменить, удалить или добавить.
У синтаксиса Terraform есть множество инструментов для организации кода и расширения возможностей работы с ним, например:
- Modules — позволяют создавать логические блоки (абстракции) из разных наборов ресурсов и снова использовать такие блоки в дальнейшем.
- Variables — позволяют параметризировать код, делая его более универсальным.
- Expressions — позволяют вычислять или обращаться к различным типам данных в коде. Например, взять элемент из списка или выбрать какое-то значение на основании условия.
- Functions — встроенные функции, которые еще больше расширяют возможности по работе с данными внутри конфигурации. Например, преобразование строк, математические вычисления, работа со списками и т.д.
Это и многое другое делает Terraform мощным инструментом для управления инфраструктурой: как внутри одной хостинг-платформы, так и между несколькими одновременно.
Если вы хотите узнать Terraform поближе, но не знаете с чего начать, то я рекомендую начинать с официального интерактивного руководства.