使用模块时无法从 terraform.tfstate 读取



我正在使用Terraform v0.12.6。我正在使用模块创建 VPC、子网和 EC2 实例。

root.tf 
vpc.tf
pub_subnet.tf
web_server.tf 

vpc.tf 和 pub_subnet.tf 工作正常并显示所需的输出。但是,我无法使用模块 pub_subnet.tf 中的subnet_id作为我的 web_server.tf 的输入。

原因是它是一个列表,我得到属性"subnet_id"的不适当值:需要字符串。

看起来我必须阅读 terraform.tfstate 文件。

这是我现在的代码 -

root.tf

provider "aws" {
region = "us-east-1"
}
data "terraform_remote_state" "public_subnet" {
backend = "local"
config = {
path = "terraform.tfstate"
}
}
module "my_vpc" {
source = "../modules/vpc_flowlogs"
vpc_cidr = "10.0.0.0/16"
# vpc_id  = "${module.my_vpc.vpc_id}"
}
module "vpc_igw" {
source = "../modules/vpc_igw"  
vpc_id  = "${module.my_vpc.vpc_id}"
}
module "public_subnets" {
source="../modules/pub_subnets"
vpc_id  = "${module.my_vpc.vpc_id}"
}
module "web_servers" {
source = "../modules/webservers"
vpc_id  = "${module.my_vpc.vpc_id}"
subnet_id = 
"${data.terraform_remote_state.public_subnet.outputs.subnet_id[0]}"
} 

web_servers.tf

resource "aws_instance" "web-srvs" {
count="${var.instance_count == "0" ? "1" : var.instance_count}"
ami = "ami-035b3c7efe6d061d5"
instance_type = "t2.nano"
key_name="xxx-dev"
subnet_id = "${var.subnet_id}"
vpc_security_group_ids = ["${aws_security_group.pub_sg.id}"]
associate_public_ip_address=true
}

我正在尝试使用创建的两个subnet_ids。 我尝试了不同的方法,但现在没有想法了。 仅供参考,我的 tfstate 文件与 root.tf 位于同一目录中

感谢任何帮助。或者这是一个错误?

您无缘无故地请求远程状态。远程状态用于引用其他配置的输出。你有模块,所以你应该只更改它来引用模块资源,但你必须输出模块中的值,以便你可以在其他地方引用它。

subnet_id = 
"${data.terraform_remote_state.public_subnet.outputs.subnet_id[0]}"
} 
Should be
subnet_id = 
"${module.public_subnets.subnet.id}"
}

在子网模块中,创建输出资源。

output "subnet" {
value = "${aws_subnet.some_subnet.id}"
}

最新更新