[AWS] EC2로 서버 구축하기

홍현지·3일 전
2

지원받은 크레딧을 다 써서 aws 프리티어를 사용하기 위해 AWS로 이전했다.

기존 아키텍쳐

NCP 에서 이렇게 배포용 public server와 DB용 private server를 별도로 분리하여 돌리고 있었다.

그리고 위처럼 로컬환경에서 db에 접근하기 위해 public server를 bastain server로 활용하여 사용하였다.

AWS 에서도 위처럼 똑같은 환경으로 서버를 구축하였다.

VPC 생성

VPC 서비스 → VPC메뉴 → VPC 생성

먼저 위처럼 vpc를 설정해주었다.

요즘은 저 VPC 등 을 선택하면 서브넷들과 라우팅테이블, igw, s3도 같이 만들어주더라.

그걸로 한 번에 해도 되겠지만, 학생 때 수업에서 aws 잠깐 써본 것 빼곤 써본 적이 없어서 사용법을 익힐 겸 vpc 생성부터 차근차근 해보았다.

subnet 생성

VPC 서비스 → 서브넷 메뉴 → 서브넷 생성

VPC는 위에서 만든 boolock-vpc로 설정해준다.

기존 아키텍쳐처럼 public, private subnet을 하나씩 만들어 줄 것이다.

public subnet

예전처럼 테스트용 서버들이 필요해질지도 모르니 pub1, private1로 이름을 지어주었다.

가용영역은 seoul(ap-northeast-2)a로 해주었다.

CIDR 블록은 VPC 범위보다 작아야한다. (VPC 하위 네트워크이므로)

private subnet

하단에 서브넷 추가하기 버튼을 눌러 한번에 private subunet도 만들어준다.


잘 만들어졌다.

Internet Gateway, routing table 생성 및 연결

인터넷게이트웨이(IGW, Internet Gateway)는 VPC와 인터넷 사이의 통신을 가능하게 해주는 라우터이다.

기본적으로 VPC는 인터넷 게이트웨이 없이는 외부와의 통신이 불가능한, 차단되어있는 환경이기에 반드시 igw 연결을 해주어야한다.

IGW 생성 및 VPC 연결

VPC 서비스 → 인터넷 게이트웨이 메뉴 → 인터넷 게이트웨이 생성

이름은 그냥 boolock-igw1으로 해주었다.

만들어진 인터넷 게이트웨이를 선택 → 작업 → VPC 연결을 누르면 VPC와 연결이 가능하다. (해당 VPC에서 이 igw를 라우팅테이블에 연결하여 사용할 수 있다.)

위에 만들어둔 boolock-vpc 선택하여 연결해주면 boolock-vpc에서 이 igw를 사용할 수 있다.

routing table 생성 및 라우팅 설정

만들어진 IGW를 용도에 맞게(VPC와 인터넷 사이 통신) 사용하려면 routing table로 서브넷과 연결해주어야한다.

VPC 서비스 → 라우팅 테이블 메뉴 → 라우팅 테이블 생성

퍼블릭 라우팅테이블 설정 프라이빗 라우팅테이블 설정

라우팅테이블도 public, private subnet에 맞게 public, private용 두 개 만들었다.

생성된 라우팅테이블을 선택해서 라우팅 정보를 보면 이렇게 기본적으로 10.100.0.0/16 으로 하나 설정되어있다.

같은 VPC 내부 통신에 대한 라우팅 연결이다.

public subnet은 인터넷 게이트웨이와 연결하여 외부에서 접근할 수 있도록 해야하니 라우팅테이블 편집을 해주어야한다.

라우팅 편집 버튼 → 라우팅 추가 버튼 → 라우팅 설정

위와 같이 인터넷 게이트웨이를 라우팅 설정 해준다.

그리고 각 라우팅 테이블에 서브넷 연결도 해주어야한다.

라우팅테이블 선택 → 서브넷 연결 → 명시적 서브넷 연결의 서브넷 연결 편집을 눌러서 들어가면 라우팅테이블에 서브넷 연결을 해줄 수 있다.

EC2 인스턴스 만들기

EC2 서비스 → 인스턴스 메뉴 → 인스턴스 시작

Public Server

이미지 및 인스턴스 유형 설정

boolock-public-server 이름으로 설정

이미지는 ubuntu LTS(24.04), 인스턴스 유형은 프리티어 사용을 위해 t2.micro로 해주었다.

키페어 설정

만들어진 서버에 ssh로 접속하기 위해선 key가 필수인데, 난 이미 public-key를 만들어 둔 게 있어서 이걸 사용했다.

키가 없으면 새 키 페어 생성 을 클릭해서 새로 만들어주면 된다. (로컬 환경이 window 여도 pem 파일로 만들자. 어차피 puttygen 에서 ppk로 변경 가능하다)

네트워크 설정

네트워크 설정 우측에 편집 버튼이 있다. 이걸 클릭해서 vpc, subnet등을 별도로 설정해준다.

만들어 둔 vpc, public subnet을 설정해주고 퍼블릭 서버이니 퍼블릭 ip 자동 할당을 활성화 해준다.

보안 그룹 설정

만들어 둔 보안 그룹이 없으니 인스턴스를 만들며 같이 설정해준다.

인바운드 규칙은 이렇게 설정해준다.

AWS에서는 유형과 소스 유형을 선택하면 자동으로 프로토콜, 포트범위, 리소스를 자동으로 할당해주더라.

가상 서버에 터미널로 접속해야 하니 ssh, 퍼블릭 서버에서 웹배포를 해야하니 http, https 유형을 인바운드 규칙으로 설정해준다.

Private Server

프라이빗 서버도 이미지와 인스턴스 유형은 퍼블릭 서버와 똑같이 설정해준다.

키페어 또한 private-key 만들어 둔 게 있어서 그걸 사용해주었다.

네트워크 설정

프라이빗 서버는 private subnet에 할당해주고, 퍼블릭 ip는 당연히 비활성화 해준다.

보안 그룹 설정

프라이빗 서버 보안 그룹은 위와 같이 설정해주었다.

퍼블릭 서버를 bastian server 삼아 프라이빗 서버에 접속할 것이니 ssh 유형에 리소스는 퍼블릭 서버의 프라이빗 ip 주소를 할당해준다.

그리고 프라이빗 서버는 MongoDB용 서버로 사용할 것이고 이것 또한 ssh 터널링으로 퍼블릭 서버에서만 접근할 것이니 TCP/27017로 설정해주고 퍼블릭 서버의 프라이빗 ip 주소를 할당해준다.

서버 연결 확인

ssh config 파일을 이렇게 설정해준다.

퍼블릭 서버 연결 확인 프라이빗 서버 연결 확인

ssh 연결할 때 PowerShell을 쓰지만, vscode의 RemoteSSH 익스텐션을 사용하여 연결하기도 하는데, 둘 다 잘 연결된 걸 확인할 수 있다.

퍼블릭 서버는 핑도 잘 된당 ~

프라이빗 서버는 NATgateway 설정을 해주지 않아 프라이빗 서버 자체에선 인터넷 연결이 안 되어 핑 안 되는 것도 확인할 수 있다.

1개의 댓글

comment-user-thumbnail
3일 전

AWS 프리티어에서도 일정기간 지나면 과금되던데, 과금설정 잘하세요..!

답글 달기

관련 채용 정보