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_gateway" {
      description = "Enable a 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.<variable_name>. Переменные могут подставляться в любых местах, где есть присваивания. Пример:

provider "hcloud" {
  token = var.hcloud_token
}

resource "yandex_compute_instance" "web2" {
  tags = var.resource_tags
}

Рекомендуемые программы

Завершено

0 / 10