Не удается добраться до кластера сияний в публичных подсетях с ноутбука - PullRequest
0 голосов
/ 17 ноября 2018

Я настроил следующую terraform для предоставления кластера rds, но я не могу подключиться к нему со своего ноутбука. Кластер работает, потому что мои другие ресурсы в VPC могут нормально подключаться. Экземпляры также имеют общедоступные адреса.

При попытке подключения я получаю:

psql: не удалось подключиться к серверу: тайм-аут операции

  module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "${var.environment}-${var.app_name}-vpc"

  cidr = "10.0.0.0/16"

  azs                 = ["us-west-2a", "us-west-2b", "us-west-2c"]
  private_subnets     = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets      = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
  elasticache_subnets = ["10.0.31.0/24", "10.0.32.0/24"]

  enable_dns_hostnames   = true
  enable_dns_support     = true
  enable_nat_gateway     = true
  single_nat_gateway     = false
  one_nat_gateway_per_az = false

  tags = {
    Environment = "${var.environment}"
    Flow        = "${var.app_name}"
  }
}

resource "aws_db_subnet_group" "default" {
  name       = "${var.environment}-${var.app_name}-db-subnet"
  subnet_ids = ["${module.vpc.public_subnets}"]

  tags {
    Name = "DB Subnet Group"
  }
}

resource "aws_security_group" "db" {
  name        = "vpc_db"
  description = "Allow incoming database connections."
  vpc_id      = "${module.vpc.vpc_id}"

  ingress { # RDS cluster
    from_port       = 5432        
    to_port         = 5432
    protocol        = "tcp"
    security_groups = ["${aws_security_group.ecs_tasks.id}"]
  }

  ingress { # Open traffic
    from_port   = 5432              
    to_port     = 5432
    protocol    = "tcp"
    security_groups = ["${module.vpc.default_security_group_id}"]
  }

  egress {
    protocol    = "-1"
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_rds_cluster_instance" "cluster_instances" {
  count               = "2"
  identifier          = "${var.environment}-${var.app_name}-aurora-instance-${count.index}"
  cluster_identifier  = "${aws_rds_cluster.default.id}"
  instance_class      = "db.r4.large"
  engine              = "aurora-postgresql"
  publicly_accessible = true
}

resource "aws_rds_cluster" "default" {
  cluster_identifier           = "${var.environment}-${var.app_name}-aurora-cluster"
  availability_zones           = ["us-west-2a", "us-west-2b", "us-west-2c"]
  database_name                = "dbname"
  master_username              = "username"
  master_password              = "a password"
  engine                       = "aurora-postgresql"
  vpc_security_group_ids       = ["${aws_security_group.db.id}"]
  db_subnet_group_name         = "${aws_db_subnet_group.default.name}"
  skip_final_snapshot          = true
  preferred_maintenance_window = "Sun:03:00-Sun:06:00"
}

1 Ответ

0 голосов
/ 06 декабря 2018

В вашей группе безопасности, похоже, нет правила, разрешающего входящий трафик из вашей домашней сети или общедоступного Интернета. Вы можете добавить правило специально для вашего IP (может измениться при перезагрузке маршрутизатора) или для CIDR вашего провайдера, и это должно сработать. Самый простой способ проверить правильность настроек подключения - сделать что-то вроде этого:

telnet <db-endpoint> <db-port>

На этой ноте я очень рекомендую общаться по TLS, если вы решите это сделать. RDS уже поддерживает это через самозаверяющие сертификаты. Еще лучше было бы вообще не открывать свой БД для публики.

...