如何在子模块中使用远程状态数据源

时间:2019-07-21 09:41:29

标签: terraform terraform-provider-aws

我正在尝试从远程状态调用数据以引用网络ACL的vpc_id。运行计划/应用时,收到错误消息“该对象没有参数,嵌套块或导出的名为“ vpc_id”的属性。”

我尝试使用“ data.terraform_remote_state。*。vpc_id”以及“ $ {}”语法。我尝试在variables.tf中为子模块和父模块定义data.remote信息。

我最终需要能够为不同的VPC /子网动态调用此模块。

相关的VPC已经存在,并且所有模块都已初始化。

s3存储桶级/网络/vpc/terraform.tf状态:

"outputs": {
    "vpc_id": {
      "value": "vpc-1234567890",
      "type": "string"
    }
  },

enter code here

modules / network / acl / main.tf:

data "terraform_remote_state" "stage-network" {
  backend = "s3"

  config = {
    bucket          = "bucket"
    key             = "stage/network/vpc/terraform.tfstate"
  }
}

resource "aws_network_acl" "main" {
  vpc_id        = data.terraform_remote_state.stage-network.vpc_id
# acl variables here

stage / network / acl / main.tf:

data "terraform_remote_state" "stage-network" {
  backend = "s3"

  config = {
    bucket          = "bucket"
    key             = "stage/network/vpc/terraform.tfstate"
  }
}

module "create_acl" {
  source              = "../../../modules/network/acl/"

vpc_id = var.vpc_id
# vpc_id = data.terraform_remote_state.stage-network.vpc_id
# vpc_id = "${data.terraform_remote_state.stage-network.vpc_id}"
# vpc_id = var.data.terraform_remote_state.stage-network.vpc_id

我希望acl父模块能够关联到VPC,并且从那里子模块能够配置变量。

2 个答案:

答案 0 :(得分:1)

这是Terraform的0.12.X版本引入的重大更改之一。

对于v0.12版本, terraform_remote_state 数据源略有更改,以使所有远程状态输出都可以作为单个映射值使用,而不能像以前的版本那样作为顶级属性使用。

在以前的版本中,对远程状态数据源导出的 vpc_id 输出的引用可能看起来像这样:

data.terraform_remote_state.vpc.vpc_id

现在必须通过新的输出属性访问此值:

data.terraform_remote_state.vpc.outputs.vpc_id

来源:https://www.terraform.io/upgrade-guides/0-12.html#remote-state-references

答案 1 :(得分:0)

在第一个状态: ....

output "expose_vpc_id" {
  value = "${module.network.vpc_id}"
}

在另一种状态下,在 terraform 配置之间共享:

data "terraform_remote_state" "remote" {
  backend = "s3"
  config = {
    bucket = "terraform-ex1"
    key    = "tera-ex1.tfstate"
    region = "us-east-1"
  }
}

output "vpc_id" {
  value = "${data.terraform_remote_state.remote.outputs.expose_vpc_id}"
}