본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

88일차 - 테라폼, 인터넷 게이트웨이와 라우팅 테이블

인터넷 게이트웨이와 라우팅 테이블

resource "aws_subnet" "sub_1" {
  vpc_id = aws_vpc.vpc_1.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "${var.region}a"

  tags = {
    Name = "${var.prefix}-sub-1"
  }
}

resource "aws_internet_gateway" "igw_1" {
  vpc_id = aws_vpc.vpc_1.id

  tags = {
    Name = "${var.prefix}-igw-1"
  }
}

resource "aws_route_table" "rt_1" {
  vpc_id = aws_vpc.vpc_1.id

  route {
    cidr_block = "0.0.0.0/0" # 목적지가 어디든 간에 인터넷 게이트웨이로 보낸다.
    gateway_id = aws_internet_gateway.igw_1.id
  }

  tags = {
    Name = "${var.prefix}-rt-1"
  }
}

- cidr_block => 범위가 클수록 우선순위가 낮다.(더 범위가 좁은(구체적인) 라우팅 룰이 우선순위가 더 높다.)

===> 즉, 내부 네트워크 통신에 우선권이 있다.

- 서브넷은 여러 라우팅 테이블과 연결될 수 있다.

- 위의 코드만으로는, 서브넷은 직접 만든 라우팅 테이블이 아닌 기본 라우팅 테이블과 연결된다. => 명시적으로 연결시켜줘야 한다.


서브넷과 라우팅 테이블의 연결

기본 라우팅 테이블이 아닌 테이블과 서브넷을 연결시키는 방법은 두 가지가 있다.

1. 서브넷과 연결되어 있는 기본 라우팅 테이블을 없애서 원하는 라우팅 테이블과 연결되도록 한다.

2. 서브넷과 원하는 라우팅 테이블을 명시적으로 연결시켜준다.

resource "aws_route_table_association" "association_1" {
  subnet_id = aws_subnet.sub_1.id
  route_table_id = aws_route_table.rt_1.id
}

 

서브넷과 라우팅 테이블, 인터넷 게이트웨이가 연결됨


리소스 개수 늘리기

- id와 Name 태그는 유니크해야 한다.
- 리소스의 스펙이 같다면 복사/붙여넣기를 하고 id와 Name 태그를 변경해준다.

resource "aws_internet_gateway" "igw_1" {
  vpc_id = aws_vpc.vpc_1.id

  tags = {
    Name = "${var.prefix}-igw-1"
  }
}

resource "aws_internet_gateway" "igw_2" {
  vpc_id = aws_vpc.vpc_1.id

  tags = {
    Name = "${var.prefix}-igw-2"
  }
}

보안 그룹

- 기본적으로 생성된 네트워크 ACL 은 모든 인바운드, 아웃바운드 패킷을 허용한다.

- 네트워크 ACL보다 보안 그룹을 사용하는 것이 좋다.

 

- 모든 종류의 인바운드, 아웃바운드 통신을 허용하는 보안그룹

resource "aws_security_group" "sg_1" {
  ingress {
    from_port = 0
    to_port = 0
    protocol = "all"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port = 0
    to_port = 0
    protocol = "all"
    cidr_blocks = ["0.0.0.0/0"]
  }

  vpc_id = aws_vpc.vpc_1.id

  tags = {
    Name = "${var.prefix}-sg-1"
  }
}

작성 완료된 코드

# 기존 코드

...

resource "aws_internet_gateway" "igw_1" {
  vpc_id = aws_vpc.vpc_1.id

  tags = {
    Name = "${var.prefix}-igw-1"
  }
}

resource "aws_route_table" "rt_1" {
  vpc_id = aws_vpc.vpc_1.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw_1.id
  }

  tags = {
    Name = "${var.prefix}-rt-1"
  }
}

resource "aws_route_table_association" "association_1" {
  subnet_id = aws_subnet.sub_1.id
  route_table_id = aws_route_table.rt_1.id
}

resource "aws_security_group" "sg_1" {
  ingress {
    from_port = 0
    to_port = 0
    protocol = "all"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port = 0
    to_port = 0
    protocol = "all"
    cidr_blocks = ["0.0.0.0/0"]
  }

  vpc_id = aws_vpc.vpc_1.id

  tags = {
    Name = "${var.prefix}-sg-1"
  }
}