#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 с несколькими правилами входа. Правила входа будут указывать другие разрешенные группы безопасности.