即使子网位于不同的可用区,也无法创建 RDS 实例
Unable to create RDS instance even though subnets are in different Availability Zones
Terraform 代码在这里:
resource "aws_rds_cluster" "tf-aws-rds-1" {
cluster_identifier = "aurora-cluster-1"
engine = "aurora-mysql"
engine_version = "5.7.mysql_aurora.2.03.2"
availability_zones = ["us-east-1a","us-east-1b","us-east-1c"]
database_name = "cupday"
master_username = "administrator"
master_password = var.password
backup_retention_period = 5
preferred_backup_window = "07:00-09:00"
storage_encrypted = true
kms_key_id = data.aws_kms_key.rds_key.arn
}
但是,当我执行 运行 terraform apply 时,我收到以下错误消息:
aws_rds_cluster.tf-aws-rds-1: Creating...
Error: error creating RDS cluster: InvalidVPCNetworkStateFault: DB Subnet Group doesn't meet availability zone coverage requirement. Please add subnets to cover at least 2 availability zones. Current coverage: 0
status code: 400, request id: bc05fb5f-311c-4d15-821a-8b97fc27ab5b
但是,我确实在多个 AZ 中有子网,截图如下:
知道问题是什么以及如何解决吗?
P.S: 子网创建如下
resource "aws_subnet" "tf-aws-sn" {
count = var.subnet_count
vpc_id = aws_vpc.tf-aws-vn.id
cidr_block = data.template_file.public_cidrsubnet[count.index].rendered
availability_zone = slice(data.aws_availability_zones.available.names, 0, var.subnet_count)[count.index]
tags = local.common_tags
}
我得到的可用区如下:
data "aws_availability_zones" "available" {}
我在你的代码中没有看到对 aws_db_subnet_group 的引用,所以我猜想使用的默认子网组不符合此约束。您可以创建自己的 aws_db_subnet_group
:
resource "aws_db_subnet_group" "db_subnets" {
name = "main"
subnet_ids = aws_subnet.tf-aws-sn[*].id
tags = {
Name = "My DB subnet group"
}
}
然后使用它(在这种情况下不需要availability_zones
)
resource "aws_rds_cluster" "tf-aws-rds-1" {
cluster_identifier = "aurora-cluster-1"
engine = "aurora-mysql"
engine_version = "5.7.mysql_aurora.2.03.2"
db_subnet_group_name = aws_db_subnet_group.db_subnets.name
database_name = "cupday"
master_username = "administrator"
master_password = var.password
backup_retention_period = 5
preferred_backup_window = "07:00-09:00"
storage_encrypted = true
kms_key_id = data.aws_kms_key.rds_key.arn
}
Terraform 代码在这里:
resource "aws_rds_cluster" "tf-aws-rds-1" {
cluster_identifier = "aurora-cluster-1"
engine = "aurora-mysql"
engine_version = "5.7.mysql_aurora.2.03.2"
availability_zones = ["us-east-1a","us-east-1b","us-east-1c"]
database_name = "cupday"
master_username = "administrator"
master_password = var.password
backup_retention_period = 5
preferred_backup_window = "07:00-09:00"
storage_encrypted = true
kms_key_id = data.aws_kms_key.rds_key.arn
}
但是,当我执行 运行 terraform apply 时,我收到以下错误消息:
aws_rds_cluster.tf-aws-rds-1: Creating...
Error: error creating RDS cluster: InvalidVPCNetworkStateFault: DB Subnet Group doesn't meet availability zone coverage requirement. Please add subnets to cover at least 2 availability zones. Current coverage: 0
status code: 400, request id: bc05fb5f-311c-4d15-821a-8b97fc27ab5b
但是,我确实在多个 AZ 中有子网,截图如下:
知道问题是什么以及如何解决吗? P.S: 子网创建如下
resource "aws_subnet" "tf-aws-sn" {
count = var.subnet_count
vpc_id = aws_vpc.tf-aws-vn.id
cidr_block = data.template_file.public_cidrsubnet[count.index].rendered
availability_zone = slice(data.aws_availability_zones.available.names, 0, var.subnet_count)[count.index]
tags = local.common_tags
}
我得到的可用区如下:
data "aws_availability_zones" "available" {}
我在你的代码中没有看到对 aws_db_subnet_group 的引用,所以我猜想使用的默认子网组不符合此约束。您可以创建自己的 aws_db_subnet_group
:
resource "aws_db_subnet_group" "db_subnets" {
name = "main"
subnet_ids = aws_subnet.tf-aws-sn[*].id
tags = {
Name = "My DB subnet group"
}
}
然后使用它(在这种情况下不需要availability_zones
)
resource "aws_rds_cluster" "tf-aws-rds-1" {
cluster_identifier = "aurora-cluster-1"
engine = "aurora-mysql"
engine_version = "5.7.mysql_aurora.2.03.2"
db_subnet_group_name = aws_db_subnet_group.db_subnets.name
database_name = "cupday"
master_username = "administrator"
master_password = var.password
backup_retention_period = 5
preferred_backup_window = "07:00-09:00"
storage_encrypted = true
kms_key_id = data.aws_kms_key.rds_key.arn
}