在另一个模块或资源中使用输出

时间:2020-03-27 18:56:51

标签: terraform

我看过很多关于将模块的输出传递到另一个模块的文章。由于某种原因,我无法使它正常工作。

我可以毫无问题地获取模块的输出

$ 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}"]
}

2 个答案:

答案 0 :(得分:0)

我假设您的var "vpc_security_group_ids"文件中有一个定义了variables.tf。 Terraform不会自动知道用模块的输出来填充它。您需要删除var定义,而只需在模板中使用模块输出引用即可。

变量用于从命令行传递值。它们不以任何方式与模块输出绑定。如果您希望值来自正在使用的模块,则不应同时将该值定义为变量。

答案 1 :(得分:-2)

我还认为,您需要从变量tf文件中删除var定义,并仅使用模块输出引用。