Моя цель — подключиться к базе данных RDS (Postgres) из модуля, работающего в кластере AWS EKS. Я использую Terraform для подготовки, но не обязательно ищу решение для кода Terraform.
Я создал базу данных (урезал настройки, такие как пароль, имя пользователя и т. д.), например:
resource "aws_db_instance" "rds-service" {
name = "serviceDB"
engine = "postgres"
db_subnet_group_name = aws_db_subnet_group.service_subnet_group.name
}
Затем создал группу безопасности, чтобы разрешить трафик
resource "aws_security_group" "db" {
name = "service-rds-access"
vpc_id = module.vpc.vpc_id
ingress {
description = "Postgres from VPC"
from_port = 5432
to_port = 5432
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
Который использует группу подсетей, которую я создал (обратите внимание, что RDS развертывается только в частных подсетях, и я использовал те же подсети, которые являются подмножеством подсетей, которые я использовал для развертывания моей службы в EKS)
resource "aws_db_subnet_group" "service_subnet_group" {
name = "service-subnet-group"
subnet_ids = [module.vpc.subnet_a_private_id, module.vpc.subnet_b_private_id]
}
При попытке подключения из модуля я не могу подключиться к RDS. Я также попытался установить оболочку в модуль и попытаться вручную подключиться к экземпляру RDS, например:
Запустив psql --version я получил: psql (PostgreSQL) 11.9, а затем, когда я попытался аутентифицироваться через psql вроде:
psql --host=$HOST_NAME --port=5432 --username=$USER_NAME --password --dbname=postgres
Я получил (редактирование мое):
psql: could not connect to server: Connection timed out
Is the server running on host "<hostname>.amazonaws.com" <IP> and accepting
TCP/IP connections on port 5432?





Вы можете использовать следующие параметры для поиска основной причины;
Примечание*: Для завершения этого анализа пути требуется несколько минут.
ИЛИ
Кроме того, проверьте журналы потоков VPC сетевых интерфейсов AWS lambda EC2 модулей и экземпляра БД RDS.
Благодаря подсказке от amitd у меня появилось больше информации об отладке проблемы. Я пропустил присоединение созданного мной vpc_security_group_ids к ресурсу RDS. Поэтому добавление vpc_security_group_ids = [aws_security_group.db.id] решило проблему для меня.