0

我正在迁移到最新版本的 Terraform,并且无法重现文档概述的内容,即如何从应用程序中获取输出。该文件指出

data.terraform_remote_state.vpc.vpc_id

因此,将这些从模块中取出应该具有以下效果

data.module_name.remote_state.vpc.vpc_id我会想?

这是我的模块调用

module "vpc" {
  source             = "github.com/terraform-aws-modules/terraform-aws-vpc"
  name               = "apigee"
  cidr               = "10.0.0.0/16"
  azs                = [data.aws_availability_zones.available.names[0], data.aws_availability_zones.available.names[1]]
  private_subnets    = ["10.0.1.0/24", "10.0.2.0/24"]
  public_subnets     = ["10.0.101.0/24", "10.0.102.0/24"]
  enable_nat_gateway = true
  single_nat_gateway = true

  tags = {
    Owner       = "212743998"
    Environment = "sandbox"
  }
}

所以我会假设....我应该做一些事情

data.vpc.terraform.vpc.vpc_id

这是我的目录的大纲,列出了状态文件

○ → tree
.
├── [gabel   45]  data.tf
├── [gabel  529]  modules.tf
├── [gabel  112]  outputs.tf
├── [gabel   41]  providers.tf
├── [gabel  36K]  terraform.tfstate
├── [gabel  157]  terraform.tfstate.backup
├── [gabel   21]  terraform.tfvars
└── [gabel  121]  variables.tf

但是......我也注意到他们在模块中调用 id 的方式,现在......现在我很困惑......

在 Terraform v0.12+ 中调用模块输出的正确方法是什么?

4

2 回答 2

1

是的,这行得通......但仍然没有回答我如何称呼没有来自模块源的明确输出的东西......

output "vpc_id" {
  description = "The ID of the VPC"
  value       = module.vpc.vpc_id
}

输出

terraform refresh
data.aws_availability_zones.available: Refreshing state...
module.vpc.aws_vpc.this[0]: Refreshing state... [id=vpc-xxxx
module.vpc.aws_eip.nat[0]: Refreshing state... [id=eipalloc-xxxx
module.vpc.aws_internet_gateway.this[0]: Refreshing state... [id=igw-xxxx
module.vpc.aws_route_table.public[0]: Refreshing state... [id=rtb-xxxx
module.vpc.aws_subnet.public[0]: Refreshing state... [id=subnet-xxxx
module.vpc.aws_subnet.private[0]: Refreshing state... [id=subnet-xxxx
module.vpc.aws_subnet.private[1]: Refreshing state... [id=subnet-xxxx
module.vpc.aws_subnet.public[1]: Refreshing state... [id=subnet-xxxx
module.vpc.aws_route_table.private[0]: Refreshing state... [id=rtb-xxxx
module.vpc.aws_route.public_internet_gateway[0]: Refreshing state... [id=r-xxxx
module.vpc.aws_route_table_association.private[0]: Refreshing state... [id=rtbassoc-xxxx
module.vpc.aws_route_table_association.private[1]: Refreshing state... [id=rtbassoc-xxxx
module.vpc.aws_route_table_association.public[1]: Refreshing state... [id=rtbassoc-xxxx
module.vpc.aws_route_table_association.public[0]: Refreshing state... [id=rtbassoc-xxxx
module.vpc.aws_nat_gateway.this[0]: Refreshing state... [id=nat-xxxx
module.vpc.aws_route.private_nat_gateway[0]: Refreshing state... [id=r-xxxx

Outputs:

vpc_id = vpc-xxxx

将这个答案留给未来的搜索者。

于 2019-07-27T04:05:00.473 回答
0

我不确定我的问题是否正确,因为模块和 remote_state 文件是不同的东西。

当您使用模块时,“父”或“调用者”或您想要调用的任何内容都会从 module.modulename. 中获取值,正如您所说的那样,在您的情况下,您可以直接从 module.vpc.vpc_id 中获取 vpc_id。

当您想从“远程数据源”获取变量的值时,您需要首先使用“输出”“发布”数据,然后您可以在 remote_state 文件中获得数据,在这种情况下,TF 更改了0.12.x 上的输出在新版本中,您需要将输出称为 data.terraform_remote_state.vpc.outputs.vpc_id

我相信文档没有反映这种变化。

于 2019-07-30T14:20:17.997 回答