Концепции и настройка Terraform

LinuxBeginner
Практиковаться сейчас

Введение

Добро пожаловать в мир инфраструктуры как кода (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 для загрузки необходимых модулей перед началом работы.

Теперь вы готовы в следующей лабораторной работе определить реальные ресурсы и начать создавать инфраструктуру.