Введение
Terraform — это популярный инструмент с открытым исходным кодом для реализации концепции «Инфраструктура как код» (Infrastructure as Code, IaC), созданный компанией HashiCorp. Он позволяет описывать и развертывать ресурсы инфраструктуры с помощью декларативного языка конфигурации.
Первая команда, которую вы будете выполнять в любом новом проекте Terraform, — это terraform init. Эта команда имеет решающее значение, так как она подготавливает ваш рабочий каталог к работе с Terraform. Она выполняет несколько ключевых действий:
- Инициализация бэкенда: настраивает бэкенд для хранения состояния (state).
- Установка плагинов провайдеров: сканирует ваши файлы конфигурации, определяет, какие провайдеры необходимы, и загружает их из реестра Terraform (Terraform Registry).
- Установка модулей: загружает любые модули, на которые есть ссылки в вашей конфигурации.
В этой лабораторной работе вы изучите фундаментальный процесс инициализации нового проекта Terraform. Вы создадите каталог проекта, определите простой файл конфигурации и используете terraform init для загрузки необходимого плагина провайдера.
Создание нового каталога для проекта Terraform
На этом этапе вы создадите отдельный каталог для вашего нового проекта Terraform. Рекомендуется хранить каждый проект Terraform в собственном каталоге, чтобы избежать конфликтов и поддерживать порядок в конфигурациях. Все ваши операции будут выполняться внутри каталога ~/project.
Сначала создайте новый каталог с именем terraform-init-lab.
mkdir terraform-init-lab
Затем перейдите в созданный каталог. Это будет ваш рабочий каталог на протяжении всей лабораторной работы.
cd terraform-init-lab
Теперь приглашение командной строки должно указывать на то, что вы находитесь внутри каталога ~/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, какой провайдер ему нужно загрузить и использовать. Провайдер — это плагин, который позволяет 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, который выглядит какhashicorp/local.version: конкретная версия провайдера, которую нужно использовать.
После вставки кода сохраните файл и выйдите из nano, нажав Ctrl+O, затем Enter и, наконец, Ctrl+X.
Запуск terraform init для инициализации проекта
На этом этапе вы выполните команду terraform init. Поскольку конфигурация провайдера уже готова, Terraform теперь знает, что ему нужно сделать для инициализации проекта. Он прочитает файл main.tf, найдет блок required_providers и загрузит указанную версию провайдера hashicorp/local из реестра Terraform.
Убедитесь, что вы все еще находитесь в каталоге terraform-init-lab, а затем выполните команду инициализации.
terraform init
Вы увидите вывод, указывающий на то, что Terraform инициализирует бэкенд и плагины провайдеров. Успешная инициализация завершится сообщением об успехе.
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 для управления вашей инфраструктурой.



