即使子网位于不同的可用区,也无法创建 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
}