Использование вывода в другом модуле или ресурсе - PullRequest
0 голосов
/ 27 марта 2020

Я видел много постов, в которых говорится о передаче вывода модуля в другой модуль. По какой-то причине я не могу заставить это работать.

Я могу получить выходные данные модуля без каких-либо проблем

$ terraform output
this_sg_id = sg-xxxxxxxxxxxxxxxxx

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

$ terraform plan
var.vpc_security_group_ids
  Security Group ID
  Enter a value:

Вот моя файловая структура:

 ── dev
│     └── service
│       └── dev_instance
│           ├── main.tf
│           ├── outputs.tf
│           ├── variables.tf
├── modules
│       ├── ec2
│       │   ├── build_ec2.tf
│       │   ├── outputs.tf
│       │   └── variables.tf
│       └── sg
│           ├── build_sg.tf
│           ├── outputs.tf
│           └── variables.tf

Не уверен, что это правильно, но в dev / service / dev_instance / main.tf:

module "build_sg" {
source         = "../../../modules/sg/"
vpc_id         = var.vpc_id
sg_name        = var.sg_name
sg_description = var.sg_description
sg_tag         = var.sg_tag
sg_tcp_ports   = var.sg_tcp_ports
sg_tcp_cidrs   = var.sg_tcp_cidrs
sg_udp_ports   = var.sg_udp_ports
sg_udp_cidrs   = var.sg_udp_cidrs
sg_all_ports   = var.sg_all_ports
sg_all_cidrs   = var.sg_all_cidrs
}

module "build_ec2" {
source                         = "../../../modules/ec2/"
vpc_security_group_ids     = ["${module.build_sg.this_sg_id}"]
}

В dev / service / dev_instance / output.tf:

output "this_sg_id" {
description = "The security group ID"
value       = "${module.build_sg.this_sg_id}"
}

Мой файл ec2 build_ec2.tf модуля имеет следующее:

resource "aws_instance" "ec2" {
vpc_security_group_ids = ["${module.build_sg.this_sg_id}"]
}

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Я также думаю, что вам нужно удалить определение var из вашей переменной tf file и использовать только ссылку на вывод модуля.

0 голосов
/ 28 марта 2020

У вас где-то определено var "vpc_security_group_ids", я полагаю, в одном из ваших variables.tf файлов. Terraform не знает автоматически, чтобы заполнить это выводом из модуля. Вам нужно удалить определение var и просто использовать ссылку на выход модуля в вашем шаблоне.

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

...