Как повторно использовать переменные * определения * в Terraform? - PullRequest
0 голосов
/ 08 ноября 2019

Если я создаю varaible определение примерно так:

variable "aws_ecs_config" {
  type = object({
    cpu               = number
    memory            = number
    ecs_image_address = string
  })
  logs = {
    type = object({
      group         = string
      region        = string
      stream_prefix = string
    })
  }
}

Как я могу использовать это определение в нескольких местах без вставки копий?

1 Ответ

1 голос
/ 09 ноября 2019

Невозможно повторно использовать объявления переменных в Terraform. Если переменные в разных модулях будут иметь одинаковый тип, этот тип должен повторяться в каждом модуле.

Terraform имеет систему структурных типов , а не систему номинальных типов Таким образом, сами типы не именуются, а сопоставляются / ограничиваются своей формой. При передаче значений между модулями мы можем использовать ограничения типов для создания соглашений между семейством связанных модулей, но нет механизма для определения типа (или объявления переменной) в одном месте и его повторного использования в другомplace.


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

Например, если вы определяете переменную со следующим типом:

object({
  name = string
})

Следующее значение объекта приемлемо для этого ограничения типа, поскольку оно имеет name атрибут правильного типа независимо от любых других атрибутов, которые он определяет:

{
  name  = "foo"
  other = "bar"
}

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

...