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

Terraform 을 이용하여 AWS IGW, NAT GW 생성 본문

DevOps

Terraform 을 이용하여 AWS IGW, NAT GW 생성

주씨. 2024. 8. 6. 22:40
728x90

IGW 와 NAT GW 연결에 따라서 public, private subnet 이 결정된다.

 

프라이빗 서브넷의 인스턴스는 퍼블릭 서브넷에 있는 NAT(Network Address Translation) 게이트웨이를 사용하여 인터넷에 액세스할 수 있다.  

 

 

퍼블릿 서브넷에 연결된 라우트 테이블을 보면, 인터넷 게이트웨이를 통해서 바로 밖으로 나가게 되어 있다. 

 

하지만 프라이빗 서브넷에 연결된 라우트 테이블을 보면, NAT 게이트웨이를 통하라고 명시가 되어 있다. 

그래서 퍼블릭 서브넷에 있는 NAT Instance 한테 갔다가 IGW 를 통해서 밖으로 나가게 된다. 

 

즉, 퍼블릭 서브넷에 있는 서버들은 각각이 고유한 pulbic IP 주소를 가지고 있고,

프라이빗 서브넷에 있는 인스턴스들은 동일한 IP (NAT Gateway 가 가지고 있는 elastic IP) 를 가진다

 

그래서 프라이빗 서브넷 내에 서버가 100개 있더라도 같은 NAT Gateway 라면 동일한 IP 를 통해서 나가게 된다. 

 

 


 

# Terraform 으로 IGW 만들기

 

vim vpc.tf

 

이전 글을 잘 따라했다면, vpc.tf 파일은 아래와 같을 것이다. 

 

 

이어서 아래 코드 추가

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

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

 

terraform plan

 

 

terraform apply

 

 

 

 

이제 NAT Gateway 를 만들어보자.

 


# Terraform 으로 NAT Gateway 만들기

 

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"
  }
}

 

아래 eip 와 nat 를 추가했다. 

nat 에서 subnet_id 는 private subnet 이 아니라 public subnet 을 연결해야 한다. 

 

terraform plan

 

 

NAT Gateway 는 비용이 발생한다. 

EIP 생성완료
NAT Gateway 생성완료

 

 

 

다음 글에서 terraform 을 이용하여 route table 을 생성하는 방법까지 알아보자