Terraform으로 AWS 인프라 구성하기: VPC, Subnet, IGW 설정

y001·2025년 3월 30일
0
post-thumbnail

시작하면서

Terraform으로 인프라를 코드로 정의하면 반복 가능한 환경 구축이 가능하고, 수동 설정보다 훨씬 안정적이다. 특히 AWS 리소스를 수십 개 생성해야 하는 상황에서는 코드로 관리하는 것이 유지보수 측면에서도 유리하다.
이번 글에서는 AWS에서 가장 기본이 되는 네트워크 인프라 구성을 Terraform 코드로 실습해본다.
대상 리소스는 VPC, Subnet, Internet Gateway, Route Table이며, 이후 EC2 배포로 이어진다.


1. 목표 아키텍처

다음과 같은 네트워크 구성을 코드로 정의한다:

  • VPC (CIDR: 10.0.0.0/16): 독립적인 네트워크 영역
  • Public Subnet (CIDR: 10.0.1.0/24): 외부에서 접근 가능한 서브넷
  • Internet Gateway: 퍼블릭 통신을 위한 진입점
  • Public Route Table: 외부로 나가는 라우팅 규칙 설정
  • Subnet과 Route Table 연결

이 구조는 가장 기본적인 퍼블릭 네트워크 환경 구성이며, EC2를 외부에서 접속 가능하게 만드는 전제 조건이다.


2. Terraform 설정

Terraform이 사용할 AWS 리전을 지정하고, 로컬에 설정된 AWS CLI 프로파일을 통해 인증 정보를 가져온다.

provider "aws" {
  region  = "ap-northeast-2"
  profile = "youngyin" # 로컬 AWS CLI 프로파일
}

3. VPC 생성

VPC는 모든 네트워크 리소스의 기반이 된다. enable_dns_hostnames 옵션을 켜야 퍼블릭 IP에 DNS 이름이 붙는다.

resource "aws_vpc" "MyVPC06" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support  = true
  enable_dns_hostnames = true

  tags = {
    Name = "MyVPC06"
  }
}

4. Public Subnet 생성

퍼블릭 서브넷을 만들고, EC2 인스턴스가 퍼블릭 IP를 받을 수 있도록 map_public_ip_on_launch = true 옵션을 추가한다.

resource "aws_subnet" "MyPublicSubnet" {
  vpc_id                  = aws_vpc.MyVPC06.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "ap-northeast-2a"
  map_public_ip_on_launch = true

  tags = {
    Name = "MyPublicSubnet"
  }
}

5. Internet Gateway 생성

외부 인터넷과 연결할 수 있는 게이트웨이를 생성하고 VPC에 연결한다.

resource "aws_internet_gateway" "MyIGW" {
  vpc_id = aws_vpc.MyVPC06.id

  tags = {
    Name = "MyIGW"
  }
}

6. Public Route Table 설정

퍼블릭 서브넷에서 인터넷으로 나갈 수 있도록 기본 경로(0.0.0.0/0)를 IGW로 연결하는 라우팅 테이블을 만든다.

resource "aws_route_table" "MyPublicRouting" {
  vpc_id = aws_vpc.MyVPC06.id

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

  tags = {
    Name = "MyPublicRouting"
  }
}

7. Subnet과 Route Table 연결

앞서 만든 라우팅 테이블을 퍼블릭 서브넷에 연결하여, 외부로 나가는 경로가 유효하게 만든다.

resource "aws_route_table_association" "MyPublicRouteTableAssociation" {
  subnet_id      = aws_subnet.MyPublicSubnet.id
  route_table_id = aws_route_table.MyPublicRouting.id
}

8. 구성 확인

이제 Terraform 명령어를 통해 위 구성을 배포할 수 있다.

terraform init     # 초기화
terraform plan     # 실행 계획 미리보기
terraform apply    # 실제 리소스 생성

이 상태에서 EC2 인스턴스를 퍼블릭 서브넷에 배포하면 외부에서 접속이 가능해진다. 물론 보안 그룹과 키페어 설정도 추가해야 한다.


9. 마무리

이 글에서는 네트워크 인프라의 가장 기초가 되는 VPC, 서브넷, IGW, 라우팅 테이블을 Terraform으로 구성해보았다.
Terraform을 사용하면 이런 설정을 수십 번 반복해도 일관되게 관리할 수 있고, 실수로 잘못 연결할 가능성도 줄어든다.

다음 글에서는 이 네트워크 위에 EC2 인스턴스를 배포하고, 웹 서버를 띄워 실제 통신이 잘 되는지 확인하는 과정을 이어서 다룰 예정이다.

0개의 댓글