Terraform: инфраструктура на уровне кода | страница 52
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"
}
Здесь мы опять ссылаемся на атрибуты, на этот раз на атрибут public_ip ресурса aws_instance. Если снова выполнить команду apply, Terraform не внесет никаких изменений (поскольку вы не меняли никакие ресурсы), но покажет вам в самом конце новый вывод:
$ terraform apply
(...)
aws_security_group.instance: Refreshing state... [id=sg-078ccb4f9533d2c1a]
aws_instance.example: Refreshing state... [id=i-028cad2d4e6bddec6]
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.