代码之家  ›  专栏  ›  技术社区  ›  katkuri Dharmarao

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

  •  1
  • katkuri Dharmarao  · 技术社区  · 2 年前

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

    文件位于数据模块中:

    模块/数据/数据.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"
    
    }
    

    在运行地形应用程序时,我收到以下错误

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

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

    2 回复  |  直到 2 年前
        1
  •  0
  •   Mark B    2 年前

    您不需要将区域名称传递给模块,然后尝试在此基础上使用特定的提供程序,而是需要将提供程序本身传递给模块(文档 here ):

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

    然后完全移除 provider = "${var.region}" 数据模块代码内的行。

        2
  •  0
  •   Adesoji Alu    2 年前

    您的第一个问题1我认为:无效的提供商配置参考 在data.tf文件中,您试图使用变量(“${var.region}”)动态设置提供程序

    现在,第二期,第2期:错误的输出参考 在main.tf中,输出“subnet_id”试图访问module.data.subnetid,这不是有效的属性

    现在修改,

    data "aws_vpc" "vpc-id" {
      provider = aws.west  # Use the provider alias directly
    
      filter {
        name   = "tag:Name"
        values = ["kdt-vpc"]
      }
    }
    
    data "aws_subnet" "subnetid" {
      provider = aws.west  # Use the provider alias directly
    
      filter {
        name   = "vpc-id"
        values = [data.aws_vpc.vpc-id.id]
      }
    
      filter {
        name   = "tag:Name"
        values = ["kdt-private-subnet-0"]
      }
    }
    

    数据模块中的输出(Module/Data/outputs.tf): 您应该在数据模块目录(module/data/)中创建一个outputs.tf文件,其中包含以下内容

    output "subnet_id" {
      value = data.aws_subnet.subnetid.id
    }
    
    
    

    然后参考以下main.tf中的内容:

    module "data" {
      source = "./data"
      # Pass any necessary variables to the module
    }
    
    output "subnet_id" {
      value = module.data.subnet_id
    }
    
    
    推荐文章