Зарегистрируйтесь, чтобы продолжить обучение

Переменные Terraform: Основы

Переменные в 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
}

Самостоятельная работа

  1. Добавьте в проект мониторинг Datadog. Убедитесь, что в проекте не содержатся чувствительные данные.

  2. Определите переменные для описания инфраструктуры (имена серверов, их тип и так далее)

  3. Примените изменения в инфраструктуре (проверьте, что команда прошла без ошибок). Запушьте код на Github


Дополнительные материалы

  1. Типы переменных
  2. Консоль

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

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