
– VPC, Subnet, 인터넷 게이트웨이, 라우팅 테이블 설정
EC2 인스턴스를 만든다고 해서 바로 인터넷에 연결되는 건 아니다. 서버가 외부와 통신하려면 그 전에 네트워크 리소스들이 먼저 준비돼 있어야 한다. 가장 기본적으로 필요한 건 VPC, 서브넷, 인터넷 게이트웨이, 라우팅 테이블이다. 이 구성들이 연결되지 않으면 EC2 인스턴스를 띄워도 외부에서 접속할 수 없고, 인스턴스 자체도 인터넷에 접근할 수 없다.
이번 글에서는 CloudFormation을 사용해서 EC2 인스턴스를 위한 기본 네트워크 환경을 만드는 방법을 정리한다.
EC2가 외부에서 접속 가능하려면 다음 리소스들이 필요하다.
이 네 가지를 올바르게 연결해주면 비로소 EC2 인스턴스가 외부와 통신할 수 있다.

MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: MyVPC
VPC는 AWS 상의 독립된 네트워크 공간이다. CidrBlock은 이 VPC에서 사용할 IP 주소 범위를 설정하는 부분이고, DNS를 사용하기 위해 EnableDnsSupport와 EnableDnsHostnames는 true로 설정해두는 게 좋다. 이 설정은 이후 EC2 인스턴스에 퍼블릭 DNS가 붙도록 하는 데도 필요하다.
MyPublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
AvailabilityZone: !Select [ 0, !GetAZs '' ]
Tags:
- Key: Name
Value: MyPublicSubnet
서브넷은 VPC 안에서 실제 리소스들이 위치하게 되는 IP 대역이다. 여기선 퍼블릭 서브넷을 만들기 위해 10.0.1.0/24 대역을 설정했고, VPC는 앞에서 만든 MyVPC를 참조했다. 가용영역(Availability Zone)은 현재 리전에서 사용 가능한 영역 중 첫 번째를 자동으로 선택한다.
MyIGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: MyIGW
MyIGWAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref MyVPC
InternetGatewayId: !Ref MyIGW
인터넷 게이트웨이(IGW)는 말 그대로 인터넷과 연결해주는 출입구 역할을 한다. EC2 인스턴스가 인터넷에 나가거나, 외부에서 접근받으려면 반드시 IGW가 연결돼 있어야 한다. 그리고 단순히 IGW를 생성하는 것만으로는 부족하고, 위처럼 VPCGatewayAttachment 리소스를 통해 VPC에 명시적으로 연결해줘야 한다.
MyPublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: MyPublicRT
MyRouteToInternet:
Type: AWS::EC2::Route
DependsOn: MyIGWAttachment
Properties:
RouteTableId: !Ref MyPublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref MyIGW
MyRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref MyPublicSubnet
RouteTableId: !Ref MyPublicRouteTable
이제 인터넷으로 나가는 트래픽 경로를 설정해야 한다. 먼저 퍼블릭 라우팅 테이블을 만들고, 그 테이블에 외부(0.0.0.0/0)로 가는 트래픽은 IGW로 향하도록 라우트를 추가한다. 이후 해당 라우팅 테이블을 퍼블릭 서브넷에 연결하면, 그 서브넷에 속한 EC2 인스턴스가 외부와 통신할 수 있는 조건이 갖춰진다.
참고로 MyRouteToInternet 리소스에 DependsOn: MyIGWAttachment를 추가한 이유는 IGW가 먼저 VPC에 연결돼 있어야 라우트 생성이 정상적으로 동작하기 때문이다. 순서를 보장하지 않으면 에러가 발생할 수 있다.
CloudFormation으로 지금 구성한 네트워크 인프라 구조를 다시 정리하면 아래와 같다:

이 구조가 갖춰지면 EC2 인스턴스를 여기에 띄우고 퍼블릭 IP를 부여해서 외부와 통신할 수 있게 된다.
다음 단계는 실제로 EC2 인스턴스를 생성하고, 보안 그룹을 연결하고, 필요한 초기 설정까지 자동으로 처리해보는 것이다.