Terraform 在其他模块或资源中使用输出

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

我已经看到了很多关于将一个模块的输出传递到另一个模块的帖子。由于某种原因,我不能让它工作

我可以得到模块的输出,没有任何问题

但是,当我调用资源中的模块或调用其他模块时,它会询问我安全组ID

以下是我的文件结构:

不确定这是否正确,但在dev/service/dev_instance/main.tf中:

在dev/service/dev_instance/output.tf中:

我的ec2模块build_ec2.tf文件包含以下内容:

我假设您在一个
变量.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}"]
}