Terraform:从模块

时间:2017-10-31 11:40:48

标签: terraform

代码

考虑一个terraform模块:

module "blah-asg" {
  source = "asg"

  asg_max_size       = 1
  asg_min_size       = "${var.min_blah}"
  ...
}

我的问题

我如何output变量?

我尝试了什么

output "blah-es-asg" {
    value = "${asg.blah-asg.arn}"
}

失败了
  

获取插件时出错:模块root:发生了1个错误:   *输出'blah-asg':变量中引用的未知资源'asg.blah'asg.blah-asg.arn

我的问题

如何在Terraform中输出模块字段?

2 个答案:

答案 0 :(得分:19)

首先,您需要在模块asg中设置输出:

$ cat asg/output.tf

output "blah-es-asg" {
    value = "${aws_autoscaling_group.blah-asg.arn}"
}

然后用source = "asg"

调用模块
module "blah-asg" {
  source = "asg"

  asg_max_size       = 1
  asg_min_size       = "${var.min_blah}"
  ...
}

您现在可以使用此格式在当前代码中输出它:

output "blah-es-asg" {
    value = "${module.blah-asg.blah-es-asg}"
}

答案 1 :(得分:3)

模块本身不知道名称blah-asg - 只是在调用它的脚本中 - 实际上可以使用不同的名称和参数多次调用它。

输出应该以与在同一模块中的其他位置相同的方式引用模块内的内容。例如,如果要输出以下资源的arn:

resource "aws_lb" "test" {
  # ...
}

你会使用:

output "blah-es-asg" {
    value = "${aws_lb.test.arn}"
}

请注意,输出是在模块代码的其余部分旁边定义的,而不是在调用它的脚本中定义的。

然后,调用模块的脚本${module.blah-asg.blah-es-asg}

可以使用此输出