如何为 subnet_ids
属性提供多个值,如下所示?
resource "aws_subnet" "db_subnet" {
for_each = var.db_subnet_cidrs
vpc_id = aws_vpc.default.id
availability_zone = each.key
cidr_block = each.value
}
resource "aws_db_subnet_group" "default" {
name = "default-subnet-group"
subnet_ids = ["aws_subnet.db_subnet.*.id"]
tags = {
Name = "database-subnet-group"
}
}
子网已正确创建,但子网组未正确创建。当我应用
这个时,我收到以下错误:
Error: Error creating DB Subnet Group: InvalidParameterValue: Some input subnets in :[aws_subnet.db_subnet.*.id] are invalid.
status code: 400, request id: 0b68518f-e229-4f57-bf68-4ba46c1c75c2
最佳答案
您当前的代码正在尝试将数据库子网组的子网 ID 设置为等于 aws_subnet.db_subnet.*.id
的字符串文字,这显然不是有效的子网标识符。通常,Terraform 会警告您它与子网 ID 格式不匹配(例如 subnet-1234abcd
),但它看起来像 aws_db_subnet_group
resource doesn't currently validate this .
其次,您尝试使用 for_each
循环资源的输出的方式也行不通。如果您使用 count
循环您正在创建的子网,那么您将得到如下所示的内容:
resource "aws_subnet" "db_subnet" {
count = length(var.db_subnet_cidrs)
vpc_id = aws_vpc.default.id
availability_zone = count.index
cidr_block = var.db_subnet_cidrs[count.index]
}
resource "aws_db_subnet_group" "default" {
name = "default-subnet-group"
subnet_ids = aws_subnet.db_subnet.*.id
tags = {
Name = "database-subnet-group"
}
}
count
个循环资源有 splat operator输出已将所有输出作为列表,因此您可以将其直接传递到 aws_db_subnet_group
资源。
但是,如果您想使用 for_each
来循环,那么您当前需要使用稍微不同的语法来获取循环资源中的值:
resource "aws_subnet" "db_subnet" {
for_each = var.db_subnet_cidrs
vpc_id = aws_vpc.default.id
availability_zone = each.key
cidr_block = each.value
}
resource "aws_db_subnet_group" "default" {
name = "default-subnet-group"
subnet_ids = values(aws_subnet.db_subnet)[*].id
tags = {
Name = "database-subnet-group"
}
}
这将提取循环的 aws_subnet
资源的值,获取所有这些值,然后仅使用资源中的 id
属性。使用 splat 运算符再次创建一个列表,您可以将其直接传递到 aws_db_subnet
资源中的 subnet_ids
参数。
关于amazon-web-services - Terraform:如何提供使用一个资源 block 创建的资源的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097391/