Terraform - БД и группа безопасности находятся в разных VPC - PullRequest
2 голосов
/ 16 июня 2019

Что я пытаюсь достичь:

Создайте кластер RDS Aurora и поместите его в тот же VPC, что и экземпляры EC2, которые я запускаю, чтобы они могли общаться. Я пытаюсь запустить SG с именем "RDS_DB_SG" и сделать его частью VPC, который я создаю в процессе. Я также создаю SG с именем "BE_SG" и делаю его частью того же VPC. Я делаю это, чтобы я мог получить доступ между 2 (RDS и BE сервер).

Что я сделал до сих пор:

Создал код .tf и все запустил.

Что я получил:

Все нормально, если я не включаю кластер RDS в SG RDS - RDS создает свой собственный VPC. Когда я включаю RDS в SG, который я хочу для него, кластер RDS не может запуститься и получить ошибку.

Ошибка, которую я получил:

"Экземпляр БД и группа безопасности EC2 находятся в разных VPC. Экземпляр БД находится в vpc-5a *** 63c, а группа безопасности EC2 находится в vpc-0e5391 ***** 273b3d"

Обходной путь на данный момент:

Я запустил инфраструктуру без указания VPC для RDS. Он создал свой собственный VPC по умолчанию. Затем я создал ручной пиринг VPC между VPC, который был создан для EC2, и VPC, который был создан для RDS. Но я хочу, чтобы они были в одном и том же VPC, поэтому мне не нужно будет создавать руководство по пирингу VPC.

Мой .tf код:

variable "vpc_cidr" {
  description = "CIDR for the VPC"
  default = "10.0.0.0/16"
}

resource "aws_vpc" "vpc" {
  cidr_block = "${var.vpc_cidr}"
  tags = {
    Name = "${var.env}_vpc"
  }
}

resource "aws_subnet" "vpc_subnet" {
  vpc_id = "${aws_vpc.vpc.id}"
  cidr_block = "${var.vpc_cidr}"
  availability_zone = "eu-west-1a"

  tags = {
    Name = "${var.env}_vpc"
  }
}

resource "aws_db_subnet_group" "subnet_group" {
  name        = "${var.env}-subnet-group"
  subnet_ids  = ["${aws_subnet.vpc_subnet.id}"]
}

resource "aws_security_group" "RDS_DB_SG" {
    name = "${var.env}-rds-sg"
    vpc_id = "${aws_vpc.vpc.id}"
    ingress {
        from_port = 3396
        to_port = 3396
        protocol = "tcp"
        security_groups = ["${aws_security_group.BE_SG.id}"]
    }
}

resource "aws_security_group" "BE_SG" {
    name = "${var.env}_BE_SG"
    vpc_id = "${aws_vpc.vpc.id}"

    ingress {
        from_port = 80
        to_port = 80
        protocol = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }
}

resource "aws_instance" "BE" {
    ami = "ami-*********************"
    instance_type = "t2.large"
    associate_public_ip_address = true
    key_name = "**********"
    tags = {
        Name = "WEB-${var.env}"
        Porpuse = "Launched by Terraform"
        ENV = "${var.env}"
    }

    subnet_id = "${aws_subnet.vpc_subnet.id}"
    vpc_security_group_ids = ["${aws_security_group.BE_SG.id}", "${aws_security_group.ssh.id}"]
}

resource "aws_rds_cluster" "rds-cluster" {
    cluster_identifier = "${var.env}-cluster"
    database_name = "${var.env}-rds"
    master_username = "${var.env}"
    master_password = "PASSWORD"
    backup_retention_period = 5
    vpc_security_group_ids = ["${aws_security_group.RDS_DB_SG.id}"]
}

resource "aws_rds_cluster_instance" "rds-instance" {
    count = 1
    cluster_identifier = "${aws_rds_cluster.rds-cluster.id}"
    instance_class = "db.r4.large"
    engine_version = "5.7.12"
    engine = "aurora-mysql"
    preferred_backup_window = "04:00-22:00"
}

Любые предложения о том, как достичь моей первой цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...