首页 > 解决方案 > 是否可以将 terraform 远程状态包装到模块中并从状态中输出变量?

问题描述

在我的 terraform 代码中,我经常有多个“terraform_remote_state”来从不同的路径(网络、安全组)获取远程状态。所以为了避免这样的多个块:

data "terraform_remote_state" "network" {
  backend = "artifactory"

  config {
    username = "${var.remote_state_config["user"]}"
    password = "${var.remote_state_config["password"]}"
    url      = "${var.remote_state_config["url"]}"
    repo     = "${var.remote_state_config["repo"]}"
    subpath  = "the_path"
  }
}

data "terraform_remote_state" "security_group" {
  ...
}

我想我会定义一个这样的模块:

variable remote_state_config {
  type = "map"
}

data "terraform_remote_state" "network" {
  backend = "artifactory"

  config {
    username = "${var.remote_state_config["user"]}"
    password = "${var.remote_state_config["password"]}"
    url      = "${var.remote_state_config["url"]}"
    repo     = "${var.remote_state_config["repo"]}"
    subpath  = "the_path"
  }
}

output "private_subnets" {
  value = "${data.terraform_remote_state.network.private_subnets}"
}

output "vpc_id" {
  value = "${data.terraform_remote_state.network.vpc_id}"

以后像这样使用它:

module "remote-network" {
  source              = "../../remote-state-network"
  remote_state_config = "${var.remote_state_conf}"
}
...
  vpc_id = "${module.remote-network.vpc_id}"
...

但是运行会导致如下错误消息:

 module.remote-network.output.vpc_id: Resource 'data.terraform_remote_state.network' does not have attribute 'vpc_id' for variable 'data.terraform_remote_state.network.vpc_id'

我正在使用 terraform 0.11.3

标签: terraformterraform-remote-state

解决方案


这是因为您在此处引用的远程状态 ( data "terraform_remote_state" "network") 没有outputwithvpc_id名称。顺便说一句,错误消息中明确说明了这一点。

引用的状态文件的相应 Terraform 代码network应具有以下定义:

output "vpc_id" {
  value = "...."
}

推荐阅读