続:Terraformに入門してみた(VPC/サブネット/ピアリング等)

続:Terraform入門

今回はVPCを2つ作って、サブネット、ルートテーブル、ピアリングまで実施する。

作るネットワーク

  • VPC1, VPC2の2つがある。
  • VPC1, VPC2ともに public用のサブネットを持つ。
  • またインターネットゲートウェイもそれぞれ持つ。
  • publicサブネット同士をルーティングする。
  • publicからインターネットゲートウェイを抜けて外にアクセスできるようにする。

terraformのコード

グローバルIPを使ってしまっているが、サンプルということで…

## 1つ目のVPCの設定とIGW

resource "aws_vpc" "vpc01" {
    cidr_block = "192.165.0.0/16"

    tags = {
        Name = "vpc01"
    }
}

resource "aws_subnet" "subnet-vpc01-public" {
    vpc_id              = aws_vpc.vpc01.id
    cidr_block          = "192.165.0.0/24"
    availability_zone    = "ap-northeast-1a"

    tags = {
        Name = "subnet-vpc01-public"
    }
}

resource "aws_internet_gateway" "igw-vpc01" {
    vpc_id              = aws_vpc.vpc01.id

    tags = {
        Name = "igw-vpc01"
    }
}

## 2つ目のVPCの設定とIGW

resource "aws_vpc" "vpc02" {
    cidr_block = "192.164.0.0/16"

    tags = {
        Name = "vpc02"
    }
}

resource "aws_subnet" "subnet-vpc02-public" {
    vpc_id              = aws_vpc.vpc02.id
    cidr_block          = "192.164.0.0/24"
    availability_zone    = "ap-northeast-1a"

    tags = {
        Name = "subnet-vpc02-public"
    }
}

resource "aws_internet_gateway" "igw-vpc02" {
    vpc_id              = aws_vpc.vpc02.id

    tags = {
        Name = "igw-vpc02"
    }
}

## peering settings

resource "aws_vpc_peering_connection" "peer-vpc02" {
    peer_vpc_id   = "${aws_vpc.vpc01.id}"
    vpc_id        = "${aws_vpc.vpc02.id}"
    tags = {
        Name = "VPC Peering between vpc01 and vpc02"
    }
    auto_accept   = true
}

## route table
## ルートテーブルの紐付けを行う
resource "aws_route_table_association" "rtb-a-vpc01-public" {
    subnet_id = aws_subnet.subnet-vpc01-public.id
    route_table_id = aws_route_table.rtb-vpc01.id
}

resource "aws_route_table_association" "rtb-a-vpc02-public" {
    subnet_id = aws_subnet.subnet-vpc02-public.id
    route_table_id = aws_route_table.rtb-vpc02.id
}

# vpc01からvpc02に向かう設定を入れるルートテーブル
resource "aws_route_table" "rtb-vpc01" {
    vpc_id = "${aws_vpc.vpc01.id}"
    route {
        cidr_block = "0.0.0.0/0"
        gateway_id = aws_internet_gateway.igw-vpc01.id
    }
    route {
        cidr_block = "192.164.0.0/16"
        vpc_peering_connection_id = "${aws_vpc_peering_connection.peer-vpc02.id}"
    }
    tags = {
        Name = "rtb-vpc01"
    }
}

# vpc02からvpc01に向かう設定を入れたルートテーブル
resource "aws_route_table" "rtb-vpc02" {
    vpc_id = "${aws_vpc.vpc02.id}"
    route {
        cidr_block = "0.0.0.0/0"
        gateway_id = aws_internet_gateway.igw-vpc02.id
    }
    route {
        cidr_block = "192.165.0.0/16"
        vpc_peering_connection_id = "${aws_vpc_peering_connection.peer-vpc02.id}"
    }
    tags = {
        Name = "rtb-vpc02"
    }
}

注意点

terraformでsubnet作ると、private、publicを意識せず作ってしまい全て外にアクセスできないprivateサブネットになってしまうので、 パブリックサブネットを作るならインターネットゲートウェイを明示的に作成、紐付けし、ルーティングテーブルも作成してやる必要がある。