Terraform-数据库和安全组位于不同的VPC

时间:2019-06-16 09:06:36

标签: amazon-web-services terraform rds terraform-provider-aws aurora

我要达到的目标:

创建并RDS Aurora集群并将其放置在与我启动的EC2实例相同的VPC中,以便它们进行通信。 我正在尝试启动一个名为“ RDS_DB_SG”的SG,并将其作为我在此过程中创建的VPC的一部分。 我还创建了一个名为“ BE_SG”的SG,并将其作为同一VPC的一部分。 我这样做是为了可以在2(RDS和BE服务器)之间进行访问。

我到目前为止所做的:

创建一个.tf代码并启动所有内容。

我得到了什么:

如果我不将RDS群集包含在RDS SG中,则开始正常-RDS创建它自己的VPC。 当我将RDS包括在我想要给他的SG中时,RDS群集无法启动并出现错误。

我得到的错误:

“数据库实例和EC2安全组位于不同的VPC中。数据库实例位于vpc-5a *** 63c中,而EC2安全组位于vpc-0e5391 ***** 273b3d中” strong>

目前的解决方法:

我在没有为RDS指定VPC的情况下启动了基础架构。它创建了自己的默认VPC。 然后,我在为EC2创建的VPC和为RDS创建的VPC之间创建了手动VPC对等。 但是我希望它们位于同一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"
}

关于如何实现我的第一个目标的任何建议?

0 个答案:

没有答案