개요
AWS를 이용하여 국내와 해외에 지역에 5개씩 인스턴스를 배포하는 방법에 대한 내용을 정리한다.
요구사항
이번 AWS 세팅의 요구사항은 다음과 같다.
1. 인스턴스는 윈도우 서버 인스턴스를 이용함
2. 인스턴스 하나에 설치 등등 환경세팅해야하는 내용이 꽤나 복잡함
3. 인스턴스가 실행되면 자체적으로 만든 웹 서버 프로그램을 실행시켜야함
4. 국내, 해외 리전으로 각각 5개의 인스턴스를 띄워야 함
5. 각 인스턴스의 IP는 고정되어야 함
6. 허용해야하는 트래픽 프로토콜과 Port, IP 대역이 정해져있음
AWS 세팅 계획
먼저 요구사항을 보자.
윈도우 서버 인스턴스는 EC2 에서 인스턴스 생성을 할 때, 윈도우 서버를 선택하면 된다.
서버 인스턴스 하나에 설치 및 세팅해야하는 내용이 복잡하므로, 미리 하나의 잘 세팅된 인스턴스를 만들어놓고 복제하는 방향으로 진행해야 할 것이다.
인스턴스 실행 시, 프로그램이 실행되도록 하기 위해 윈도우 Task Scheduler를 이용한다.
각 인스턴스의 IP를 고정하기 위해 Elastic IP를 이용한다.
트래픽 허용 방법을 정의하기 위해 보안 그룹을 이용한다.
국내와 해외 리전에 각각 5개의 인스턴스를 띄워야 하는데, 이를 위해 먼저 리전을 국내(seoul)로 세팅하여 하나의 AMI(이미지)를 미리 만든다. 이 AMI를 이용하여 5개 서울 인스턴스를 복제한다. 해외 리전을 위한 AMI는 또 따로 생성해야하는데 만들어둔 국내 AMI를 복사하여 해외 리전 AMI를 생성하고, 기타 리소스들을 세팅하여 해외 인스턴스를 5개 생성하는 방향으로 진행하면 될 것이다.
AWS 세팅
이제 실제 세팅을 진행한다.
윈도우 인스턴스 생성
AWS 웹 콘솔에서 EC2 페이지로 이동하여 오른쪽 위 지역을 서울로 세팅한 후 인스턴스를 시작 버튼을 누른다.
Launch an instance 페이지에서 원하는 인스턴스의 스펙을 지정할 수 있다.
먼저 운영체제를 윈도우 서버로 지정한다.
인스턴스 유형은 머신의 성능에 맞는 프리셋들을 의미한다. 여기에서 적절한 유형을 하나 선택한다. (t3.xlarge)
스토리지 구성에서 필요한 디스크 사이즈를 할당한다.
키 페어는 해당 인스턴스에 접근하기 위한 용도로 사용된다. 이미 생성된 키 페어가 있다면 사용하고, 없다면 새로 하나 생성한다. 키 페어 이름을 지정하고, 유형은 RSA로 파일은 .pem로 생성한다.
보안 그룹은 해당 인스턴스로의 네트워크 트래픽을 관리하기 위한 용도로 사용된다. EC2 > 네트워크 및 보안 > 보안 그룹 탭으로 이동하여 용도에 맞게 이름을 지정하여 생성한다. 보안 그룹 세팅은 인스턴스 생성 이후에도 수정이 가능하기 때문에 간단하게만 세팅하고 인스턴스에서 생성한 보안그룹을 지정한다.
인스턴스를 하나 시작시킨다. 시작된 인스턴스는 인스턴스 페이지로 이동하면 확인할 수 있다.
윈도우 인스턴스 환경세팅, 시작 프로그램 세팅
이제 인스턴스에 RDP를 통해 접속한다. RDP 접속을 하기 위해 키페어 생성 때 받은 .pem 파일이 필요하다. 이 파일을 해독하여 비밀번호를 생성하고, 그 비밀번호를 입력하면 원격접속이 가능하다.
원격접속 후 윈도우 인스턴스의 환경세팅을 시작한다. 윈도우 서버는 기본적으로 대부분의 포트가 막혀있기 때문에 방화벽을 통해 사용할 포트를 열어주어야 한다. 방화벽 & 네트워크 보안 으로 이동하여 고급 세팅에서 인바운드 규칙으로 이동한다. 인바운드 규칙에서 TCP 80(HTTP), TCP 443(HTTPS)과 개발목적으로 사용될 포트 TCP(5000), UDP(9000)을 열어준다. 그 이후 개발을 위한 환경세팅을 진행한다. 파이썬 설치, 라이브러리 설치, 기타 프로그램들을 설치한다.
시작 프로그램을 세팅하기 위해 두 가지 방법이 있다.
첫번째로 윈도우의 작업 스케줄러를 통해 지정한 프로그램이 윈도우 시작 시 실행되도록 세팅하는 것이다. 이렇게 하면 프로그램은 백그라운드로 실행되고 따로 로그인을 하지 않아도 된다.
두번째로 AutoLogon을 설치하여 자동으로 로그인되게 하고, 실행창에 shell:startup 를 입력하여 시작 프로그램 디렉터리를 띄우고 시작시킬 프로그램들의 바로가기를 넣어서 프로그램들이 실행되도록 할 수 있다. 이 방법은 프로그램들이 창을 띄우는 형태로 뜨기 때문에 좀 더 직관적이지만, 로그인을 해야만 가능하다.
국내, 해외 리전으로 각각 5개의 인스턴스를 띄워야 함
이전 단계에서 필요한 인스턴스의 프로토타입을 만들었다. 이제 이 인스턴스를 이미지 형태로 만들어야한다. AWS에서는 AMI라는 인스턴스 이미지 기능을 제공한다. 인스턴스 창으로 이동하여 인스턴스 상태 > 이미지 및 템플릿 > 이미지 생성을 클릭한다. 이름을 정한 후 이미지를 생성한다. 이제 AMI 창에서 생성된 이미지를 확인할 수 있다. AMI이 생성되는 과정에서 스냅샷도 같이 생성되는데, 스냅샷 생성은 꽤 오래 걸린다. 또한 스냅샷이 완전히 생성되기 전까지는 AMI를 이용할 수 없으니 스냅샷 창에서 진행률을 확인하고 다음 작업을 수행하자.
스냅샷까지 생성됨을 확인한 후, AMI로 인스턴스를 시작시킨다. 여기에서 인스턴스 유형과 키페어, 보안 그룹을 다시 설정할 수 있는데 이 예제에서는 기존 인스턴스와 동일하게 진행한다. 이제 인스턴스 개수를 5로 지정하고 인스턴스 시작을 눌러 5개의 인스턴스를 생성한다. 이제 서울 리전에 5개의 동일한 인스턴스를 실행된다.
다음으로 해외 리전에 동일한 5개 인스턴스를 실행시켜야 한다. 먼저 서울 리전에 생성된 AMI를 선택한다. 작업 > AMI 복사를 선택하여 AMI 복사 페이지로 이동한다. 여기에서 리전을 오하이오로 변경하여 AMI를 복사한다. 이제 서울 리전에 생성된 AMI와 동일한 AMI가 미국 리전에도 생성되었다. 오른쪽 위 지역을 오하이오로 변경하고 AMI 페이지로 이동하여 방금 생성된 AMI를 선택한다. 서울에서 5개 인스턴스를 띄운것과 동일하게 오하이오에 5개 인스턴스를 띄우면 되는데, 보안그룹과 키페어는 다른 지역의 것을 이용할 수 없기 때문에 새로 생성해주어야한다. 서울 지역에서 생성한 것과 동일하게 키페어, 보안그룹을 생성하고 오하이오에도 5개 인스턴스를 띄운다.
각 인스턴스의 IP를 Public 고정 IP로 세팅
인스턴스에 IP를 세팅하기 위해 탄력적 IP 기능을 이용한다. 탄력적 IP 주소 할당을 통해 새 IP를 할당한다. 유형을 퍼블릭 IP로 한다. 서울, 오하이오에 각각 5개씩 할당한다. 탄력적 IP는 할당 이후 인스턴스에 연결해주어야 한다. 하나하나 클릭하여 인스턴스를 선택하고 연결해준다. 이 때, 이 탄력적 IP 주소를 재연결하도록 허용을 체크하여 인스턴스의 IP가 계속 이 IP로 잡히도록 하면 고정 IP 세팅이 완료된다.
허용 트래픽 프로토콜과 Port, IP 대역 세팅
퍼블릭하게 띄워진 인스턴스에는 네트워크를 통한 악의적인 접근들이 들어올 수 있다. 보통 아무 제한 없이 80번 포트를 열어둔 경우 브루트 포스 IP로 통신을 날리는 봇들의 타겟이 된다. 그래서 가끔 알 수 없는 IP로부터 통신요청이 들어오는데 이는 개발자가 띄우려는 서비스의 안정성을 해칠 수 있다. 이를 방지하기 위해 AWS에서는 가상 방화벽을 위한 보안 그룹 기능을 제공한다. 보안 그룹은 인바운드(들어오는 트래픽)와 아웃바운드(나가는 트래픽)에 제한을 거는 기능들을 제공한다. 보안 그룹을 생성할 때 기본적으로 잡히는 포트는 보통 TCP 80(HTTP), TCP 443(HTTPS), TCP 3389(RDP) 등이다. 워낙 자주 사용되는 포트이고, RDP의 경우는 인스턴스에 개발자가 접속해야하기 때문에 보통 디폴트값으로 세팅된다.
이전에 생성해둔 보안 그룹으로 들어간다. 인바운드 규칙 편집을 통해 규칙을 추가, 제거할 수 있다. 디폴트로 세팅된 인바운드 규칙 외에 자체적으로 만든 프로그램의 포트를 규칙에 추가해주어야한다. 예를 들어 직접 제작한 웹 서버가 5000 포트로 호스팅중이라 하면 TCP 5000을 추가해야하고, 게임 서버가 UDP 9000으로 게임 클라이언트와 통신한다면 UDP 9000을 추가해주면 된다.
이렇게 세팅해두면 80, 443, 3389, 5000, 9000 외의 다른 포트로는 이 인스턴스에 접근할 수 없다. 여기에서 각 포트에 대해 접근할 수 있는 IP 대역도 제한할 수 있다. 보통 회사에서만 접근가능한 인스턴스를 만들거나, 협업하는 업체에서 접근 가능하도록 하는 경우 인바운드 규칙으로 IP 대역을 제한한다. 인바운드 규칙에서 소스를 설정하여 이 작업을 수행할 수 있다. 소스는 다음과 같은 규칙으로 IP 대역을 표현한다.
/32는 단일 IP 주소를 나타낸다.
203.0.113.25/32
/24는 192.168.1.0부터 192.168.1.255까지의 IP 범위를 포함한다.
192.168.1.0/24
다음과 같이 전 세계 모든 IPv4 주소에서 인스턴스에 접근을 허용할 수 있다.
0.0.0.0/0