Введение
Добро пожаловать в мир инфраструктуры как кода (IaC).
Представьте, что вы шеф-повар в busy-ресторане. Традиционно вы могли бы готовить каждое блюдо вручную, шаг за шагом. В мире IT это похоже на ручную настройку серверов по одному — такой подход занимает много времени и часто приводит к ошибкам.
Вместо того чтобы настраивать инфраструктуру вручную с помощью повторяющихся команд или щелчков в облачной консоли, IaC позволяет описывать инфраструктуру в файлах. Такие файлы можно версионировать, проверять и повторно использовать.
Terraform — один из самых распространённых инструментов IaC. Он использует декларативный подход: вы описываете желаемое конечное состояние, а Terraform определяет, как его достичь.
Эта декларативная модель — одна из ключевых особенностей Terraform. Вы описываете, какая инфраструктура должна существовать, а не создаёте полный императивный сценарий для каждого низкоуровневого шага.
В этой лабораторной работе вы подготовите свою «кухню» и научите робота его первому навыку. Вы узнаете о провайдерах — это специальные инструменты, с помощью которых робот получает доступ к разным ингредиентам, например AWS, Google Cloud или Docker.
К концу лабораторной работы Terraform будет установлен, ваш первый файл-«рецепт» будет создан, а окружение — подготовлено для начала сборки.
Установите Terraform
Сначала установите программу terraform. Представьте, что вы загружаете мозг робота. Мы выполним установку вручную, чтобы вы ясно видели, откуда программа берётся и где хранится.
Сначала проверьте текущий рабочий каталог. Работать нужно внутри каталога проекта.
pwd
Затем загрузите пакет Terraform из интернета. Для этого используется команда wget. Мы загрузим конкретную версию — 1.14.3, чтобы все действия в этой лабораторной работе выполнялись одинаково.
wget https://releases.hashicorp.com/terraform/1.14.3/terraform_1.14.3_linux_amd64.zip
Загруженный файл — это сжатый архив zip, похожий на чемодан с инструментом внутри. Распакуйте его с помощью команды unzip.
unzip terraform_1.14.3_linux_amd64.zip
Теперь программа terraform находится в текущем каталоге. Однако запускать её можно только из этого каталога. Нам нужно запускать её из любого места системы, как стандартные команды ls или cd.
Для этого переместите программу в специальный системный каталог /usr/local/bin. Система всегда проверяет этот каталог при вводе команды.
sudo mv terraform /usr/local/bin/
Проверьте установку, запросив версию Terraform.
terraform -version
В выводе должна быть указана версия Terraform v1.14.3.
Удалите загруженный zip-файл, чтобы очистить рабочий каталог:
rm terraform_1.14.3_linux_amd64.zip
Создайте шаблон инфраструктуры
Terraform нужен шаблон, который описывает, что необходимо создать. Такие шаблоны записывают в текстовых файлах с расширением .tf.
На этом шаге создайте основной файл конфигурации. По соглашению главный файл обычно называется main.tf. Представьте, что это первая страница книги с рецептами.
Создайте файл main.tf в каталоге ~/project. Сначала можно создать пустой файл с помощью команды touch.
touch main.tf
Проверьте, что файл создан:
ls -l main.tf
Сейчас файл пуст. На следующем шаге мы добавим в него содержимое. Этот файл будет служить шаблоном вашей инфраструктуры.
Настройте провайдер
Файл main.tf создан. Теперь добавьте в него инструкции.
Terraform — инструмент общего назначения. По умолчанию он не умеет взаимодействовать с Docker, AWS или Azure. Для этого нужен провайдер, который работает как переводчик. Он обучает Terraform специальному языку платформы, которой мы хотим управлять. В нашем случае мы будем управлять контейнерами Docker, поэтому нам нужен провайдер Docker.
Разделение основного механизма и подключаемых модулей-провайдеров позволяет использовать один и тот же рабочий процесс Terraform с разными системами инфраструктуры.
Откройте main.tf в текстовом редакторе nano.
nano main.tf
Скопируйте и вставьте в файл следующий код. Первая часть — блок terraform — указывает Terraform, какой модуль-переводчик нужно загрузить. Вторая часть — блок provider — активирует этот модуль.
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
После вставки кода сохраните изменения и выйдите из редактора. Нажмите Ctrl + O, чтобы записать файл, нажмите Enter, чтобы подтвердить имя файла, затем нажмите Ctrl + X, чтобы выйти.
Эта конфигурация сообщает Terraform: «Я намерен использовать провайдер Docker, а именно версию 3.0.1 или совместимую с ней».
Инициализируйте проект
Terraform установлен, а шаблон создан, но проект ещё не полностью готов. В файле main.tf Terraform обнаружил необходимость в «переводчике» Docker — подключаемом модуле, — но пока не загрузил его.
Выполните команду init. Это можно сравнить с подготовкой мастерской. Terraform прочитает шаблон, определит недостающие инструменты и автоматически загрузит их в скрытый каталог.
Поэтому terraform init — это шаг начальной подготовки проекта, а не команда для изменения инфраструктуры. Она подготавливает рабочий каталог, чтобы последующие команды могли правильно обработать конфигурацию.
Выполните команду инициализации:
terraform init
Вы должны увидеть вывод, похожий на этот:
Initializing the backend...
Initializing provider plugins...
- Finding kreuzwerker/docker versions matching "~> 3.0.1"...
- Installing kreuzwerker/docker v3.0.2...
- Installed kreuzwerker/docker v3.0.2 (self-signed, key ID 24E54F214539BC63)
Terraform has been successfully initialized!
Эта команда создала в каталоге проекта скрытый каталог .terraform. В нём Terraform хранит загруженные модули-провайдеры.
Проверьте наличие этого каталога, выведя список всех файлов, включая скрытые:
ls -a
В списке должны появиться .terraform и .terraform.lock.hcl. Lock-файл гарантирует, что при следующих запусках будут использоваться те же версии провайдера, обеспечивая единообразие окружения.
Итоги
Поздравляем! Вы успешно подготовили окружение Terraform.
В этой лабораторной работе вы узнали:
- Установка: как поместить исполняемый файл Terraform в системный путь (
/usr/local/bin). - Конфигурация: как создать файл
main.tf, который служит шаблоном вашей инфраструктуры. - Провайдеры: специальные «переводчики», позволяющие Terraform взаимодействовать с разными платформами, например Docker.
- Инициализация: как использовать
terraform initдля загрузки необходимых модулей перед началом работы.
Теперь вы готовы в следующей лабораторной работе определить реальные ресурсы и начать создавать инфраструктуру.



