CloudFormation으로 다중 VPC 구성하기

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

시작하면서

– 서로 격리된 네트워크 환경을 만드는 기본 구조

운영 환경에서는 하나의 VPC만 사용하는 경우도 있지만, 보안 분리, 서비스 경계, 테스트 환경 분리 등의 이유로 VPC를 여러 개 나누는 경우도 많다.
예를 들어, 하나는 웹 서버용 퍼블릭 VPC, 다른 하나는 백엔드나 DB 서버용 VPC로 사용하는 식이다.

이번 글에서는 CloudFormation으로 VPC 두 개를 동시에 구성하고, 각 VPC마다 퍼블릭 서브넷, IGW, 라우팅 테이블, EC2 인스턴스까지 완전히 독립된 상태로 설정해보자.


목표 구조

이번 실습에서는 다음과 같은 구성을 만든다:

  • VPC 1 (10.0.0.0/16): 퍼블릭 서브넷 + EC2 (MyWeb1)
  • VPC 2 (10.1.0.0/16): 퍼블릭 서브넷 + EC2 (MyWeb2, MyWeb3)

각 VPC는 자체 IGW, 서브넷, 라우팅 테이블을 가지며, 서로 완전히 격리된 네트워크 환경이다.


VPC 1: MyVPC06 구성

MyVPC06:
  Type: AWS::EC2::VPC
  Properties:
    CidrBlock: 10.0.0.0/16
    EnableDnsSupport: true
    EnableDnsHostnames: true
    Tags:
      - Key: Name
        Value: MyVPC06

퍼블릭 서브넷, IGW, 라우팅 테이블, EC2 인스턴스(MyWeb1)까지 구성한다.
기존과 크게 다르지 않지만, CIDR 대역을 VPC 2와 겹치지 않게 설정하는 것이 중요하다.


VPC 2: MyVPC07 구성

MyVPC07:
  Type: AWS::EC2::VPC
  Properties:
    CidrBlock: 10.1.0.0/16
    EnableDnsSupport: true
    EnableDnsHostnames: true
    Tags:
      - Key: Name
        Value: MyVPC07

여기에도 퍼블릭 서브넷과 EC2 인스턴스를 구성한다.
MyWeb2, MyWeb3 인스턴스는 나중에 로드 밸런서와 연결할 예정이다.


EC2 인스턴스 생성 (MyWeb1, MyWeb2, MyWeb3)

각 인스턴스는 자신이 속한 VPC와 서브넷에 배치되고, 보안 그룹도 별도로 설정된다. UserData를 활용해서 웹 서버를 자동으로 띄우고, 테스트 페이지를 출력하도록 한다.

예시:

UserData:
  Fn::Base64: !Sub |
    #!/bin/bash
    hostnamectl --static set-hostname MyWeb2
    echo "toor1234." | passwd --stdin root
    sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
    sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
    systemctl restart sshd
    yum install -y httpd
    systemctl enable --now httpd
    echo "<h1>MyWeb2 test web page</h1>" > /var/www/html/index.html

MyWeb1, MyWeb2, MyWeb3는 모두 퍼블릭 IP를 가지고 있으므로 외부에서 바로 접속 가능하다.
보안 그룹에는 HTTP, HTTPS, SSH 포트를 모두 열어두었다.


라우팅 테이블 설정

각 VPC마다 별도의 IGW와 라우팅 테이블을 설정해주어야 한다.
이때도 0.0.0.0/0 → IGW 경로를 명시적으로 등록해주는 것이 핵심이다.

MyPublic2Default:
  Type: AWS::EC2::Route
  DependsOn: MylGW2attachment
  Properties:
    RouteTableId: !Ref MyPublic2Routing
    DestinationCidrBlock: 0.0.0.0/0
    GatewayId: !Ref MyIGW2

정상 동작 확인

각 인스턴스에 퍼블릭 IP가 할당되므로, 브라우저에서 직접 http://<퍼블릭_IP>로 접속했을 때
MyWeb1, MyWeb2, MyWeb3 각각의 테스트 웹 페이지가 정상 출력되는지 확인하면 된다.



마무리

지금까지 하나의 CloudFormation 템플릿 안에서 두 개의 독립된 VPC를 생성하고, 각각 퍼블릭 서브넷과 인스턴스를 배치하는 구성을 완성했다.
이제 이 구성을 바탕으로 서로 다른 VPC 간의 통신을 구성하거나, 로드 밸런서와 연결해서 트래픽을 분산시키는 구조로 확장할 수 있다.

0개의 댓글