Невозможно повторно использовать объявления переменных в Terraform. Если переменные в разных модулях будут иметь одинаковый тип, этот тип должен повторяться в каждом модуле.
Terraform имеет систему структурных типов , а не систему номинальных типов Таким образом, сами типы не именуются, а сопоставляются / ограничиваются своей формой. При передаче значений между модулями мы можем использовать ограничения типов для создания соглашений между семейством связанных модулей, но нет механизма для определения типа (или объявления переменной) в одном месте и его повторного использования в другомplace.
Механизм ограничения типа Terraform считает любой объект с не менее атрибутами в ограничении типа действительным, поэтому нет необходимости определятьисчерпывающий тип объекта каждый раз.
Например, если вы определяете переменную со следующим типом:
object({
name = string
})
Следующее значение объекта приемлемо для этого ограничения типа, поскольку оно имеет name
атрибут правильного типа независимо от любых других атрибутов, которые он определяет:
{
name = "foo"
other = "bar"
}
По этой причине может быть лучше ограничить объявление переменной в каждом модуле только подмножеством атрибутов, которые данный конкретный модуль на самом делетребует, что уменьшает связь между модулями: они должны быть совместимы толькоe в той степени, в которой их имена атрибутов перекрываются, и им не нужно напрямую связываться друг с другом.