본문 바로가기
Terraform/AWS and 테라폼: Infrastructure as

[AWS and 테라폼: Infrastructure as Code] AWS IGW & NAT 게이트웨이 생성

by 개발자 영만 2024. 1. 19.

Internet Gateway 생성


  • 인터넷 게이트웨이는 VPC 내부와 외부 인터넷이 통신하기 위한 게이트웨이 중 하나.
  • 인터넷 게이트웨이가 연결된 서브넷은 흔히 public 서브넷 이라고 부른다.
resource "aws_internet_gateway" "ihwoo-tftest-igw" {
  vpc_id = aws_vpc.ihwoo-tftest-vpc.id

  tags = {
    Name = "ihwoo-tftest-igw",
    Date = "2022-10-05",
    User = "ihwoo"
  }
}

 

Nat Gateway 생성


  • Nat Gateway는 Private 서브넷에서 외부와 통신하기 위해서 필요한 일종의 게이트웨이.
  • 외부에서 Private 서브넷으로는 접근이 불가능하고, 사실 외부에서 접근하지 말아야하는 서비스는 Private 서브넷에 들어가는 것이 좋다.
  • 하지만, Private 서브넷에 있는 서버에서는 외부와 통신해야 하는 경우가 발생 → 이럴 때 필요한 것이 바로 NAT Gateway
    • 필요한 패키지를 다운로드
    • 써드파티 API를 사용하는 경우
  • Nat Gateway는 반드시 고정 IP(Elastic IP)를 가지고 있어야 하고, private subnet에서 보내는 모든 요청이 외부로 나갈 때는 내부IP가 아닌 고정 IP를 사용
    • 고정IP가 13.1.1.1 이라면 외부로 나가는 모든 요청은 13.1.1.1에서 보낸 요청으로 표시된다.
10.0.4.1(내부 IP) → 13.1.1.1(고정 IP) → (외부 IP)
  • 따라서, Nat Gateway를 만들 때는 AWS Elastic IP도 함께 생성
  • Nat Gateway는 Public 서브넷에 위치하지만, 연결은 private 서브넷과 한다.
  • Public 서브넷에 위치하는 이유는 Nat Gateway 자체는 인터넷과 통신이 되어야 하기 때문
resource "aws_eip" "ihwoo-tftest-nat" {
  vpc   = true

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_nat_gateway" "ihwoo-tftest-natgw" {
  allocation_id = aws_eip.ihwoo-tftest-nat.id

  subnet_id = aws_subnet.ihwoo-tftest-public-subnet.id

  tags = {
    Name = "ihwoo-tftest-natgw",
    Date = "2022-10-05",
    User = "ihwoo"
  }
}