首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模块时无法从terraform.tfstate读取

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

Stack Overflow用户
提问于 2019-08-15 01:10:51
回答 1查看 375关注 0票数 1

我使用的是Terraform v0.12.6。我正在使用模块创建私有网络、子网和EC2实例。

代码语言:javascript
复制
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”属性值不合适: string required。

看起来我得读取terraform.tfstate文件了。

这是我现在的代码-

root.tf

代码语言:javascript
复制
    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

代码语言:javascript
复制
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位于同一目录中

感谢任何人的帮助。或者这是一个bug?

EN

回答 1

Stack Overflow用户

发布于 2019-08-15 06:16:06

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

代码语言:javascript
复制
subnet_id = 
    "${data.terraform_remote_state.public_subnet.outputs.subnet_id[0]}"
    } 

Should be

subnet_id = 
    "${module.public_subnets.subnet.id}"
    }

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

代码语言:javascript
复制
output "subnet" {
  value = "${aws_subnet.some_subnet.id}"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57499201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档