Amazon web services 在应用之前无法确定数据源上的Terraform:length()?
我试图通过Amazon web services 在应用之前无法确定数据源上的Terraform:length()?,amazon-web-services,terraform,Amazon Web Services,Terraform,我试图通过aws\u subnet\u id数据源检索公共子网列表,动态声明多个aws\u nat\u gateway数据源。但是,当我尝试将count参数设置为等于子网ID的长度时,我得到一个错误,即count”值取决于资源属性,直到应用…后才能确定 这几乎与事实直接矛盾!。我该如何解决这个问题?他们的文件有错吗 我正在使用Terraform v0.12 data "aws_vpc" "environment_vpc" { id = var.vpc_id } data "aws_subn
aws\u subnet\u id
数据源检索公共子网列表,动态声明多个aws\u nat\u gateway
数据源。但是,当我尝试将count
参数设置为等于子网ID的长度时,我得到一个错误,即count”值取决于资源属性,直到应用…
后才能确定
这几乎与事实直接矛盾!。我该如何解决这个问题?他们的文件有错吗
我正在使用Terraform v0.12
data "aws_vpc" "environment_vpc" {
id = var.vpc_id
}
data "aws_subnet_ids" "public_subnet_ids" {
vpc_id = data.aws_vpc.environment_vpc.id
tags = {
Tier = "public"
}
depends_on = [data.aws_vpc.environment_vpc]
}
data "aws_nat_gateway" "nat_gateway" {
count = length(data.aws_subnet_ids.public_subnet_ids.ids) # <= Error
subnet_id = data.aws_subnet_ids.public_subnet_ids.ids.*[count.index]
depends_on = [data.aws_subnet_ids.public_subnet_ids]
}
您似乎正在尝试获取尚未创建或无法确定的子网,terraform cmd输出建议您添加-target标志以创建VPC和子网,或者先执行另一项任务,然后应用nat_网关资源。我建议您使用AZs列表而不是子网ID,我将在下面添加一个简单的示例
variable "vpc_azs_list" {
default = [
"us-east-1d",
"us-east-1e"
]
}
resource "aws_nat_gateway" "nat" {
count = var.enable_nat_gateways ? length(var.azs_list) : 0
allocation_id = "xxxxxxxxx"
subnet_id = "xxxxxxxxx"
depends_on = [
aws_internet_gateway.main,
aws_eip.nat_eip,
]
tags = {
"Name" = "nat-gateway-name"
"costCenter" = "xxxxxxxxx"
"owner" = "xxxxxxxxx"
}
}
我希望对您和其他用户有用。您执行的是什么命令导致此错误?
terraform apply
variable "vpc_azs_list" {
default = [
"us-east-1d",
"us-east-1e"
]
}
resource "aws_nat_gateway" "nat" {
count = var.enable_nat_gateways ? length(var.azs_list) : 0
allocation_id = "xxxxxxxxx"
subnet_id = "xxxxxxxxx"
depends_on = [
aws_internet_gateway.main,
aws_eip.nat_eip,
]
tags = {
"Name" = "nat-gateway-name"
"costCenter" = "xxxxxxxxx"
"owner" = "xxxxxxxxx"
}
}