Terraform 在其他模块或资源中使用输出
我已经看到了很多关于将一个模块的输出传递到另一个模块的帖子。由于某种原因,我不能让它工作 我可以得到模块的输出,没有任何问题 但是,当我调用资源中的模块或调用其他模块时,它会询问我安全组ID 以下是我的文件结构: 不确定这是否正确,但在dev/service/dev_instance/main.tf中: 在dev/service/dev_instance/output.tf中: 我的ec2模块build_ec2.tf文件包含以下内容: 我假设您在一个Terraform 在其他模块或资源中使用输出,terraform,Terraform,我已经看到了很多关于将一个模块的输出传递到另一个模块的帖子。由于某种原因,我不能让它工作 我可以得到模块的输出,没有任何问题 但是,当我调用资源中的模块或调用其他模块时,它会询问我安全组ID 以下是我的文件结构: 不确定这是否正确,但在dev/service/dev_instance/main.tf中: 在dev/service/dev_instance/output.tf中: 我的ec2模块build_ec2.tf文件包含以下内容: 我假设您在一个变量.tf文件中定义了var“vpc\u se
变量.tf
文件中定义了var“vpc\u security\u group\u id”
。Terraform不会自动知道如何用模块的输出来填充它。您需要删除var
定义,只需在模板中使用模块输出引用即可
变量用于从命令行传入值。它们不以任何方式与模块输出相关联。如果您希望值来自正在使用的模块,则不应将该值定义为变量。我还认为,您需要从变量tf文件中删除var定义,并仅使用模块输出引用
$ 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
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}"]
}
output "this_sg_id" {
description = "The security group ID"
value = "${module.build_sg.this_sg_id}"
}
resource "aws_instance" "ec2" {
vpc_security_group_ids = ["${module.build_sg.this_sg_id}"]
}