Переменные в Terraform, делают конфигурацию более гибкой и упрощают повторное использование данных. Правда несмотря на название, они не могут меняться в процессе работы Terraform. Но их можно задавать динамически прямо перед выполнением.
Определение переменных
Определение переменных может появляться в любой части конфигурации, так как это не инструкция, а описание того, что мы хотим получить. Однако, для удобства восприятия, Terraform рекомендует класть их в отдельный файл variables.tf.
Ниже пример определения переменной yc_token
variable "yc_token" {
description = "Какое-то описание"
// Тип значения переменной
type = string
// Значение по умолчанию, которое используется если не задано другое
default = "какое-то значение по умолчанию"
// Прячет значение переменной из всех выводов
// По умолчанию false
sensitive = true
}
Все четыре аргумента опциональные, но тип лучше указывать всегда, это защищает от случайных ошибок. Значение по умолчанию ставится только тогда, когда оно имеет смысл. В примере выше переменная определяет ключ, поэтому значение по умолчанию ей не нужно.
Если значение по умолчанию не установлено, то Terraform требует указания конкретного значения перед выполнением. Terraform предлагает несколько способов указания переменных.
Первый. Через флаг -var-file, указанный при запуске Terraform на выполнение:
terraform apply -var-file=myfile.tfvars
Второй. Терраформ автоматически загружает все файлы в директории с именем terraform.tfvars и соответствующих маске *.auto.tfvars.
Файлы *.tfvars содержат присваивания переменным их значений:
yc_token = "y_v1_cafd2fda20a;sldfjk2o3i4hlk13hj41l2jk341;234"
server_numbers = 2
hcloud_token = "SD@#32FD"
Типы переменных
Переменные в Terraform могут быть 5 типов:
string
variable "vpc_cidr_block" { description = "CIDR block for VPC" type = string default = "10.0.0.0/16" }
number
variable "instance_count" { description = "Number of instances to provision." type = number default = 2 }
bool
variable "enable_vpn_gateway" { description = "Enable a VPN gateway in your VPC." type = bool default = false }
list: список элементов одного типа
variable "public_subnet_cidr_blocks" { description = "Available cidr blocks for public subnets." // В скобках указывается тип элементов списка type = list(string) default = [ "10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24", ] }
map или object: ассоциативный массив состоящий из пар ключ-значение
variable "resource_tags" { description = "Tags to set for all resources" type = map(string) default = { project = "project-alpha", environment = "dev" } }
Использование переменных
Для обращения к переменной используется синтаксис var.
provider "hcloud" {
token = var.hcloud_token
}
resource "yandex_compute_instance" "web2" {
tags = var.resource_tags
}
Самостоятельная работа
-
Добавьте в проект мониторинг Datadog. Убедитесь, что в проекте не содержатся чувствительные данные.
-
Определите переменные для описания инфраструктуры (имена серверов, их тип и так далее)
-
Примените изменения в инфраструктуре (проверьте, что команда прошла без ошибок). Запушьте код на Github
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.