我看过很多关于将模块的输出传递到另一个模块的文章。由于某种原因,我无法使它正常工作。
我可以毫无问题地获取模块的输出
$ terraform output this_sg_id = sg-xxxxxxxxxxxxxxxxx
但是,当我在资源中或另一个模块中调用该模块时,它会要求我提供安全组ID。
$ 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}"] }
答案 0 :(得分:0)
我假设您的var "vpc_security_group_ids"
文件中有一个定义了variables.tf
。 Terraform不会自动知道用模块的输出来填充它。您需要删除var
定义,而只需在模板中使用模块输出引用即可。
变量用于从命令行传递值。它们不以任何方式与模块输出绑定。如果您希望值来自正在使用的模块,则不应同时将该值定义为变量。
答案 1 :(得分:-2)
我还认为,您需要从变量tf文件中删除var定义,并仅使用模块输出引用。