LoginSignup
5
3

More than 3 years have passed since last update.

terraformでインターネットゲートウェイ, ルートテーブルを作る

Last updated at Posted at 2019-08-12

前回までのあらすじ

terraformでVPC, サブネットを作成する
https://qiita.com/sasshi_i/items/f4f65e18923d856be256

環境

  • macOS Mojave 10.14.5
  • MacBook Pro, 13-inch, Early 2015
  • terraform v0.12.0
  • direnv 2.20.1

目標成果物(本記事ではインターネットゲートウェイとルートテーブルを作成)

スクリーンショット 2019-07-15 20.00.25.png

github格納先

成果物のコードは下記githubのリポジトリに格納していきます。
https://github.com/sasshi-i/terraform_ec2_rds

# ディレクトリ構成

├─ envs
│    ├─ prod
│    │   ├─ backend.tf
│    │   ├─ main.tf
│    │   └─ variables.tf
│    │
│    └─ staging
│        ├─ backend.tf
│        ├─ main.tf
│        └─ variables.tf
├─ modules
│    ├─ provider
│    │   └─ main.tf
│    └─ vpc
│        └─ main.tf
├─ .envrc
├─ .gigtgnore
└─READNE.md

今回追記したプログラム

/modules/vpc/main.tf
resource "aws_internet_gateway" "qiita_igw" {
  vpc_id = aws_vpc.qiita_vpc.id
  tags = {
    Name = "igw-${var.stage}"
  }
}

resource "aws_route_table" "qiita_rtb_public" {
  vpc_id = aws_vpc.qiita_vpc.id
  tags = {
    Name = "rtb-${var.stage}-public"
  }
}

resource "aws_route_table_association" "qiita_rtb_assoc_pblic" {
  count          = 2
  route_table_id = aws_route_table.qiita_rtb_public.id
  subnet_id      = element([aws_subnet.qiita_subnet_1a[0].id, aws_subnet.qiita_subnet_1b[0].id], count.index)
}

resource "aws_route" "qiita_route_igw" {
  route_table_id         = aws_route_table.qiita_rtb_public.id
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.qiita_igw.id
  depends_on             = [aws_route_table.qiita_rtb_public]
}

resource "aws_route_table" "qiita_rtb_private" {
  vpc_id = aws_vpc.qiita_vpc.id
  tags = {
    Name = "rtb-${var.stage}-private"
  }
}

resource "aws_route_table_association" "qiita_rtb_assoc_private" {
  count          = 2
  route_table_id = aws_route_table.qiita_rtb_private.id
  subnet_id      = element([aws_subnet.qiita_subnet_1a[1].id, aws_subnet.qiita_subnet_1b[1].id], count.index)
}

プログラムの解説

インターネットゲートウェイ(IGW)

AWS上のリソースをインターネットに繋げるためにはインターネットゲートウェイが必要です。
vpc_idを指定するだけで作成できます。

ルートテーブル

ルートテーブルを作成する際は下記の作成が必要になります。

  • ルートテーブル->aws_route_table
  • ルートテーブルとサブネットの関連付け->aws_route_table_association
  • IGWへのルーティング(サブネットをインターネットに繋ぎたい場合)->aws_route

aws_route_tableの解説

vpc_idを指定するだけです。名前をつけたければtagsNameを指定します。

aws_route_table_associationの解説

route_table_idsubnet_idを指定してルートテーブルとサブネットを関連付けます。
自分が記載したプログラムではcountを指定してループで作成しています。
elementterraformが用意している関数で文法は下記の通りです。

element(list, index)

listからindex番目の要素を取得します。

aws_routeの解説

destination_cidr_blockで送信先を指定します。今回は全てのIPアドレス範囲をインターネットに繋げるために0.0.0.0/0を指定しています。
またdepends_onで依存を作成することができます。aws_route_tableが存在しない場合はaws_routeは存在し得ないので、aws_routeを指定しています。

以上!terraform applyすればAWS上にリソースが作成されます。

結果

無事ルートテーブルが作成されました。

qiita_rtb_public
スクリーンショット 2019-08-12 22.45.25.png

スクリーンショット 2019-08-12 22.50.52.png

qiita_rtb_private
スクリーンショット 2019-08-12 22.45.35.png

スクリーンショット 2019-08-12 22.51.02.png

関連記事

terraformでVPC, サブネットを作成する
https://qiita.com/sasshi_i/items/f4f65e18923d856be256

tfenvを用いたterraformのインストール方法
https://qiita.com/sasshi_i/items/b5117d51fed800fa6b09

5
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
5
3