我有数据源模块,我通过传递子网名称来提取子网 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: value = module.data.subnetid │ ├────────────── │ │ module .data 是一个对象 │ │ 该对象没有名为“subnetid”的属性。
您不需要将区域名称传递给模块,然后尝试基于该名称使用特定的提供程序,而是需要将提供程序本身传递到模块中(此处有记录):
然后完全删除
provider = "${var.region}"
数据模块代码内的行。我发现您的第一个问题:无效的提供程序配置参考在您的 data.tf 文件中,您尝试使用变量(“${var.region}”)动态设置提供程序
现在,第二个问题,问题 2:不正确的输出引用在 main.tf 中,输出“subnet_id”试图访问 module.data.subnetid,这不是有效的属性
现在修改,
数据模块中的输出(module/data/outputs.tf):您应该在数据模块目录(module/data/)中创建一个包含以下内容的outputs.tf文件
然后在 main.tf 中引用如下: