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) и указывает на возможность переменой принимать нулевое значение.В следующих главах мы подробно рассмотрим некоторые из этих аргументов.
cloud
Как мы уже говорили выше, для каждой переменной в 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, связанные с чувствительной переменной, также становятся чувствительными. Именно поэтому в выходных данных мы получим результат, представленный на картинке ниже.
После объявления переменных в корневом модуле, каждому из них можно задать значение. Сделать это можно несколькими способами, о которых мы поговорим ниже.
Первый способ, благодаря которому возможно передать значения для переменных, — это использование командной строки. Для этого нужно использовать -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
Выгодные тарифы на облако Timeweb Cloud
В данной инструкции мы познакомились с переменными в Terraform, изучили синтаксис их объявления, рассмотрели все основные аргументы, а также познакомились с методами указания значений для них. Правильное использование переменных поможет вам создавать более гибкую и безопасную инфраструктуру с помощью Terraform.