首页 文章

使用terraform在非默认VPC中创建AWS RDS实例

提问于
浏览
0

我正在使用Terraform v0.10.2 . 我在modules / vpc / main.tf和modules / acl / main.tf中创建了VPC . 我正在使用它的输出访问它 .

我可以在上面的vpc中成功创建公共子网中的ec2实例,如下所示:

subnet_id = "${element(module.vpc.public_subnet_ids, count.index)}"

我想将RDS实例添加到私有子网 . 我尝试了terraform doc说的话:

vpc_security_group_ids    = [
  "${aws_security_group.db_access_sg.id}"
]
db_subnet_group_name = "${module.vpc.aws_db_subnet_group_database}"

但是,它正在添加到默认的VPC . 如果我将子网放在模块外部并访问资源,它会给出变量not found错误 .

我已经提到了许多GitHub示例,但没有成功 . 我错过了什么吗?

这是我提到的链接之一:https://github.com/hashicorp/terraform/issues/13739

Contents of modules/vpc/main.tf

resource "aws_vpc" "mod" {
  cidr_block = "${var.cidr}"

  tags {
    Name = "${var.name}"
  }
}

resource "aws_internet_gateway" "mod" {
  vpc_id = "${aws_vpc.mod.id}"
}

resource "aws_route_table" "public" {
  vpc_id           = "${aws_vpc.mod.id}"
  propagating_vgws = ["${compact(split(",", var.public_propagating_vgws))}"]

  tags {
    Name = "${var.name}-public"
  }
}

resource "aws_route" "public_internet_gateway" {
  route_table_id         = "${aws_route_table.public.id}"
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = "${aws_internet_gateway.mod.id}"
}

resource "aws_route_table" "private" {
  vpc_id           = "${aws_vpc.mod.id}"
  propagating_vgws = ["${compact(split(",", var.private_propagating_vgws))}"]

  tags {
    Name = "${var.name}-private"
  }
}

resource "aws_subnet" "private" {
  vpc_id            = "${aws_vpc.mod.id}"
  cidr_block        = "${element(split(",", var.private_subnets), count.index)}"
  availability_zone = "${element(split(",", var.azs), count.index)}"
  count             = "${length(compact(split(",", var.private_subnets)))}"

  tags {
    Name = "${var.name}-private"
  }
}

resource "aws_subnet" "public" {
  vpc_id            = "${aws_vpc.mod.id}"
  cidr_block        = "${element(split(",", var.public_subnets), count.index)}"
  availability_zone = "${element(split(",", var.azs), count.index)}"
  count             = "${length(compact(split(",", var.public_subnets)))}"

  tags {
    Name = "${var.name}-public"
  }

  map_public_ip_on_launch = true
}

resource "aws_db_subnet_group" "database" {
  name         = "${var.name}-rds-subnet-group-${count.index}"
  description  = "Database subnet groups for ${var.name}"
  subnet_ids   = ["${aws_subnet.private.*.id}"]
  #tags        = "${merge(var.tags, map("Name", format("%s-database-subnet-group", var.name)))}"
  count        = "${length(compact(split(",", var.private_subnets)))}"
}

resource "aws_route_table_association" "private" {
  count          = "${length(compact(split(",", var.private_subnets)))}"
  subnet_id      = "${element(aws_subnet.private.*.id, count.index)}"
  route_table_id = "${aws_route_table.private.id}"
}

resource "aws_route_table_association" "public" {
  count          = "${length(compact(split(",", var.public_subnets)))}"
  subnet_id      = "${element(aws_subnet.public.*.id, count.index)}"
  route_table_id = "${aws_route_table.public.id}"
}

Contents of modules/vpc/outputs.tf

output "vpc_id" {
  value = "${aws_vpc.mod.id}"
}

output "public_subnet_ids" {
  value = ["${aws_subnet.public.*.id}"]
}

output "private_subnet_ids" {
  value = ["${aws_subnet.private.*.id}"]
}

output "aws_db_subnet_group_database" {
  value = "${aws_db_subnet_group.database.name}"
}

Contents of modules/acl/main.tf

resource "aws_network_acl" "private_app_subnets" {
  vpc_id = "${var.vpc_id}"

  subnet_ids = ["${var.private_subnet_ids}"]
}

1 回答

  • 1

    问题是,我在尝试将RDS实例添加到私有子网时启用了“Publicly Accessible” . 我不得不从aws_db_subnet_group中删除计数,就像ydaetskcoR告诉我的那样 .

相关问题