Базовое создание ресурсов в Terraform

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

Введение

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

Основной рабочий процесс Terraform состоит из трех основных этапов:

  1. Write (Написание): Создание инфраструктуры как кода.
  2. Plan (Планирование): Предварительный просмотр изменений перед их применением.
  3. 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.

Указание filename и content в блоке ресурса

На этом шаге вы добавите аргументы в блок ресурса, чтобы указать свойства файла, который вы хотите создать. Аргументы — это пары ключ-значение внутри блока ресурса, которые определяют его конфигурацию. Для ресурса 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) и настраивает бэкенд (backend).

В терминале сначала выполните terraform init:

terraform init

После успешной инициализации выполните terraform plan. Эта команда является важнейшей частью рабочего процесса Terraform, поскольку она предоставляет "сухой запуск" (dry run) изменений. Она показывает вам, что 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:

  1. Написание (Write): Вы определили ресурс local_file в конфигурационном файле main.tf.
  2. Планирование (Plan): Вы использовали terraform plan для предварительного просмотра создания файла без внесения каких-либо изменений.
  3. Применение (Apply): Вы использовали terraform apply для выполнения плана и создания файла в вашей локальной файловой системе.

Этот простой пример создания локального файла демонстрирует основную мощь Инфраструктуры как Кода (Infrastructure as Code). Вы объявили желаемое состояние ресурса в конфигурационном файле, а Terraform позаботился о логике для достижения этого состояния. Те же принципы применимы при управлении более сложной инфраструктурой, такой как виртуальные машины, сети и базы данных в облаке.