Terraform 101: руководство для начинающих любителей шаблонов ARM
Сегодня мы отправляемся в путешествие в мир Terraform.
В этой статье объясняется, как работает Terraform и как он может помочь нам управлять ресурсами нашей инфраструктуры в Azure (и других платформах/продуктах) с помощью их HLC (язык конфигурации HashiCorp). Этот скромный автор использует шаблоны ARM уже несколько лет. Цель состоит в том, чтобы познакомить вас с Terraform и помочь вам начать писать свой первый код. В рамках первых шагов в этом путешествии мы рассмотрим некоторые интересные функции этого продукта.
Подготовка рабочего стола к использованию Terraform
Мы собираемся упростить задачу, работая локально. В будущих статьях мы рассмотрим более совместный подход, используя управление исходным кодом и корпоративные решения, предоставляемые HashiCorp.
Чтобы начать работу с Terraform, нам нужно убедиться, что на вашем рабочем столе установлены Visual Studio Code, Azure CLI и Terraform. Я написал здесь, в TechGenix, статью, в которой рассказывается об установке Visual Studio Code и интеграции с Azure DevOps. Вы можете найти это здесь.
После установки Visual Studio Code убедитесь, что установлено расширение HashiCorp Terraform. В Marketplace доступны две версии, авторами которых являются Terraform и Microsoft.
Наше следующее требование — установить Azure CLI на ваш рабочий стол или сервер для управления Azure. Вы можете скачать это здесь.
Если вам нравится PowerShell так же, как и мне, вы можете сохранить процесс проверки ссылки и выполнить следующий командлет:
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile.AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList "/I AzureCLI.msi /quiet"; rm.AzureCLI.msi
Последним шагом для подготовки нашей рабочей станции является установка Terraform, простого исполняемого файла, который необходимо поместить в папку, которая уже определена в PATH, чтобы быть доступной из любого места. Последнюю версию исполняемого файла Terraform можно найти здесь.
Загрузка представляет собой zip-файл. В моем случае я просто поместил его в WindowsSystem32, как показано на рисунке ниже.
Это основные инструменты, которые вам нужны, чтобы начать использовать Terraform локально и выполнить первые развертывания в Microsoft Azure (или любом другом облаке, если на то пошло).
Имейте в виду, что все инструменты, описанные в этом разделе, могут быть установлены на выбранной вами платформе: Windows, Linux или macOS.
Основы терраформирования
При локальном использовании на вашем рабочем столе для тестирования или создания решения в команде Terraform будет иметь в основном четыре переключателя, с которыми вам необходимо ознакомиться, прежде чем изучать язык и писать свой первый код. Вот они: инициировать, планировать, применять и уничтожать.
При использовании команды terraform init мы инициализируем текущий каталог на основе существующих файлов конфигурации Terraform (файлы *.tf). Эта команда инициализирует необходимые серверные части, копирует модули и плагины.
Идеальный сценарий — запустить его после того, как вы определили свой код. Однако нет ничего плохого в том, чтобы запустить эту команду несколько раз, и если Terraform обнаружит, что ее необходимо выполнить, она предложит это сделать.
В приведенном ниже примере наш код использует поставщика AzureRM, и при запуске инициализации подключаемый модуль был загружен в структуру локальной папки в текущем рабочем каталоге (C:LabTerraformapp110).
Вторая команда, которую мы будем использовать гораздо чаще, это terraform plan. Эта команда сравнит то, что мы определили в файлах конфигурации, с реальной инфраструктурой и предоставит сводку изменений, необходимых для достижения желаемого состояния.
Важно отметить, что эта команда ни в коей мере не является навязчивой и не изменит реальную инфраструктуру. Команда может использовать параметры (-out PlanName) для сохранения плана в файл в качестве артефакта, который можно использовать со следующей командой Terraform для применения этих определенных параметров к целевой инфраструктуре.
В приведенном ниже примере мы видим, как план Terraform запрашивает требуемые значения и предоставляет выходные данные нашего кода (определенные в области вывода и отлично подходящие для устранения неполадок), а также ожидаются ли изменения (добавления, изменения или даже удаления).
Третья команда — terraform apply, и именно она будет вносить изменения в реальную инфраструктуру. Мы можем передать ранее сгенерированный план в качестве параметра, и если мы не передаем, команда будет использовать текущую конфигурацию и генерировать план на лету и запрашивать одобрение.
Все изменения, задокументированные в плане, будут запущены в вашей инфраструктуре. В приведенном выше примере мы не передали ни одного плана, поэтому требовалось подтверждение.
Дополнительная команда, которая может быть полезна, — это terraform destroy, и она уничтожит все, что было ранее настроено с помощью Terraform.
Небольшая проблема с его запуском заключается в том, что он удалит все, что определено в файлах конфигурации. Лучший способ увидеть влияние разрушения — использовать план терраформирования -destroy. Этот будет оценивать ущерб, который произойдет, если в текущем сценарии будет использовано уничтожение терраформы.
Хороший, плохой, злой
В этом разделе отражено мое мнение о Terraform для управления Azure. Terraform используется для крупных корпораций, и использование инфраструктуры как кода (IaC) всегда лучше, чем ручные процессы и сценарии — здесь нет места для обсуждения.
Плюсы: у Terraform есть несколько поставщиков, которые позволяют легко интегрировать его с другими продуктами, что делает его привлекательным для корпоративного мира. Они также предоставляют облако Terraform и некоторые корпоративные инструменты, такие как Sentinel, для оценки и повышения безопасности и управления в рамках конвейера еще до развертывания инфраструктуры.
Минусы: это язык для развертывания вещей в Azure (или других облаках и платформах), но у вас нет такого опыта работы с самой платформой. Например, создание учетной записи хранения в ARM поможет вам понять, как Azure работает за кулисами. Вы всегда можете экспортировать шаблон, увидеть его воочию и применить изменения. Terraform не дает такого ощущения (по крайней мере, для меня). У нас есть их документация и сообщество, чтобы поддержать вас, но это не одно и то же.
Уродливое: вы используете другого поставщика для поддержки ваших усилий IaC. Используя ARM, вы можете легко открывать заявки в Microsoft, проверять портал Azure и иметь аналогичный код для сравнения. Terraform — это полная абстракция кода для развертывания в Azure. Хотя у него есть некоторые преимущества для управления различными платформами, в конце концов, вы застряли с Terraform и его ограничениями (Azure — всего лишь один поставщик в их экосистеме). Ваша кривая обучения работе с продуктом, для управления которым вы используете Terraform (в данном примере с Azure), будет короче, чем при использовании собственных инструментов.
Microsoft работает над новым языком, похожим на Terraform, для развертывания ресурсов в Azure. Меня зовут Bicep, и вы можете найти больше информации здесь.