Можно ли сгенерировать имя переменной в terraform - PullRequest
0 голосов
/ 25 сентября 2019

Итак, я хочу получить переменную в удаленном состоянии terraform, однако у нас есть несколько разных переменных для среды на общем маршруте53

Так что для данной среды мы хотим вытащить идентификатор зоны изкак таковой;

zone_id = data.terraform_remote_state.route_53.route53_zone_ $ {var.environment} _id

Как бы мне это сделать, пожалуйста.

1 Ответ

0 голосов
/ 26 сентября 2019

Как правило, невозможно использовать произвольные динамические строки в качестве имен переменных.

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

data.terraform_remote_state.outputs.route53["route53_zone_${var.environment}_id"]

С учетом сказанного, если это возможно, я бы порекомендовал лучше структурировать выходные значения, чтобы идентификаторы зоны Route53 были заданы как карта для среды,так что это может быть получено более интуитивно понятным способом.

Например, вы можете сделать свой вывод route53 картой объектов, ключи которых являются именами среды:

data.terraform_remote_state.outputs.route53[var.environment].zone_id
output "route53" {
  value = tomap({
    production = {
      zone_id = aws_route53_zone.production.id
    }
    staging = {
      zone_id = aws_route53_zone.staging.id
    }
  })
}

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

data.terraform_remote_state.outputs.environments[var.environment].route53_zone_id
output "environments" {
  value = tomap({
    production = {
      ec2_vpc_id      = aws_vpc.production.id
      route53_zone_id = aws_route53_zone.production.id
    }
    staging = {
      ec2_vpc_id      = aws_vpc.staging.id
      route53_zone_id = aws_route53_zone.staging.id
    }
  })
}

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

(Вы также можете подумать, лучше ли иметь отдельную конфигурацию / состояние для среды, чем управлять ими в целом, но это большая тема сама по себе.) * * тысяча двадцать-один

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...