Соглашение Terraform: следует ли объявить «константу» переменной или локальной? - PullRequest
1 голос
/ 18 июня 2020

Пример : В Azure я развертываю несколько групп ресурсов, управляемые диски, сетевые интерфейсы и т. Д. c, все в одном регионе.

Я хочу объявить примитив «регион» («константу»), на который будут ссылаться все эти ресурсы. Что из этого соответствует соглашению?

a) variables.tf:

variable "region" {
    type = string
    default = "a-place"
}

b) locals.tf

locals {
    region = "a-place"
}

Естественно, я бы предпочел объявить это как местный. Я бы использовал переменную только в том случае, если я ожидаю, что значение придет (или будет переопределено) из переменных среды, командной строки или если я создавал модуль. Однако я не видел, чтобы local использовался для «объявления констант» ни в одном из примеров, что заставляет меня думать, что существует соглашение об использовании локальных переменных с очень ограниченной областью действия (например, в основном для создания структур, которые могут быть использованы с count и for_each конструкций).

Прикрытие спины до того, как кто-то пометит это как основанное на мнении: я спрашиваю, что такое соглашение, а не ваше мнение, что соглашение должно быть.

-up вопрос: Был бы ответ иначе, если бы этот пример касался IP-адресов, префиксов имен ресурсов и т. д. c. вместо региона? (распространяется ли соглашение только на определенные поля?)

1 Ответ

0 голосов
/ 23 июня 2020

Общее назначение локальных значений - представлять выражения, результат которых вы хотите повторно использовать во многих местах модуля без дублирования. Это включает в себя постоянные значения в ситуациях, когда их полезно исключить, например, потому что вы ожидаете, что они изменятся в будущем и хотите изменить только в одном месте, или потому что имя локального значения более значимо, чем само значение и, таким образом, улучшает читаемость части конфигурации, использующие его.

Объявление локального значения также имеет потенциальную стоимость: оно заставляет любого, кто читает остальную часть модуля, искать в другом месте, чтобы увидеть окончательное значение каждый раз, когда вы на него ссылаетесь . Часто преимущества перевешивают эту стоимость, но не всегда. входные переменные, только если вы ожидаете, что значение по умолчанию иногда будет переопределено.

...