我有数据源模块,我通过传递子网名称来提取子网 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”的属性。
您不需要将区域名称传递给模块,然后尝试基于该名称使用特定的提供程序,而是需要将提供程序本身传递到模块中(记录在此处):
module "data" {
source = "./data"
providers = {
aws = aws.west
}
}
然后完全删除数据模块代码中的provider = "${var.region}"
行。