Я рад это разобрать.
Итак, для начала, network_ids
- это локальное значение terraform . Обычно локальные значения используются для хранения вычислений, которые вы не хотите повторять снова и снова.
network_ids
, в частности, map
for
выражение . map
for
выражения используются для создания map
s из других «перечислимых» значений.
В терраформе map
походит на HashMap в других языках (dict
в python, Hash
в ruby, HashMap
в Java и т. Д.). map
содержит список ассоциаций, отображающий уникальный ключ (всегда string
) на значение, которое может иметь любой, непротиворечивый тип (то есть, вы не можете иметь такие вещи, как { "a" = 4, "b" = "c" }
, поскольку 4
и "c"
имеют различные типы).
В вашем примере c, for network_alias in keys(var.networks)
говорит, в основном
l oop через клавиши (опять же, string
s) в var.networks
и свяжите каждого с именем network_alias
.
В части network_alias => aws_vpc.subnet[network_alias].id
написано
создайте новую карту, где ключ совпадает с ключами мы зациклились, и значение - это поиск идентификатора su bnet, индексированного по ключу.
При всем этом local.network_ids
не будет выглядеть как ниже, потому что map
s имеют разные ключи, и понимание на самом деле оценивает значение ключа
network_ids = {
network_alias = 123
network_alias = 456
network_alias = 789
}
Невозможно точно сказать, каким будет значение, потому что я не знаю значение var.networks
или aws_vpc.subnet
.