Перейти к содержимому

Использование переменных

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

Благодаря переменным вы можете:

  • настраивать ресурсы без изменения кода;
  • настраивать разные окружения с индивидуальными параметрами (например, одни параметры для тестовой среды, другие — для продуктивной);
  • безопасно хранить секреты.

Переменные в Terraform можно объявлять:

  • в файле main.tf в блоке variables (см. пример для быстрого старта) — такой способ подходит для небольших тестовых проектов;
  • в отдельном файле с переменными — предпочтительный способ для крупных проектов.

При объявлении переменной указываются:

  • имя;
  • краткое описание;
  • (опционально) значение по умолчанию.
    hcl
    variable "vm_name" {
    type = string
    description = "Virtual machine name"
    }
    variable "network_name" {
    type = string
    description = "Network name"
    }
    variable "subnet_name" {
    type = string
    description = "Subnet name"
    }
    variable "allowed_ports" {
    type = list(number)
    description = "List of allowed ports"
    default = [80, 443, 22]
    }
  • Через файлы
  • Через переменные окружения
  • Через командную строку

Вы можете указать значения переменных в файлах с расширением .tfvars, например:

hcl
vm_name = "my-vm"
network_name = "my-network"
subnet_name = "my-subnet"
disk_name = "my-disk"

Вы можете хранить разные наборы переменных в разных файлах: например, test.tf — для тестового окружения, а prod.tf — для продуктивного.

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

bash
terraform apply -var-file="prod.tfvars"

В файлах с переменными можно хранить секреты: пароли, ключи доступа, токены и т.п. Это помогает:

  • ограничить доступ к секретам и избежать компрометации;
  • менять секреты без изменения кода.

В описаниях соответствующих переменных используйте параметр sensitive = true, например:

hcl
variable "db_password" {
type = string
sensitive = true
}

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

Совет

Храните все секреты в отдельном файле (например, secrets.tfvars). Если вы храните конфигурации в git-репозитории, добавляйте файлы с секретами в .gitignore.

В описании ресурсов для обращения к переменным используйте синтаксис var.<имя переменной>, например:

hcl
resource "mws_vpc_network" "network" {
network = var.network_name
}
resource "mws_vpc_subnet" "subnet" {
subnet = var.subnet_name
network = mws_vpc_network.network.network
cidr = "192.168.0.0/16"
}
resource "mws_vpc_address" "vm_primary_network_interface_address" {
network = mws_vpc_network.network.network
subnet = mws_vpc_subnet.subnet.metadata.id
address = "${var.vm_name}-primary-network-interface-address"
}