Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

知っている人には、当然のことかもしれないが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 }

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

参照

https://www.terraform.io/docs/providers/aws/r/route_table_association.html

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away