Локальные значения
Локальное значение присваивает имя выражению, чтобы вы могли использовать это имя в модуле несколько раз вместо повторения выражения.
Если вы знакомы с традиционными языками программирования, может быть полезно сравнить модули с определениями функций:
- Входные переменные похожи на аргументы функции.
- Выходные значения похожи на возвращаемые функцией значения.
- Локальные значения похожи на временные локальные переменные функции.
Для краткости локальные значения часто называют просто «локальными», если смысл понятен из контекста.
Объявление локального значения
Набор связанных локальных значений можно объявить вместе в одном блоке 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.11/language/values/locals/