2017-08-30 13 views
0

Terraform v0.10.2を使用しています。私は modules/vpc/main.tf modules/acl/main.tfにVPCを作成しました。私はそれを使ってアクセスしています。terraformを使用してデフォルト以外のVPCでAWS RDSインスタンスを作成する

私は成功しそうのような上記のVPCでパブリックサブネット内のEC2インスタンスを作成することができます。

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

私はプライベートサブネットにRDSインスタンスを追加します。それはデフォルトのVPCに追加され、

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

しかし:私はテラフォームドキュメントが言ってみました。サブネットをモジュールの外に置きリソースにアクセスすると、変数にエラーが見つかりません。

多くのGitHubの例を紹介しましたが、成功しません。何か不足していますか?

そして、これは私が言及リンクのいずれかです。モジュール/ VPCのhttps://github.com/hashicorp/terraform/issues/13739

内容/ 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}" 
} 

モジュールの内容/ 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}" 
} 

モジュールの内容/ acl/main.tf

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

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

フルモジュール/ vpc/main.tfとmodules/acl/main.tfを投稿できますか? – strongjz

+0

私の投稿を編集してmain.tfの内容を追加しました –

+0

なぜあなたはあなたの 'aws_db_subnet_group'に' count'を持っていますか?サブネットグループは複数のサブネットにまたがっていて、データベースインスタンスを 'aws_db_subnet_group'の中に置くことで、サブネットグループで指定されたサブネット間を移動することができます。私は、あなたのVPCモジュールの出力が失敗していないことに少し驚いています。なぜなら、カウントの使用のために 'aws_db_subnet_group.database.name'値があってはならないからです。サブネットグループからカウントを削除するだけで十分です。 – ydaetskcoR

答えて

0

プライベートサブネットにRDSインスタンスを追加しようとしているときに問題が、私は、真の「パブリックにアクセス」を有効にしていたました。私はydaetskcoRのようにaws_db_subnet_groupからカウントを削除しなければならなかった。

関連する問題