首页 文章

Terraform:从模块输出字段

提问于
浏览
2

代码

考虑一个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.arn中引用的未知资源'asg.blah'

我的问题

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

2 回答

  • 8

    首先,您需要在模块中设置输出 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}"
    }
    
  • 3

    模块本身不知道名称 blah-asg - 's just in the script that'正在调用它 - 实际上它可以使用不同的名称和参数多次调用 .

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

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

    你会用:

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

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

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

相关问题