Укр
Terraform: что это и для чего он нужен

Terraform: что это и для чего он нужен

  • 16 ноября, 2020
  • читать 5 мин
Сергей Василенко
Сергей Василенко Platform Software Engineer в Grammarly, Преподаватель Компьютерной школы Hillel.

Методология управления инфраструктурой как кодом («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 работает

Код 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 поближе, но не знаете с чего начать, то я рекомендую начинать с официального интерактивного руководства.