Инициализация проекта Terraform

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

Введение

Terraform — это популярный инструмент Infrastructure as Code (IaC) с открытым исходным кодом, созданный HashiCorp. Он позволяет определять и развертывать инфраструктурные ресурсы с использованием декларативного конфигурационного языка.

Первая команда, которую вы выполните в любом новом проекте Terraform, — это terraform init. Эта команда имеет решающее значение, поскольку она подготавливает ваш рабочий каталог к использованию с Terraform. Она выполняет несколько ключевых действий:

  • Инициализация бэкенда (Backend Initialization): Настраивает хранилище состояния (state storage backend).
  • Установка плагинов провайдеров (Provider Plugin Installation): Сканирует ваши конфигурационные файлы, определяет, какие провайдеры необходимы, и загружает их из Terraform Registry.
  • Установка модулей (Module Installation): Загружает любые модули, на которые есть ссылки в вашей конфигурации.

В этой лабораторной работе вы изучите фундаментальный процесс инициализации нового проекта Terraform. Вы создадите каталог проекта, определите простой конфигурационный файл и используете terraform init для загрузки необходимого плагина провайдера.

Создайте новый каталог для проекта Terraform

На этом шаге вы создадите выделенный каталог для вашего нового проекта Terraform. Хорошей практикой является размещение каждого проекта Terraform в собственном каталоге, чтобы избежать конфликтов и сохранить конфигурации упорядоченными. Все ваши операции будут выполняться внутри каталога ~/project.

Сначала создайте новый каталог с именем terraform-init-lab.

mkdir terraform-init-lab

Далее перейдите в только что созданный каталог. Это будет ваш рабочий каталог для остальной части лабораторной работы.

cd terraform-init-lab

Ваш терминальный приглашение (prompt) теперь должно указывать, что вы находитесь внутри каталога ~/project/terraform-init-lab.

Создайте файл main.tf в каталоге проекта

На этом шаге вы создадите основной конфигурационный файл для вашего проекта. Файлы конфигурации Terraform используют расширение .tf и написаны на HashiCorp Configuration Language (HCL). По соглашению, основной конфигурационный файл часто называют main.tf.

Находясь в каталоге terraform-init-lab, создайте пустой файл с именем main.tf с помощью команды touch.

touch main.tf

Вы можете убедиться, что файл создан, просмотрев содержимое каталога.

ls

В выводе вы должны увидеть файл main.tf.

main.tf

Определите конфигурацию локального провайдера в main.tf

На этом шаге вы добавите конфигурационный код в ваш файл main.tf. Этот код укажет Terraform, какой провайдер (provider) ему необходимо загрузить и использовать. Провайдер — это плагин, который позволяет Terraform взаимодействовать с определенным API, например, с облачным провайдером или SaaS-сервисом.

Для этой лабораторной работы мы будем использовать провайдер local, который позволяет управлять локальными файлами. Это отличный провайдер для обучения, поскольку он не требует никаких учетных данных облачного сервиса.

Откройте файл main.tf с помощью текстового редактора nano.

nano main.tf

Теперь скопируйте и вставьте следующий блок кода в редактор nano. Этот блок terraform определяет провайдеры, необходимые для проекта.

terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

Эта конфигурация сообщает Terraform следующее:

  • required_providers: Мы объявляем провайдеры, которые требуются этому проекту.
  • local: Локальное имя, которое мы присваиваем провайдеру.
  • source: Глобальный адрес провайдера в Terraform Registry, который составляет hashicorp/local.
  • version: Конкретная версия провайдера для использования.

После вставки кода сохраните файл и выйдите из nano, нажав Ctrl+O, затем Enter, и, наконец, Ctrl+X.

Выполните terraform init для инициализации проекта

На этом шаге вы выполните команду terraform init. Поскольку конфигурация провайдера настроена, Terraform теперь знает, что необходимо сделать для инициализации проекта. Он прочитает файл main.tf, найдет блок required_providers и загрузит указанную версию провайдера hashicorp/local из Terraform Registry.

Убедитесь, что вы все еще находитесь в каталоге terraform-init-lab, а затем выполните команду инициализации.

terraform init

Вы увидите вывод, указывающий на то, что Terraform инициализирует бэкенд (backend) и плагины провайдеров. Успешная инициализация завершится сообщением об успехе.

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/local versions matching "2.4.0"...
- Installing hashicorp/local v2.4.0...
- Installed hashicorp/local v2.4.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Проверьте директорию .terraform на наличие загруженных плагинов

На этом шаге вы проверите, успешно ли команда terraform init загрузила плагин провайдера. Эта команда создает скрытый каталог с именем .terraform в папке вашего проекта для хранения этих плагинов и других данных инициализации.

Сначала выведите список всех файлов и каталогов, включая скрытые, чтобы увидеть новые артефакты, созданные командой init.

ls -a

В выводе вы должны увидеть каталог .terraform и файл .terraform.lock.hcl. Файл блокировки (lock file) записывает версии провайдеров, выбранные во время инициализации.

.  ..  main.tf  .terraform  .terraform.lock.hcl

Теперь давайте посмотрим содержимое каталога .terraform, чтобы увидеть загруженный провайдер. Для наглядного иерархического представления можно использовать команду tree.

tree .terraform

Вывод покажет структуру каталогов, где хранится плагин провайдера. Вы увидите исполняемый файл для провайдера local, загруженный из реестра.

.terraform
└── providers
    └── registry.terraform.io
        └── hashicorp
            └── local
                └── 2.4.0
                    └── linux_amd64
                        └── terraform-provider-local_v2.4.0_x5

6 directories, 1 file

Это подтверждает, что terraform init успешно настроил ваш проект с необходимым провайдером.

Резюме

Поздравляем! Вы успешно завершили эту лабораторную работу по инициализации проекта Terraform.

В этой лабораторной работе вы изучили основные первые шаги по запуску нового проекта Terraform. Вы попрактиковались в следующем:

  • Создание выделенного каталога для проекта Terraform.
  • Определение требуемых провайдеров в конфигурационном файле main.tf.
  • Выполнение команды terraform init для подготовки проекта.
  • Проверка того, что плагины провайдеров были загружены в каталог .terraform.

После инициализации проекта вы теперь готовы перейти к следующим шагам в рабочем процессе Terraform, таким как написание определений ресурсов и использование команд terraform plan и terraform apply для управления вашей инфраструктурой.