LoginSignup
6
3

More than 5 years have passed since last update.

terraformでsubnetにroute_tableをマッピングする

Posted at

知っている人には、当然のことかもしれないがterraformでaws環境を作っていてネットワーク周りではまった(中々見つけられなかった)事があったのでメモ。

やりたい事

  • public_subnetをterraformで作りたい

VPC RESOURCE達

terraformが提供しているVPC RESOURCEで最低限のネットワーク環境を作成するのに必要なのは下記かと思う。

RESOURCE 用途
aws_vpc VPC作成
aws_internet_gateway インターネットゲートウェイ作成(vpc指定)
aws_route_table ルーティングテーブルを作成(vpc指定)
aws_subnet サブネット作成(vpc指定)

ハマったとこ

上記の各々のリソースを作成するといい感じにEC2のインスタンスに紐付けるサブネットが出来る。(5行目で指定するsubnet_id)

1 resource "aws_instance" "fluentd-st" {
2   ami = "ami-374db956"
3   instance_type = "t2.micro"
4   key_name = "xxx_publickey"
5   subnet_id = "${aws_subnet.log-subnet.id}"  ###ここで指定する
6   vpc_security_group_ids = ["${aws_security_group.allow_ssh_es.id}","${aws_security_group.allow_forward_log.id}" ]
7   associate_public_ip_address = "true"
8   tags {
9     Name = "st-log"
10   }
11 }

自分の中で勝手に作成したsubnetに対して、route_tableがあたっていると思いこんでいてEC2をpublic_ipつきで起動したのにsshできないぞ、あれなんでだと悩んだ。。

GUIで作っている時は、subnetに対して、publicかprivateかを意識して作っていたんだが、新しいツール使ってたってのもあってその関連付けのところが丸々頭から抜けていたという話。。。

解決策

aws_route_table_associationを使って、subnetに対して、route_tableのマッピングをしてあげる。(35行目からの部分がないと作られたprivate_subnetとして同一vpc内しか通信が出来ない。。)

  1 resource "aws_vpc" "xxxvpc" {
  2   cidr_block = "10.0.0.0/16"
  3   tags {
  4     Name = "xxxvpc"
  5   }
  6 }
  7
  8 resource "aws_internet_gateway" "main-gw" {
  9   vpc_id = "${aws_vpc.xxxvpc.id}"
 10   tags {
 11     Name = "internet-gw"
 12   }
 13 }
 14
 15 resource "aws_route_table" "r" {
 16   vpc_id = "${aws_vpc.xxxvpc.id}"
 17   route {
 18     cidr_block = "0.0.0.0/0"
 19     gateway_id = "${aws_internet_gateway.main-gw.id}"
 20   }
 21
 22   tags {
 23     Name = "xxx-routing-table"
 24   }
 25 }
 26
 27 resource "aws_subnet" "abc-subnet" {
 28   vpc_id = "${aws_vpc.xxxvpc.id}"
 29   cidr_block = "10.0.1.0/24"
 30   tags {
 31     Name = "abc-subnet"
 32   }
 33 }
 34 
 35 resource "aws_route_table_association" "a" {
 36   subnet_id = "${aws_subnet.abc-subnet.id}"
 37   route_table_id = "${aws_route_table.r.id}"
 38 }

新しいツール使うと色々ハマるし忘れるので、ちゃんとメモしとくのが大事。

参照

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3