Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как использовать переменные Terraform

Илья Ушаков
Илья Ушаков
Технический писатель
26 мая 2023 г.
1310
6 минут чтения
Средний рейтинг статьи: 5

Terraform — это популярное программное обеспечение для DevOps-инженеров и системных администраторов, основная цель которого — создание и управление инфраструктурой в облаке. Его главная особенность — это возможность автоматизировать все процессы, связанные с развертыванием инфраструктуры.

В Terraform существует набор основных элементов, предназначенных для описания инфраструктуры. К ним относятся провайдеры, ресурсы, источники данных, модули, выражения, а также переменные. Последние мы уже частично затрагивали в нашей статье про «Управление внутренними IP-адресами через Terraform» и рассказывали об их использовании в своей конфигурации.

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

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

Объявление переменных

Переменные можно представить как контейнеры, в которых пользователи будут хранить информацию (регион развертывания, типы инстансов, пароли или ключи доступа). Определение их значений происходит один раз, с помощью параметров CLI или переменных среды, после чего их возможно использовать в различных частях своей конфигурации.

Чтобы использовать переменные Terraform, их нужно для начала объявить. Данный процесс обычно выполняется в файле определения переменных variables.tf, с использованием блока variable. Синтаксис объявления представлен ниже:

variable "variable_name" {
  list_of_arguments
}

Каждая переменная должна иметь свое уникальное имя. Оно используется для присвоения ей значения извне и для ссылки на значение внутри модуля. Имя может быть любым, но не должно пересекаться с такими мета-аргументами, как version, providers, locals и т.д.

Аргументы переменных необязательны, но не стоит избегать их, так как они позволяют пользователям задавать дополнительные параметры. Среди основных аргументов можно выделить следующие:

  • type — указывает на тип данных, допустимых для конкретной переменной. Подробнее о возможных типах будет рассказано в главе «Ограничения для типов переменных».
  • description — этот аргумент позволяет нам добавить описание. Оно служит для пояснения назначения и использования переменной.
  • default — определяет для переменной значение по умолчанию.
  • validation — указывает на пользовательские правила проверки.
  • sensitive — отвечает за конфиденциальность переменной в выводе. 
  • nuliable — принимает 2 значения (true и false) и указывает на возможность переменой принимать нулевое значение.

В следующих главах мы подробно рассмотрим некоторые из этих аргументов.

Ограничения для типов переменных

Как мы уже говорили выше, для каждой переменной в Terraform возможно указать тип данных, ограничивающий значения, которые могут быть приняты. Делается это с помощью аргумента type

Terraform поддерживает следующие типы данных:

  • number — числовой формат данных (целые числа, числа с плавающей запятой и т.д.);
  • string — последовательность символов Unicode, предназначенная для хранения текстовой информации;
  • bool — логический тип данных (True или False);
  • map или object — группа значений в формате «ключ-значение», заключенные в фигурные скобки;
  • list или tuple — последовательность значений одного или разных типов данных, заключенная в квадратные скобки.

Пример указания типа переменной:

variable "region" {
  type = string
}

Описание переменной

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

variable "region" {
 type        = string
  description = "Указание региона сервера"
}

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

Пользовательские правила проверки

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

Каждая проверка должна содержать два обязательных аргумента: condition и error_message. В первом указывается выражение для проверки значения переменной, которое возвращает True, если оно допустимо, и False, если нет. А во втором указывается сообщение об ошибке, которое будет выведено пользователю, если condition вернет False.

Пример использования аргумента validation представлен ниже:

variable "email" {
  type        = string
  description = "Почтовый адрес"
  validation {
    condition           = can(regex("^\\S+@\\S+\\.\\S+$", var.email))
    error_message = "Неверный формат email адреса"
  }
}

В указанном примере мы выполняем проверку переменной email на соответствие правильному формату почтового адреса, используя соответствующее регулярное выражение в condition. Если почтовый адрес не проходит проверку, то пользователю будет выведено сообщение «Неверный формат email адреса».

Конфиденциальность переменных

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

Пример использования аргумента sensitive:

variable "user" {
  type = object({
    name    = string
    role       = string
  })
  sensitive = true
}

resource "example_resource" "example1" {
  name    = var.user.name
  role       = var.user.role
}

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

Image2

Указание значений для переменных корневого модуля

После объявления переменных в корневом модуле, каждому из них можно задать значение. Сделать это можно несколькими способами, о которых мы поговорим ниже.

Командная строка

Первый способ, благодаря которому возможно передать значения для переменных, — это использование командной строки. Для этого нужно использовать -var параметр при выполнении команд terraform plan|apply. Синтаксис этого метода выглядит следующим образом:

terraform apply|plan -var="variable1=value1" -var="variable2=value2"

Количество использования параметра -var в одной команде не ограничено.

Файлы определения переменных

Также возможно указать значения, используя специальный файл определения переменных. Он обязательно должен оканчиваться на .tfvars или .tfvars.json. Синтаксис такого файла следующий:

variable1 = "value1"
variable2 = "value2"

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

terraform apply -var-file="имя_файла.tfvars"

Переменные среды

Последний метод указания значений, который мы рассмотрим, — использование переменных окружения Terraform. Их названия должны быть в формате TF_VAR_variable_name. Синтаксис этого метода выглядит следующим образом:

export TF_VAR_variable1=value1
export TF_VAR_variable2=value2
terraform apply|plan

Заключение

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

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону