Amazon web services 使用terraform创建时无法访问RDS

Amazon web services 使用terraform创建时无法访问RDS,amazon-web-services,terraform,amazon-rds,terraform-provider-aws,Amazon Web Services,Terraform,Amazon Rds,Terraform Provider Aws,我一直在尝试使用terraform创建RDS实例。我一直在努力解决的问题是,每次我创建新实例时,都无法访问它。 我在包含公共和私有子网的子网组中创建它,安全组有允许从我的IP访问的规则,这个vpc中有internet网关。 最奇怪的是,为了解决这个问题,我只需要将使用AWS控制台的实例类更改为任何其他类,例如从db.t2.small更改为db.t2.micro,然后它突然开始工作。 下面是我的代码片段: resource "aws_db_subnet_group" "dbSubnetGroup"

我一直在尝试使用terraform创建RDS实例。我一直在努力解决的问题是,每次我创建新实例时,都无法访问它。 我在包含公共和私有子网的子网组中创建它,安全组有允许从我的IP访问的规则,这个vpc中有internet网关。 最奇怪的是,为了解决这个问题,我只需要将使用AWS控制台的实例类更改为任何其他类,例如从db.t2.small更改为db.t2.micro,然后它突然开始工作。 下面是我的代码片段:

resource "aws_db_subnet_group" "dbSubnetGroup" {
  name       = "${var.prefix}-db-subnet-group"
  subnet_ids = concat(aws_subnet.publicSubnet.*.id, aws_subnet.privateSubnet.*.id)

  tags = var.defaultTags
}

resource "aws_security_group" "rdsSecurityGroup" {
  name   = "${var.prefix}-rds-sg"
  vpc_id = aws_vpc.vpc.id

  ingress {
    from_port       = 1433
    to_port         = 1433
    protocol        = "tcp"
    security_groups = [aws_eks_cluster.eksCluster.vpc_config[0].cluster_security_group_id]
  }
  ingress {
    from_port        = 1433
    to_port          = 1433
    protocol         = "tcp"
    cidr_blocks      = [var.myIP]
  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
  tags = var.defaultTags
}

resource "random_password" "rdsPassword" {
  length           = 32
  special          = true
  override_special = "!#$%&*()-_=+[]{}<>:?"
}

resource "aws_db_instance" "dbInstance" {
  allocated_storage               = 20
  storage_type                    = "gp2"
  engine                          = var.dbInstanceEngine
  license_model                   = "license-included"
  instance_class                  = var.dbInstanceType
  identifier                      = "${var.prefix}-db-instance"
  username                        = var.dbUserName
  password                        = random_password.rdsPassword.result
  tags                            = var.defaultTags
  db_subnet_group_name            = aws_db_subnet_group.dbSubnetGroup.name
  vpc_security_group_ids          = [aws_security_group.rdsSecurityGroup.id]
  skip_final_snapshot             = true
  allow_major_version_upgrade     = true
  copy_tags_to_snapshot           = true
  performance_insights_enabled    = true
  max_allocated_storage           = 1000
  enabled_cloudwatch_logs_exports = ["error"]
  publicly_accessible             = true
}
资源“aws\u db\u子网\u组”“dbSubnetGroup”{
name=“${var.prefix}-db子网组”
subnet_id=concat(aws_subnet.publicSubnet.*.id,aws_subnet.privateSubnet.*.id)
tags=var.defaultTags
}
资源“aws安全组”“rdsSecurityGroup”{
name=“${var.prefix}-rds sg”
vpc_id=aws_vpc.vpc.id
入口{
从_端口=1433
至_端口=1433
协议=“tcp”
安全组=[aws_eks_cluster.eksCluster.vpc_config[0]。群集安全组id]
}
入口{
从_端口=1433
至_端口=1433
协议=“tcp”
cidr_块=[var.myIP]
}
出口{
从_端口=0
至_端口=0
协议=“-1”
cidr_块=[“0.0.0.0/0”]
ipv6_cidr_块=[“::/0”]
}
tags=var.defaultTags
}
资源“随机密码”“rdsPassword”{
长度=32
特殊=真实
override#special=“!#$%&*()-#=+[]{}:?”
}
资源“aws\u db\u实例”“dbInstance”{
已分配存储=20
存储类型=“gp2”
engine=var.dbInstanceEngine
许可证\u model=“包括许可证”
instance_class=var.dbInstanceType
标识符=“${var.prefix}-db实例”
username=var.dbUserName
password=random_password.rdsPassword.result
tags=var.defaultTags
db\u subnet\u group\u name=aws\u db\u subnet\u group.dbSubnetGroup.name
vpc_security_group_id=[aws_security_group.rdsSecurityGroup.id]
跳过\u最终\u快照=真
允许主要版本升级=真
将\u标记\u复制到\u快照=真
性能\洞察\启用=真
最大分配存储空间=1000
已启用的\u cloudwatch\u日志\u导出=[“错误”]
可公开访问=真
}

我是否做错了什么,或者可能是aws provider中的错误?

如果您希望RDS可连接,则DB子网组必须仅位于公共子网中

我想知道,因为您的子网组中混合了公共子网和专用子网,可能RDS会为您选择专用子网。那么当您更改db实例时,它会选择公共子网吗?您观察到选择了哪些子网了吗?我将尝试仅使用public创建db,但它始终有效,当我从aws控制台创建实例或更改实例类型时,并且在使用TerraForm创建实例后,从未使用TerraForm创建过实例,那么为什么我可以在更改实例类后连接,而不更改任何其他内容?如果它位于公用子网和专用子网中,您可能只是点击了公共子网中的节点,公共子网帮助