Использование переменных
В Terraform вы можете хранить информацию, необходимую для создания инфраструктуры, в переменных. Значения переменных можно указывать в отдельных файлах и затем ссылаться на эти файлы в описаниях ресурсов.
Благодаря переменным вы можете:
- настраивать ресурсы без изменения кода;
- настраивать разные окружения с индивидуальными параметрами (например, одни параметры для тестовой среды, другие — для продуктивной);
- безопасно хранить секреты.
Объявление переменных
Заголовок раздела «Объявление переменных»Переменные в Terraform можно объявлять:
- в файле
main.tfв блокеvariables(см. пример для быстрого старта) — такой способ подходит для небольших тестовых проектов; - в отдельном файле с переменными — предпочтительный способ для крупных проектов.
При объявлении переменной указываются:
- имя;
- тип;
- краткое описание;
- (опционально) значение по умолчанию.
Присвоение значений переменным
Заголовок раздела «Присвоение значений переменным»- Через файлы
- Через переменные окружения
- Через командную строку
Вы можете указать значения переменных в файлах с расширением .tfvars, например:
vm_name = "my-vm"network_name = "my-network"subnet_name = "my-subnet"disk_name = "my-disk"Вы можете хранить разные наборы переменных в разных файлах: например, test.tf — для тестового окружения, а prod.tf — для продуктивного.
Значения переменных, сохраненные в файле с именем terraform.tfvars, при выполнении команд Terraform подгружаются автоматически. Любые другие файлы нужно указывать в командах явно, например:
terraform apply -var-file="prod.tfvars"В файлах с переменными можно хранить секреты: пароли, ключи доступа, токены и т.п. Это помогает:
- ограничить доступ к секретам и избежать компрометации;
- менять секреты без изменения кода.
В описаниях соответствующих переменных используйте параметр sensitive = true, например:
variable "db_password" { type = string sensitive = true}Благодаря этому значение переменных с секретами не будет отображаться в логах и выводах команд.
Синтаксис при обращении к переменным
Заголовок раздела «Синтаксис при обращении к переменным»В описании ресурсов для обращения к переменным используйте синтаксис var.<имя переменной>, например:
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"}