Contents

aws vpc peering using terraform

Contents

Terraform을 공부하면서 AWS의 VPC를 생성해보고, peering까지 해보자.

us-east-1, us-east-2 region을 연결 해보고자 한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
terraform {
  required_version = ">= 0.10.3"
}


provider "aws" {
  region = "us-east-1"
}

provider "aws" {
  region = "us-east-2"
  alias = "us-east-2"
}

2개의 region을 이용하기 위해 provider를 정의 해준다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
resource "aws_vpc" "create_vpc" {
    cidr_block = "10.10.0.0/16"
    enable_dns_hostnames = true
    enable_dns_support = true
    instance_tenancy = "default"

    tags {
        Name = "jaejin test"
    }
}

resource "aws_vpc" "create_vpc_2" {
    provider = "aws.us-east-2"
    cidr_block = "172.10.0.0/16"
    enable_dns_hostnames = true
    enable_dns_support = true
    instance_tenancy = "default"

    tags {
        Name = "jaejin test222"
    }
}

연결 시킬 VPC를 region 마다 생성한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
resource "aws_default_route_table" "create_vpc" {
    default_route_table_id = "${aws_vpc.create_vpc.default_route_table_id}"

    tags {
        Name = "default"
    }
}

resource "aws_default_route_table" "create_vpc_2" {
    provider = "aws.us-east-2"

    default_route_table_id = "${aws_vpc.create_vpc_2.default_route_table_id}"

    tags {
        Name = "default"
    }
}

생성한 VPC의 라우팅 테이블을 생성해준다. 추후에 VPC들을 바라보게 만들고, 외부에서 ssh 접속을 위해 외부 접속도 받게 한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
resource "aws_subnet" "subnet_1" {
    vpc_id = "${aws_vpc.create_vpc.id}"
    cidr_block = "10.10.1.0/24"
    map_public_ip_on_launch = true
    availability_zone = "${data.aws_availability_zones.available.names[0]}"
    tags = {
        Name = "public-az-1"
    }
}


resource "aws_subnet" "subnet_2" {
    provider = "aws.us-east-2"

    vpc_id = "${aws_vpc.create_vpc_2.id}"
    cidr_block = "172.10.1.0/24"
    map_public_ip_on_launch = true
    availability_zone = "${data.aws_availability_zones.available_2.names[0]}"
    tags = {
        Name = "public-az-2"
    }
}

data "aws_availability_zones" "available" {}

data "aws_availability_zones" "available_2" {
    provider = "aws.us-east-2"
}

라우팅 테이블에 다른 region의 VPC를 등록하기 위해 subnet을 생성한다. subnet을 등록할때 availability zone을 불러와서 등록 하면된다. list로 받아오기 때문에 0번째 인덱스만 사용하도록 설정해 놓았다.

즉 여러 availability zone을 이용할 수 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

resource "aws_internet_gateway" "igw_1" {
  vpc_id = "${aws_vpc.create_vpc.id}"
  tags {
    Name = "internet-gateway"
  }
}

resource "aws_internet_gateway" "igw_2" {
  provider = "aws.us-east-2"
  vpc_id = "${aws_vpc.create_vpc_2.id}"
  tags {
    Name = "internet-gateway"
  }
}

외부 접속을 위해 internet gateway도 생성해준다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# vpc끼리 통신하기 위해서 라우팅 테이블 수정
resource "aws_route" "internet_access_vpc" {
    route_table_id = "${aws_vpc.create_vpc.main_route_table_id}"
    destination_cidr_block = "${aws_vpc.create_vpc_2.cidr_block}"
    vpc_peering_connection_id = "${aws_vpc_peering_connection.default.id}"
}

## 외부에서 ssh 접속하기 위해서 internet gateway 연결
resource "aws_route" "internet_access" {
    route_table_id = "${aws_vpc.create_vpc.main_route_table_id}"
    destination_cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.igw_1.id}"
}

# vpc끼리 통신하기 위해서 라우팅 테이블 수정
resource "aws_route" "internet_access_vpc_2" {
    provider = "aws.us-east-2"
    route_table_id = "${aws_vpc.create_vpc_2.main_route_table_id}"
    destination_cidr_block = "${aws_vpc.vpc_test.cidr_block}"
    vpc_peering_connection_id = "${aws_vpc_peering_connection.default.id}"
}

## 외부에서 ssh 접속하기 위해서 internet gateway 연결
resource "aws_route" "internet_access_2" {
    provider = "aws.us-east-2"
    route_table_id = "${aws_vpc.create_vpc_2.main_route_table_id}"
    destination_cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.igw_2.id}"
}

라우팅 테이블에 vpc의 cidr_block을 등록 해주고, 외부 접속을 위해 0.0.0.0/0 도 등록해준다.

마지막으로 vpc peering을 하자.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21

resource "aws_vpc_peering_connection" "default" {
  peer_owner_id = "871229912567"
  peer_vpc_id   = "${aws_vpc.create_vpc_2.id}"
  vpc_id        = "${aws_vpc.vpc_test.id}"
  peer_region   = "us-east-2"
  auto_accept   = false

  tags = {
    Side = "Requester"
  }
}
resource "aws_vpc_peering_connection_accepter" "default" {
  provider                  = "aws.us-east-2"
  vpc_peering_connection_id = "${aws_vpc_peering_connection.default.id}"
  auto_accept               = true

  tags = {
    Side = "Accepter"
  }
}

peer_vpc_id 에 연결할 region의 vpc를 등록해주고 vpc_id 에 현재 region의 vpc를 등록해준다.

resource에 provider를 명시 안해줬으므로 default region은 us-east-1로 잡혀 있으므로 peer_region에는 연결 시킬 us-east-2를 입력 해주었다.

전체 코드 https://github.com/jaejin1/VPC-Peering/blob/master/main.tf