AWS EC2 로 내 서버 구축하기

AWS에서 쉽게 서버를 만들고 삭제할 수 있다. 이 모든걸 무료로 해볼 수 있으니 해보자.

AWS 회원가입

먼저 회원가입을 해야한다. 비회원으로는 아무것도 할 수 없다.

https://aws.amazon.com/ko/

에 접근 하면 우측 상단에

AWS 계정 생성  버튼이 있다.

회원가입 버튼 이미지

클릭한다.

400 bad request 오류 페이지가 출력된다… !?

다시 몇번 재시도 하니 정상적인 회원가입 페이지가 출력됐다.

가입할 이메일과 이름을 입력하고 이메일 주소 확인을 클릭한다.

확인코드를 입력하라는 화면이 뜨고, 이메일로 아래와 같은 메일이 전송된다.

코드를 입력하고 확인을 클릭한다.

적절히 강력한 암호를 입력하고 다음으로 넘어간다.

개인정보를 입력하는 화면이 출력되고 모두 영어로 입력하면 된다.

가입하기 위해서는 신용카드 정보가 필수로 필요하다.

신용카드 정보까지 입력되면 회원가입이 완료된다.

EC2 인스턴스 생성

본격적으로 서버구축을 위해서 aws 콘솔에 로그인을 한다.

https://console.aws.amazon.com/

로그인이 완료되면 화면에 좌측 상단 검색 영역에 “EC2”라고 입력한다.

서비스 중에 EC2라는 항목이 검색되고 클릭하면 EC2 대시보드로 이동하게 된다. (이동하기전에 EC2옆에 별을 클릭하면 즐겨찾기에 추가가 된다.)

우측상단에 리전 설정이 서울로 되어 있는지 확인한다.

서울 이외의 곳으로 서버를 생성하면 국내에서는 속도가 느리다.

현재 내 대시보드를 보면 인스턴스 1개가 구동되고 있는 것을 볼 수 있다.

대시보드 중앙 근처를 보면,

인스턴스 시작이라는 영역이 있다. 표시해 놓은 것처럼 인스턴스 시작 버튼을 클릭한다.

설정하는 화면에 내용이 길어서 스크롤을 내리면서 설정이 필요하다.

프리티어라고 표기가 되어있는 것만 선택 유지한다.

로그인을 위한 키페어를 생성해야한다.

생성한 키페어는 다시 받을 수 없으니 생성후에 잘 보관하자

새 키 페어 생성 버튼을 클릭한다.

키페어 이름을 입력한다. 나는 mykeypair 이라고 입력했다. 자기가 편한 이름으로 입력하면 된다. 나는 맥이기 떄문에 .pem 을 선택했지만, 윈도우 환경이라면 .ppk로 설정해서 생성하면 된다. 그러면 Putty에서 사용이 가능하다.

키페어 생성 버튼을 클릭하면 자동으로 파일이 다운로드 되고, 키페어 영역에도 생성된 키페어가 자동으로 설정된다.

네트워크 부분 설정도 일단 웹서비스를 한다는 가정하에 http, https 트래픽 허용으로 체크한다.

나머지 스토리지는 기본설정으로 두고,

고급설정을 열면 깜짝놀라니 열지도 말고, 프리티어 조건을 확인하고 인스턴스 시작을 클릭한다.

인스턴스가 성공적으로 시작했다.

SSH 접속

AWS 콘솔에서 인스턴스 메뉴로 이동하면 위에서 생성한 서버를 확인할 수 있다.

현재 서버는 삭제된 상태라 접근이 불가하니 시도하지 말 것
ssh -i mykeypair.pem ec2-user@13.125.253.70

-i 옵션으로 pem파일을 지정할 수 있다.

기본적으로 레드햇으로 서버를 생성하면 ec2-user 로 계정이 생성된다.

퍼미션 오류가 발생

키페어 파일의 퍼미션이 644라서 접근이 불가능하다.

400으로 수정해줘야 접속이 가능하다.

sudo chmod 400 mykeypair.pem

퍼미션을 위 명령어로 수정해주고, 다시한번 접속시도를 한다.

➜  Downloads ssh -i mykeypair.pem ec2-user@13.125.253.70
[ec2-user@ip-172-31-37-200 ~]$ 

바로 접근할 수 있었다.

ID, PASSWORD 로 접속할 수 있게 설정

ssh로 접속할 때, 키페어파일을 무조건 사용하는 것은 보안상 필요한 부분이다. 하지만 단순한 개발용도거나 테스트용 혹은 토이프로젝트 용도이고, 어디서나 접속을 편하게 하고 싶다면 아이디/패스워드로 접근해도 괜찮을 것 같다. 그러기 위해서는 sshd 컨피그 파일의 수정과 ssh 데몬의 재시작이 필요하다.

아직 서버 접속이 끊어지지 않은 상태라면,

sudo su -

명령어로 루트 계정에 접근한다.

[ec2-user@ip-172-31-37-200 ~]$ sudo su -
[root@ip-172-31-37-200 ~]# 

위 처럼 루트 로그인 상태가 되면, sshd config 파일을 수정한다.

vi /etc/ssh/sshd_config

vi로 컨피그 파일을 연다.

PasswordAuthentication yes 가 주석처리 되어있는데 주석을 해제한다.

혹은 no 라고 되어있으면 yes로 변경해준다.

그리고 :q -> wq 명령어로 저장하고 나온다.

그리고 sshd를 리스타트한다.

service sshd restart

그런데 ec2-user에 비밀번호가 아직 없다.

설정해주자.

[root@ip-172-31-37-200 ~]# passwd ec2-user
Changing password for user ec2-user.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@ip-172-31-37-200 ~]# 

자, 모든 준비가 완료되었다. 접속을 끊고 다시 아이디 비번으로 접속해보자.

➜  Downloads ssh ec2-user@13.125.253.70                 
ec2-user@13.125.253.70's password: 
Last login: Fri Jul  8 14:36:56 2022 from 121.131.42.118
[ec2-user@ip-172-31-37-200 ~]$ 

테스트로 NGINX 웹서버 구동

기본적인 서버구축이 모두 완료되었는데, 뭔가 해보고 싶다.

웹서버를 띄워보자.

아직 접속을 끊지 않았다면, 루트로 접근해서 yum으로 nginx설치를 진행해본다.

yum install nginx

뭔가 주루룩 나오더니 y/n 을 묻는다. y를 입력하고 진행하자.

마지막에 Complete 라고 있는거 보니 잘 설치 된 것 같다.

이미 서버 인스턴스를 생성할 때, http에 대한 트래픽을 허용했으니 브라우져에서 아이피로 접근해보자.

기대기대!!

얼래? 접속이 안된다.

0.1초 생각해보니 nginx를 설치만하고 구동하지 않았다.

다시 서버에 접속해서 루트계정으로 nginx를 구동한다.

➜  Downloads ssh ec2-user@13.125.253.70
ec2-user@13.125.253.70's password: 
Last login: Fri Jul  8 14:49:23 2022 from 121.131.42.118
[ec2-user@ip-172-31-37-200 ~]$ sudo su -
마지막 로그인: 금  7월  8 14:49:29 UTC 2022 일시 pts/0
마지막 로그인 실패: 금  7월  8 14:52:12 UTC 2022 82.222.252.38에서 시작 일시 ssh:notty 
마지막 로그인 후 1 번의 로그인 시도가 실패하였습니다.  
[root@ip-172-31-37-200 ~]# nginx
[root@ip-172-31-37-200 ~]# 

로그인 실패한적이 없는데 저 로그인 시도는 뭘까? 역시 아이디/패스워드는 위험한 것 같다!

아무튼 이제 다시 브라우저로 접속해보자.

Nginx 의 기본 화면이 제대로 출력된다.

오늘은 AWS의 EC2를 가지고 놀아봤다.

다음에는 AWS의 CloudFormation 으로 놀아보겠다.

혹시 모를 과금이 불안하면 나처럼 인스턴스를 삭제한다.

괜히 운영중인 서버 삭제하지 마라... 큰일난다.