type = list(number)
default = [1, 2, 3]
}
А вот ассоциативный массив, который требует, чтобы все значения были строковыми:
variable "map_example" {
description = "An example of a map in Terraform"
type = map(string)
default = {
key1 = "value1"
key2 = "value2"
key3 = "value3"
}
}
Вы также можете создавать более сложные
variable "object_example" {
description = "An example of a structural type in Terraform"
type = object({
name = string
age = number
tags = list(string)
enabled = bool
})
default = {
name = "value1"
age = 42
tags = ["a", "b", "c"]
enabled = true
}
}
Выше создается входная переменная, которая требует, чтобы значение было объектом с ключами name (строка), age (число), tags (список строк) и enabled (булево значение). Если попытаться присвоить такой переменной значение, которое не соответствует этому типу, Terraform немедленно вернет ошибку типизации. В следующем примере демонстрируется попытка присвоить enabled строку вместо булева значения:
variable "object_example_with_error" {
description = "An example of a structural type in Terraform with an error"
type = object({
name = string
age = number
tags = list(string)
enabled = bool
})
default = {
name = "value1"
age = 42
tags = ["a", "b", "c"]
enabled = "invalid"
}
}
Вы получите следующую ошибку:
$ terraform apply
Error: Invalid default value for variable
on variables.tf line 78, in variable "object_example_with_error":
78: default = {
79: name = "value1"
80: age = 42
81: tags = ["a", "b", "c"]
82: enabled = "invalid"
83: }
This default value is not compatible with the variable's type constraint: a bool is required.
Для примера с веб-сервером достаточно переменной, которая хранит номер порта:
variable "server_port" {
description = "The port the server will use for HTTP requests"
type = number
}
Обратите внимание, что у входной переменной server_port нет поля default, поэтому, если выполнить команду apply прямо сейчас, Terraform сразу же попросит ввести значение для server_port и покажет вам описание description:
$ terraform apply
var.server_port
The port the server will use for HTTP requests
Enter a value:
Если вы не хотите иметь дело с интерактивной строкой ввода, можете предоставить значение переменной с помощью параметра командной строки -var:
$ terraform plan -var "server_port=8080"
То же самое можно сделать, добавив переменную среды вида TF_VAR_
$ export TF_VAR_server_port=8080
$ terraform plan
Если же вы не хотите держать в голове дополнительные аргументы командной строки при каждом выполнении команды plan или apply, можете указать значение по умолчанию:
variable "server_port" {
description = "The port the server will use for HTTP requests"
type = number
default = 8080
}
Чтобы использовать значение входной переменной в коде Terraform, следует воспользоваться выражением типа
var.
Например, так можно присвоить параметрам группы безопасности from_port и to_port значение переменной server_port:
resource "aws_security_group" "instance" {
name = "terraform-example-instance"
ingress {
from_port = var.server_port
to_port = var.server_port
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
Хорошей идеей будет использование одной и той же переменной при задании порта в скрипте user_data. Указать ссылку внутри строкового литерала можно с помощью
"${...}"
Внутри фигурных скобок можно разместить любую корректную ссылку, и Terraform преобразует ее в строку. Например, вот как можно воспользоваться значением var.server_port внутри строки user_data:
user_data = <<-EOF
#!/bin/bash
echo "Hello, World" > index.html
nohup busybox httpd -f -p ${var.server_port} &
EOF
Помимо входных переменных, Terraform позволяет определять и
output "
value =
[CONFIG ...]
}
NAME — это имя выходной переменной, а в качестве VALUE можно указать любое выражение Terraform, которое вы хотите вывести. CONFIG может иметь два дополнительных (и необязательных) параметра.
•description. Этот параметр всегда желательно применять для документирования того, как используется выходная переменная.
•sensitive. Если присвоить данному параметру true, Terraform не станет сохранять этот вывод в журнал после выполнения команды terraformapply. Это полезно, когда переменная содержит деликатный материал или конфиденциальные данные, такие как пароли или секретные ключи.
Например, вместо того, чтобы вручную бродить по консоли EC2 в поисках IP-адреса своего сервера, вы можете вывести его в виде выходной переменной:
output "public_ip" {
value = aws_instance.example.public_ip
description = "The public IP address of the web server"
}
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии