Недопустимая комбинация параметров: Экземпляр БД и группа безопасности EC2 находятся в разных VPC

#amazon-web-services #terraform #amazon-rds

Вопрос:

У меня есть два VPC. Один из них-синий vpc (vpc_id = vpc-0067ff2ab41cc8a3e), другой-общий VPC (vpc_id = vpc-076a4c26ec2217f9d). Пиринг VPC соединяет эти два VPC. Я предоставляю MariaDB в общем VPC. Но у меня есть ошибки ниже.

Ошибка: Ошибка при создании экземпляра БД: Недопустимый параметр Комбинация: Экземпляр БД и группа безопасности EC2 находятся в разных VPC. Экземпляр БД находится в vpc-076a4c26ec2217f9d, а группа безопасности EC2-в vpc-0067ff2ab41cc8a3e код состояния: 400, идентификатор запроса: 75954d06-375c-4680-b8fe-df9a67f2574d

Ниже приведен код. Кто-нибудь может помочь?

 module "master" {
  source = "terraform-aws-modules/rds/aws"
  version = "2.20.0"
  identifier = var.master_identifier
  engine            = var.engine
  engine_version    = var.engine_version
  instance_class    = var.instance_class
  allocated_storage = var.allocated_storage
  storage_type      = var.storage_type
  storage_encrypted = var.storage_encrypted
  name     = var.mariadb_name
  username = var.mariadb_username
  password = var.mariadb_password
  port     = var.mariadb_port
  vpc_security_group_ids = [data.terraform_remote_state.vpc-shared.outputs.default_security_group_id,
                            data.terraform_remote_state.vpc-blue.outputs.default_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.worker_group_general_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.worker_group_gitea_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.all_workers_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.cluster_security_group_id]
  maintenance_window = var.maintenance_window_master
  backup_window      = var.backup_window_master
  multi_az = true
  tags = {
    Owner       = "MariaDB"
    Environment = "blue-green"
  }
  enabled_cloudwatch_logs_exports = ["audit", "general"]
  subnet_ids = data.terraform_remote_state.vpc-shared.outputs.database_subnets
  create_db_option_group = true
  apply_immediately = true
  family = var.family
  major_engine_version = var.major_engine_version
  final_snapshot_identifier = var.final_snapshot_identifier
  deletion_protection = false
  parameters = [
    {
      name  = "character_set_client"
      value = "utf8"
    },
    {
      name  = "character_set_server"
      value = "utf8"
    }
  ]
  options = [
    {
      option_name = "MARIADB_AUDIT_PLUGIN"
      option_settings = [
        {
          name  = "SERVER_AUDIT_EVENTS"
          value = "CONNECT"
        },
        {
          name  = "SERVER_AUDIT_FILE_ROTATIONS"
          value = "7"
        },
      ]
    },
  ]
}

module "replica" {
  source = "terraform-aws-modules/rds/aws"
  version = "2.20.0"
  identifier = var.replica_identifier
  replicate_source_db = module.master.this_db_instance_id
  engine            = var.engine
  engine_version    = var.engine_version
  instance_class    = var.instance_class
  allocated_storage = var.allocated_storage
  username = ""
  password = ""
  port     = var.mariadb_port
  vpc_security_group_ids = [data.terraform_remote_state.vpc-shared.outputs.default_security_group_id,
                            data.terraform_remote_state.vpc-blue.outputs.default_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.worker_group_general_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.worker_group_gitea_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.all_workers_security_group_id,
                            data.terraform_remote_state.eks-blue.outputs.cluster_security_group_id]

  maintenance_window = var.maintenance_window_replica
  backup_window      = var.backup_window_replica
  multi_az = false
  backup_retention_period = 0
  create_db_subnet_group = false
  create_db_option_group    = false
  create_db_parameter_group = false
  major_engine_version = var.major_engine_version
}
 

Комментарии:

1. Ошибка объясняется сама собой. Некоторые группы безопасности не относятся к VPC, в котором находится rds. Так что удалите посторонние предметы из vpc_security_group_ids .

2. У меня есть EKS, развернутый в blue VPC. Я предоставляю MariaDB в общем VPC. Пиринг VPC соединяет эти два VPC. EKS должен получить доступ к MariaDB на общем VPC. Я подготовил redis и elasticsearch таким же образом. В этом нет никаких проблем. Но это не относится к MariaDB.

3. Другими словами, я хотел бы получить доступ к MariaDB, который был предоставлен в общем VPC из blue VPC. Как это сделать?

Ответ №1:

Обычно то, что вам следует сделать, — это получить vpc_security_group_ids от VPC, где находится ваш RDS. В вашем случае это будет общий vpc:

 vpc_security_group_ids = [data.terraform_remote_state.vpc-shared.outputs.default_security_group_id]
 

Имея этот SG, вы бы добавили в него правила, разрешающие входящий трафик из других групп безопасности. Таким образом, в принципе, у вашего RDS будет один SG с несколькими правилами входа. Правила входа будут указывать другие разрешенные группы безопасности.