如何在子模块中使用远程状态数据源
How to use remote state data sources within child modules
我正在尝试从远程状态调用数据以引用网络 acl 的 vpc_id。当我 运行 plan/apply 时,我收到错误 "This object has no argument, nested block, or exported attribute named "vpc_id"."
我试过使用 "data.terraform_remote_state.*.vpc_id" 以及“${}”语法。我尝试在 variables.tf 中为子模块和父模块定义 data.remote 信息。
我最终需要能够针对不同的 VPCs/subnets 动态调用此模块。
相关VPC已经存在,所有模块都已初始化。
s3 存储桶 stage/network/vpc/terraform.tfstate:
"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,并且子模块能够从那里配置变量。
这是 Terraform 0.12.X 版本引入的重大更改之一。
terraform_remote_state 数据源在 v0.12 版本中略有更改,使所有远程状态输出都可作为单个映射值使用,而不是作为与以前版本一样的顶级属性。
在以前的版本中,对远程状态数据源导出的 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
在第一个状态:
.....
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}"
}
我正在尝试从远程状态调用数据以引用网络 acl 的 vpc_id。当我 运行 plan/apply 时,我收到错误 "This object has no argument, nested block, or exported attribute named "vpc_id"."
我试过使用 "data.terraform_remote_state.*.vpc_id" 以及“${}”语法。我尝试在 variables.tf 中为子模块和父模块定义 data.remote 信息。
我最终需要能够针对不同的 VPCs/subnets 动态调用此模块。
相关VPC已经存在,所有模块都已初始化。
s3 存储桶 stage/network/vpc/terraform.tfstate:
"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,并且子模块能够从那里配置变量。
这是 Terraform 0.12.X 版本引入的重大更改之一。
terraform_remote_state 数据源在 v0.12 版本中略有更改,使所有远程状态输出都可作为单个映射值使用,而不是作为与以前版本一样的顶级属性。
在以前的版本中,对远程状态数据源导出的 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
在第一个状态: .....
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}"
}