흰 스타렉스에서 내가 내리지

Terraform 을 이용하여 Route Table 생성 본문

DevOps

Terraform 을 이용하여 Route Table 생성

주씨. 2024. 8. 8. 12:20
728x90

Route Table 은 라우팅 규칙의 집합이다.

 

Route Table 은 여러 서브넷에서 동시에 사용할 수 있으며, 이렇게 연결하는 작업은 Association 이라고 한다. 

 

Route Table 은 `aws_route_table` 리소스를 생성하면 되고, 서브넷과 연결할 때는 `aws_route_table_assocation` 을 사용하면 된다. 

 

vim vpc.tf

 

다음은 이전 글까지에서 작성한 기존의 코드

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "devops-demo-vpc"
  }
}

resource "aws_subnet" "public_subnet" {
  vpc_id = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"

  availability_zone = "ap-northeast-2a"

  tags = {
    Name = "devops-demo-subnet-1"
  }
}

resource "aws_subnet" "private_subnet" {
  vpc_id = aws_vpc.main.id
  cidr_block = "10.0.2.0/24"

  availability_zone = "ap-northeast-2c"

  tags = {
    Name = "devops-demo-subnet-2"
  }
}

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "devops-demo-igw"
  }
}

resource "aws_eip" "nat" {
  vpc = true

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_nat_gateway" "nat_gateway" {
  allocation_id = aws_eip.nat.id

  subnet_id = aws_subnet.public_subnet.id

  tags = {
    Name = "devops-demo-nat-gw"
  }
}

 


# Route Table 생성하기

다음은 새로 추가할 코드이다.

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.main.id
  
  tags = {
    Name = "devops-demo-rt-public"
  }
}

resource "aws_route_table" "private" {
  vpc_id = aws_vpc.main.id
  
  tags = {
    Name = "devops-demo-rt-private"
  }
}

 

 

terraform plan

 

 

terraform apply

 

 

 

VPC 대시보드로 가보면 2개의 라우트 테이블이 생성된 것을 확인할 수 있다. 

 

 

그리고 이제 Assocation 을 해줘야 한다. (route table 을 서브넷에 연결해줘야 한다.)

 

vpc.tf 에 이어서 추가해준다.

resource "aws_route_table_association" "route_table_association_public" {
  subnet_id = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public.id
}

resource "aws_route_table_association" "route_table_association_private" {
  subnet_id = aws_subnet.private_subnet.id
  route_table_id = aws_route_table.private.id
}

 

 

# 지금까지 vpc.tf 전체

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "devops-demo-vpc"
  }
}

resource "aws_subnet" "public_subnet" {
  vpc_id = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"

  availability_zone = "ap-northeast-2a"

  tags = {
    Name = "devops-demo-subnet-1"
  cidr_block = "10.0.2.0/24"
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {

  tags = {
    Name = "devops-demo-subnet-2"
  }
}

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "devops-demo-igw"
  }
}

resource "aws_eip" "nat" {
  vpc = true

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_nat_gateway" "nat_gateway" {
  allocation_id = aws_eip.nat.id

  subnet_id = aws_subnet.public_subnet.id

  tags = {
    Name = "devops-demo-nat-gw"
  }
}

resource "aws_route_table" "public" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "devops-demo-rt-public"
  }
}

resource "aws_route_table" "private" {
  vpc_id = aws_vpc.main.id

  tags = {
    Name = "devops-demo-rt-private"
  }
}

resource "aws_route_table_association" "route_table_association_public" {
  subnet_id = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public.id
}

resource "aws_route_table_association" "route_table_association_private" {
  subnet_id = aws_subnet.private_subnet.id
  route_table_id = aws_route_table.private.id
}

 

 

terraform plan

 

2개의 Association 이 생길것이라고 한다. 

 

 

terraform apply

 

Association 이 잘 되었을 것이다. 

 

 

마지막으로, route table 에 rule 만 제대로 설정해주면 된다. 


# Route Table 에 규칙 생성하기

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route_table

 

Terraform Registry

 

registry.terraform.io

 

방법 1. route table 을 생성할 때, route 규칙을 ingress 로