Использование переменных Terraform

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

Введение

Terraform — это мощный инструмент для безопасного и эффективного создания, изменения и версионирования инфраструктуры. Ключевой особенностью, которая делает конфигурации Terraform гибкими и многократно используемыми, является использование входных переменных (input variables). Переменные позволяют параметризовать ваши конфигурации, что дает возможность избежать жесткого кодирования (hardcoding) значений и легко настраивать развертывания без изменения исходного кода.

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

По завершении этой лабораторной работы вы будете понимать:

  • Как объявлять переменные в файле .tf.
  • Как ссылаться на переменные внутри блока ресурса (resource block).
  • Как предоставлять значения для ваших переменных при выполнении команды terraform apply.

Создание файла variables.tf для определений переменных

На этом шаге вы создадите выделенный файл для хранения объявлений ваших переменных. Хотя вы можете объявлять переменные в любом файле .tf, общепринятой практикой является размещение их в файле с именем variables.tf. Эта практика помогает поддерживать порядок в вашем проекте и позволяет другим легко понять, какие входные значения ожидает ваша конфигурация.

Вся ваша работа будет выполняться в директории ~/project. Сначала создайте файл variables.tf с помощью команды touch.

touch variables.tf

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

ls

В выводе вы должны увидеть variables.tf.

variables.tf

На данный момент этот файл пуст. На следующих шагах вы добавите в него определения переменных.

Определение строковой переменной для имени файла

На этом шаге вы определите свою первую переменную. Эта переменная будет использоваться для указания имени файла, который Terraform создаст.

Переменные объявляются с использованием блока variable. Каждый блок определяет одну входную переменную. Давайте определим переменную с именем filename.

Откройте файл variables.tf, созданный на предыдущем шаге, с помощью редактора nano.

nano variables.tf

Теперь добавьте следующий код в файл. Этот код объявляет переменную с именем filename, указывает ее тип как string (строка) и включает полезное описание.

variable "filename" {
  description = "The name of the file to create."
  type        = string
}
  • variable "filename": Это начинает объявление переменной с именем filename.
  • description: Этот необязательный аргумент предоставляет удобочитаемое описание назначения переменной.
  • type: Этот аргумент указывает тип данных для переменной. Здесь мы используем string, чтобы указать, что она будет принимать текстовые значения.

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

Определение строковой переменной для содержимого

На этом шаге вы определите вторую переменную для хранения содержимого, которое будет записано в файл. Это следует той же схеме, что и на предыдущем шаге.

Снова откройте файл variables.tf с помощью nano.

nano variables.tf

Добавьте следующий блок variable под определением переменной filename, которое вы добавили ранее.

variable "content" {
  description = "The content to write into the file."
  type        = string
}

Ваш полный файл variables.tf теперь должен выглядеть следующим образом:

variable "filename" {
  description = "The name of the file to create."
  type        = string
}

variable "content" {
  description = "The content to write into the file."
  type        = string
}

Это определяет два входных параметра для вашей конфигурации Terraform: один для имени файла и один для его содержимого.

Сохраните файл и выйдите из nano (Ctrl+X, Y, Enter).

Использование переменных в блоке ресурса local_file

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

Сначала создайте новый файл с именем main.tf.

nano main.tf

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

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

resource "local_file" "my_file" {
  filename = var.filename
  content  = var.content
}

Разберем эту конфигурацию:

  • terraform { ... }: Этот блок настраивает параметры Terraform, включая требуемые провайдеры. Мы сообщаем Terraform, что нашей конфигурации нужен провайдер local.
  • resource "local_file" "my_file": Это определяет ресурс типа local_file и присваивает ему локальное имя my_file.
  • filename = var.filename: Здесь вы ссылаетесь на переменную. Префикс var. за которым следует имя переменной (filename), указывает Terraform использовать значение переменной filename для этого аргумента.
  • content = var.content: Аналогично, это присваивает значение переменной content аргументу content ресурса.

После добавления кода сохраните файл и выйдите из nano (Ctrl+X, Y, Enter).

Выполнение terraform apply с заданными значениями переменных

На этом заключительном шаге вы выполните конфигурацию Terraform и предоставите значения для ваших переменных.

Сначала вам необходимо инициализировать рабочую директорию Terraform. Команда terraform init загружает и устанавливает провайдеры, определенные в конфигурации (в нашем случае, провайдер local).

Выполните следующую команду:

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 been successfully initialized!
...

Теперь вы можете применить конфигурацию. Чтобы передать значения вашим переменным, вы можете использовать флаг командной строки -var. Мы также будем использовать флаг -auto-approve, чтобы пропустить интерактивный запрос подтверждения.

Выполните команду terraform apply со значениями для filename и content:

terraform apply -var="filename=hello.txt" -var="content=Hello, Terraform Variables." -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.my_file will be created
  + resource "local_file" "my_file" {
      + content              = "Hello, Terraform Variables."
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "hello.txt"
      + id                   = "..."
    }

Plan: 1 to add, 0 to change, 0 to destroy.

local_file.my_file: Creating...
local_file.my_file: Creation complete after 0s [id=...]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

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

cat hello.txt

Вы должны увидеть содержимое, которое вы предоставили в переменной:

Hello, Terraform Variables.

Поздравляем! Вы успешно использовали переменные Terraform для создания файла.

Резюме

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

Вы узнали, как:

  • Организовывать объявления переменных в выделенном файле variables.tf.
  • Объявлять переменные с помощью блока variable, указывая их type (тип) и description (описание).
  • Ссылаться на переменные внутри блоков ресурсов, используя синтаксис var.<имя_переменной>.
  • Инициализировать проект Terraform с помощью terraform init для загрузки необходимых провайдеров.
  • Предоставлять значения переменных во время выполнения, используя флаг -var с командой terraform apply.

Эти знания являются важнейшим строительным блоком для создания более сложной и модульной инфраструктуры как кода (Infrastructure as Code) с помощью Terraform.