Локальные значения
Локальное значение присваивает имя выражению, чтобы вы могли использовать это имя несколько раз в модуле, не повторяя выражение.
Если вы знакомы с традиционными языками программирования, полезно сравнить модули с определениями функций:
- Входные переменные похожи на аргументы функции.
- Выходные значения похожи на возвращаемые функцией значения.
- Локальные значения похожи на временные локальные переменные функции.
Для краткости локальные значения часто называют просто «локальными», если смысл понятен из контекста.
Объявление локального значения
Набор связанных локальных значений можно объявить вместе в одном блоке locals:
locals {
service_name = "forum"
owner = "Community Team"
}Выражения в локальных значениях не ограничиваются константами-литералами; они также могут ссылаться на другие значения в модуле, чтобы преобразовывать или объединять их, включая переменные, атрибуты ресурсов и другие локальные значения:
locals {
# Ids for multiple sets of EC2 instances, merged together
instance_ids = concat(aws_instance.blue.*.id, aws_instance.green.*.id)
}
locals {
# Common tags to be assigned to all resources
common_tags = {
Service = local.service_name
Owner = local.owner
}
}Использование локальных значений
После объявления локального значения на него можно ссылаться в выражениях как local.<NAME>.
Локальные значения создаются блоком locals (во множественном числе), но на них ссылаются как на атрибуты объекта с именем local (в единственном числе). При ссылке на локальное значение не добавляйте «s»!
resource "aws_instance" "example" {
# ...
tags = local.common_tags
}Обращаться к локальному значению можно только в выражениях модуля, в котором оно объявлено.
Когда использовать локальные значения
Локальные значения помогают избежать многократного повторения одних и тех же значений или выражений в конфигурации, но чрезмерное их использование может затруднить чтение конфигурации тем, кто будет ее сопровождать, поскольку скрывает фактически используемые значения.
Используйте локальные значения умеренно — в тех случаях, когда одно значение или результат применяется во многих местах и это значение, вероятно, изменится в будущем. Возможность легко изменить значение в одном месте — главное преимущество локальных значений.
Эфемерность
Локальное значение можно вычислить, вычислив выражение, содержащее эфемерные значения. В этом случае локальное значение разрешено использовать только в других эфемерных контекстах:
- Эфемерные ресурсы
- Эфемерные переменные
- Эфемерные выходные значения
- Локальные значения
- Провайдеры
- Провижионеры
- Блоки
connectionресурсов - Атрибуты
write-onlyресурсов
Любое включение эфемерного значения в выражение сделает локальное значение эфемерным. Например:
variable "var1" {
type = string
}
variable "var2" {
type = string
ephemeral = true
}
locals {
l1 = var.var1 == "" ? "" : var.var1 // => not ephemeral
l2 = var.var2 // => ephemeral
l3 = var.var2 == "" ? "" : var.var1 // => ephemeral
}Подробный пример использования эфемерных локальных значений см. в этом примере.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/values/locals/