Введение
Terraform — это инструмент с открытым исходным кодом для реализации концепции «инфраструктура как код» (Infrastructure as Code, IaC), созданный компанией HashiCorp. Он позволяет описывать и развертывать инфраструктуру дата-центров с помощью декларативного языка конфигурации. Это означает, что вы описываете желаемое состояние инфраструктуры в конфигурационных файлах, а Terraform самостоятельно определяет, какие действия (создание, обновление или удаление) необходимо выполнить для приведения системы в это состояние.
Основной рабочий процесс Terraform состоит из трех этапов:
- Написание (Write): Описание инфраструктуры в виде кода.
- Планирование (Plan): Предварительный просмотр изменений перед их применением.
- Применение (Apply): Развертывание и управление инфраструктурой.
В этой лабораторной работе вы пройдете весь этот цикл, создав простейший ресурс: локальный файл. Использование провайдера local — отличный способ изучить механику Terraform, не требующий учетных данных облачных провайдеров. Вы опишете файл, спланируете его создание, примените изменения и проверите результат.
Определение ресурса local_file в main.tf
На этом этапе вы начнете с определения ресурса в конфигурационном файле Terraform. Все конфигурации Terraform записываются в файлы с расширением .tf. Основной конфигурационный файл обычно называется main.tf.
Блок resource — это основной синтаксис для объявления объекта инфраструктуры. Он определяет ресурс заданного типа (например, local_file) с определенным локальным именем (например, example). Комбинация типа и имени должна быть уникальной в рамках модуля.
Сначала откройте файл main.tf в директории ~/project с помощью текстового редактора nano.
nano main.tf
Теперь добавьте в файл следующий код. Он определяет ресурс типа local_file и присваивает ему локальное имя example. Пока что блок ресурса пуст.
resource "local_file" "example" {
}
После добавления кода сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и, наконец, Enter.
Указание имени файла и содержимого в блоке ресурса
На этом этапе вы добавите аргументы в блок ресурса, чтобы задать свойства создаваемого файла. Аргументы — это пары «ключ-значение» внутри блока ресурса, которые определяют его конфигурацию. Для ресурса local_file двумя наиболее важными аргументами являются filename и content.
filename: путь к файлу, который будет создан.content: содержимое, которое будет записано в файл.
Снова откройте файл main.tf с помощью nano.
nano main.tf
Измените блок ресурса local_file, добавив аргументы filename и content, как показано ниже:
resource "local_file" "example" {
content = "Hello, Terraform!"
filename = "${path.module}/hello.txt"
}
Здесь мы указываем Terraform создать файл с именем hello.txt в текущей директории проекта. Выражение ${path.module} — это специальное выражение Terraform, которое указывает на путь к текущему модулю (в данном случае это ~/project). Содержимым файла будет строка "Hello, Terraform!".
Сохраните файл и выйдите из nano, нажав Ctrl+X, Y и Enter.
Инициализация Terraform и предварительный просмотр изменений
На этом этапе вы сначала инициализируете проект Terraform, а затем выполните команду terraform plan для создания плана выполнения.
Прежде чем планировать какие-либо изменения, необходимо инициализировать проект. Команда terraform init сканирует вашу конфигурацию, загружает необходимые провайдеры (в данном случае для local_file) и настраивает бэкенд.
В терминале выполните команду terraform init:
terraform init
После успешной инициализации выполните terraform plan. Эта команда является важнейшей частью рабочего процесса Terraform, так как она выполняет «пробный запуск» изменений. Она показывает, что именно Terraform сделает с вашей инфраструктурой, не внося при этом реальных изменений. Это позволяет проверить запланированные действия перед их применением.
terraform plan
Terraform прочитает ваш конфигурационный файл и сравнит его с текущим состоянием инфраструктуры (которое сейчас пустое). Затем он отобразит план действий. Вы должны увидеть вывод, похожий на приведенный ниже, который указывает на то, что будет создан один ресурс.
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
## local_file.example will be created
+ resource "local_file" "example" {
+ content = "Hello, Terraform!"
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "0777"
+ file_permission = "0777"
+ filename = "./hello.txt"
+ id = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
Символ + рядом с resource "local_file" "example" означает, что этот ресурс будет создан. В выводе подробно описаны все атрибуты, которые будут установлены для нового файла.
Выполнение terraform apply для создания ресурса
На этом этапе вы примените изменения с помощью команды terraform apply, чтобы фактически создать файл. Эта команда выполняет действия, предложенные в выводе terraform plan.
По умолчанию terraform apply снова покажет вам план и запросит интерактивное подтверждение перед продолжением. Чтобы сделать процесс неинтерактивным (что полезно для лабораторных работ и автоматизации), можно использовать флаг -auto-approve.
Выполните следующую команду в терминале:
terraform apply -auto-approve
Теперь Terraform выполнит план. В выводе сначала снова отобразится план, а затем процесс применения. По завершении вы увидите сообщение о подтверждении.
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
## local_file.example will be created
+ resource "local_file" "example" {
+ content = "Hello, Terraform!"
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "0777"
+ file_permission = "0777"
+ filename = "./hello.txt"
+ id = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
local_file.example: Creating...
local_file.example: Creation complete after 0s [id=42086c02e03bf671ddf621ed9922f52f2c7a605c]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Сообщение "Apply complete!" подтверждает, что Terraform успешно создал ресурс в соответствии с вашей конфигурацией.
Проверка наличия созданного файла в файловой системе
На этом заключительном этапе вы убедитесь, что Terraform успешно создал файл в вашей локальной файловой системе, как и было указано. Поскольку вы использовали ресурс local_file, результатом является реальный файл в директории вашего проекта.
Сначала используйте команду ls, чтобы вывести список файлов в текущей директории. Теперь вы должны увидеть hello.txt рядом с вашим конфигурационным файлом Terraform.
ls
Ожидаемый вывод:
hello.txt main.tf terraform.tfstate
Затем используйте команду cat, чтобы отобразить содержимое только что созданного файла hello.txt.
cat hello.txt
Вы должны увидеть содержимое, которое вы определили в main.tf.
Hello, Terraform!
Это подтверждает, что ваша конфигурация Terraform была успешно применена и ресурс был создан именно так, как вы описали в коде.
Резюме
Поздравляем! Вы успешно завершили свой первый проект на Terraform.
В этой лабораторной работе вы изучили фундаментальный рабочий процесс Terraform:
- Написание (Write): Вы определили ресурс
local_fileв конфигурационном файлеmain.tf. - Планирование (Plan): Вы использовали
terraform planдля предварительного просмотра создания файла без внесения каких-либо изменений. - Применение (Apply): Вы использовали
terraform applyдля выполнения плана и создания файла в локальной файловой системе.
Этот простой пример создания локального файла демонстрирует основную мощь инфраструктуры как кода. Вы объявили желаемое состояние ресурса в конфигурационном файле, а Terraform взял на себя логику достижения этого состояния. Те же принципы применяются при управлении более сложной инфраструктурой, такой как виртуальные машины, сети и базы данных в облаке.



