需要根据地区从数据源中提取子网id

问题描述 投票:0回答:1

我有数据源模块,我通过传递子网名称来提取子网 ID。

文件位于数据模块中:

模块/数据/data.tf

data "aws_vpc" "vpc-id" {
  provider = "${var.region}"
  filter {
    name   = "tag:Name"
    values = ["kdt-vpc"]
  }

}

data "aws_subnet" "subnetid" {
  provider = "${var.region}"
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.vpc-id.id]
  }

  filter {
    name   = "tag:Name"
    values = ["kdt-private-subnet-0"]
  }
}

变量.tf

variable "region" {
  description = "vpc name"
  type        = string
  default     = "aws.west"
}

main.tf,我在其中调用数据模块。

module "data" {
    source  =   "./data"
    region = "aws.west"
}


output "subnet_id" {
    value = module.data.subnetid
}

提供商.tf

terraform {
    required_providers {
        aws = {
            source = "hashicorp/aws"
            #version = "~> 3.0"
            #configuration_aliases = [ aws.alternate ]
        }
    }
}

provider "aws" {
  region = "us-east-1" 

}

provider "aws" {
  alias  = "west"
  region = "us-east-2"

}

运行 terraform apply 时出现以下错误

错误:提供程序配置参考无效 │ │ 在 data\data.tf 第 2 行,数据“aws_vpc”“vpc-id”中: │ 2: 提供者 = "${var.region}" │ │ 提供程序参数需要一个提供程序类型名称,可以选择后跟一个句点,然后是一个 │ 配置别名。 ╵ ╷ │ 错误:无效的提供程序配置参考 │ │ 在 data\data.tf 第 11 行,数据“aws_subnet”“subnetid”中: │ 11: 提供者 = "${var.region}" │ │ 提供程序参数需要一个提供程序类型名称,可以选择后跟一个句点,然后是一个
│ 配置别名。 ╵

错误:不支持的属性 │ │ 在 main.tf 第 18 行,输出“subnet_id”中: │ 18: 值 = module.data.subnetid │ ├──────────────── │ │ module.data 是一个对象 │ │ 该对象没有名为“subnetid”的属性。

terraform output datasource subnet vpc
1个回答
0
投票

您不需要将区域名称传递给模块,然后尝试基于该名称使用特定的提供程序,而是需要将提供程序本身传递到模块中(记录在此处):

module "data" { source = "./data" providers = { aws = aws.west } }
然后完全删除数据模块代码中的

provider = "${var.region}"

行。

© www.soinside.com 2019 - 2024. All rights reserved.