Terraform:从模块输出字段

Ada*_*tan 13 terraform

考虑一个terraform模块:

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

  asg_max_size       = 1
  asg_min_size       = "${var.min_blah}"
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题

我怎么output变量呢?

我试过了什么

output "blah-es-asg" {
    value = "${asg.blah-asg.arn}"
}
Run Code Online (Sandbox Code Playgroud)

哪个失败了

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

我的问题

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

BMW*_*BMW 29

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

$ cat asg/output.tf

output "blah-es-asg" {
    value = "${aws_autoscaling_group.blah-asg.arn}"
}
Run Code Online (Sandbox Code Playgroud)

然后你用以下方法调用模块source = "asg":

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

  asg_max_size       = 1
  asg_min_size       = "${var.min_blah}"
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

output "blah-es-asg" {
    value = "${module.blah-asg.blah-es-asg}"
}
Run Code Online (Sandbox Code Playgroud)

  • 您提供的解释和演练很有帮助。如果原始海报使用了比废话等更好的东西,那就更清楚了。我花了一分钟才改变现实生活..但感谢其他人的帮助! (2认同)

Jam*_*rpe 7

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

输出应该只引用模块内的内容,就像在同一模块的其他地方一样。例如,如果您想输出以下资源的 arn:

resource "aws_lb" "test" {
  # ...
}
Run Code Online (Sandbox Code Playgroud)

你会使用:

output "blah-es-asg" {
    value = "${aws_lb.test.arn}"
}
Run Code Online (Sandbox Code Playgroud)

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

然后,调用模块的脚本可以使用此输出${module.blah-asg.blah-es-asg}