Tech & Programming/서버 & 보안

REST API 서버구축(1/ 2) - AWS EC2 인스턴스 생성

소스코드 요리사 2018. 4. 6. 18:02

  지난 번 Toy project 로 진행한 '기분 좋은 인사'의 기능 업데이트 중 메시지와 이미지 등을 전송받기 위해서 API 서버가 필요하게 되었습니다. 그래서, 이번 글에서는 제가 간단하게 API 서버를 구축해나간 과정을 정리 소개해보겠습니다.

글이 길어 1부, 2부로 나누어 적을까 합니다. 1부는 아마존 AWS를 이용해 기본 EC2 인스턴스를 생성하는 방법을 쓸 생각이고, 2부는 Python, Django 등을 설치하는 과정을 적을까 합니다.



AWS 프리티어를 이용한 서버 환경 구축

개인적으로 서버를 가지고 있지도 않고, 회사 서버를 쓰기에도 눈치가 보여서 그냥 제일 유명한 AWS를 사용하기로 했습니다. 유명 클라우드 서비스를 한번 경험해보고 싶었습니다.
AWS 요금이 비싸다는 글은 종종 보았지만 Toy Project이고, 안드로이드 마켓에 정식 릴리즈 후에도 많은 사용자가 쓰지는 않을 것 같아 요금이 부담이 적을 것 같았습니다. 일단 프리티어를 사용하면 1년간 무료이니 금상첨화라고 생각했습니다.


AWS 서버환경 구축 방법

1. 아래 링크에서 회원가입을 합니다.
아마존 AWS 프리티어 : https://aws.amazon.com/ko/free/ 무료계정 생성방법은 특별한 어려움이 없어서 생략합니다.
혹시 그래도 어렵다하시는 분은 구글링하시면 금방 찾을 수 있습니다.
참고로 가입하시다보면 카드정보를 입력하는 부분이 나옵니다. 입력하신다고 바로 결제되는 것은 아니니 걱정 안하셔도 됩니다. 운영하다가 프리티어 조건을 초과하게되면 그 때 과금이 됩니다.


2. 회원가입을 하고 AWS 콘솔에 로그인을 합니다.
그리고 나오는 화면에서 서비스 지역을 먼저 선택하고, 모든서비스 - EC2 를 클릭합니다.
국내서비스를 한다면 '서울'을 선택하시고 국외 서비스라시면 서비스하실 지역을 선택하시면 됩니다.
저는 실수로 '오하이오' 를 선택하고 세팅을 Django 설치를 했었는데 SSH 연결 및 콘솔 연결 시 체감속도가 차이가 나더군요.




3. Amazon Machine Image 를 선택합니다.
한마디로, 서버에 설치할 OS를 설치합니다. 저는 Python, Django, Maria DB 등 모든 환경을 제가 설치할 생각이라 Ubuntu Server 를 선택했습니다.
참고로 프리티어 사용 가능이라고 적힌 것들만 프리티어가 적용되는 선택에 유의하시길 바랍니다. 

이후 단계에서도 보시면 아시겠지만 프리티어는 선택권이 없습니다.



4. 인스턴스 유형을 선택합니다.
서버의 하드웨어 스펙 및 네트워크 성능 등을 결정합니다. 그리고, 검토시작을 누르면 인스턴스구성, 스토리지추가, 태그추가, 보안그룹구성의 상세설정들이 기본값으로 하고 바로 검토 단계로 이동합니다.
상세한 설정을 하기 위해서는 '다음:인스턴스 세부정보구성' 이라는 버튼을 클릭합니다.





아래 5~8은 상세 세부정보를 구성하시려는 분만 보시면 될 것 같습니다.


5. 인스턴스 세부정보구성을 합니다.

  • 인스턴스 개수 (Number of instances) : 생성할 인스턴스의 개수입니다. 한번에 동일한 여러개의 인스턴스를 생성할 수 있습니다.

  • 구매옵션 (Purchasing option) : 스팟 인스턴스 구매 옵션으로 체크박스에 선택을 하면 스팟 인스턴스 구매 옵션과 관련된 최대가격 입력창이 나옵니다. 스팟 인스턴스란 경매 방식의 인스턴스로 인스턴스의 사양의 설정하고 입찰하면 가장 높은 가격을 제시한 사용자에게 인스턴스가 할당되는 방식으로 해당 사양의 인스턴스를 더 높은 가격에 입찰한 사람이 있다면 자신의 인스턴스는 종료되는 방식입니다. 그러므로 중단되어도 상관없는 경우에 사용하는 것이 안전합니다. 스팟 인스턴스는 데이터 분석, 배치 작업, 백그라운드 프로세싱 및 선택적 작업에 매우 적합하다고 합니다. 자세한 사항은 아마존 자습서를 참조하시면 됩니다.

  • 네트워크(Network) : VPC(Virtual Private Cloud) 네트워크를 선택하는 옵션입니다. VPC는 가상 네트워크를 정의하고 그 네트워크 안에서 AWS 리소스가 실행될 수 있도록 합니다. 가상의 VPN을 구성하는 것으로 생각하시면 될 것 같습니다. 회사의 다른 지사와 네트워크 연결을 하기위해 VPN 장비를 설치하고 연결하는 것과 비슷하다고 할까요? 상세한 사항은 역시 아마존 자습서를 참조하시면 됩니다.

  • 서브넷(Subnet) : 가용역역을 선택할 수 있으며 여러 EC2 인스턴스를 서로 다른 네트워크로 분리하는데 사용될 수 있습니다.

  • 퍼블릭IP 자동할당(Auto-assign Public IP) : Public IP 할당 옵션입니다. 인터넷에서 인스턴스에 연결할 수 있도록 하기 위해 Amazon의 퍼블릭 IP 주소 풀에서 퍼블릭 IP 주소를 요청합니다. 인스턴스에 외부에서 접속할 때 퍼블릭 IP 또는 퍼블릭 DNS로 접속합니다.

  • IAM역할(IAM Role) : 만들어 놓은 IAM Role을 설정할 수 있습니다. 자세한 사항은 아마존 자습서를 참조하시면 됩니다.

  • 종료 방식(Shutdown behavior) : EC2 인스턴스의 OS를 종료했을 때 인스턴스의 후속 작업을 선택합니다. 중지(Stop)는 인스턴스를 정지하지만 종료(Terminate)는 정지하고 삭제한다.

  • 종료 방지 기능 활성화(Enable termination protection) : 실수로 인스턴스를 종료(Terminate)하는 것을 방지하는 옵션이다.

  • 모니터링(Monitoring) : Amazon CloudWatch 모니터링 사용을 설정하는 옵션입니다. 인스턴스의 지표를 모니터링, 수집, 분석할 수 있습니다. 추가요금이 발생합니다.

  • 테넌시(Tenancy) : 공유 인스턴스 혹은 전용 인스턴스를 지정하는 옵션입니다. 공유 인스턴스는 하나의 서버에서 여러 개의 인스턴스를 실행하는 방식이며 전용 인스턴스는 하나의 서버에서 하나의 인스턴스를 실행하는 방식입니다. 당연히 전용 인스턴스는 공유 인스턴스보다 가격이 비쌉니다.

  • T2 무제한(T2 Unlimited) : T2 무제한을 활성화하면 언제든지 필요한 만큼 애플리케이션을 기준 이상으로 버스트할 수 있습니다.

  • 사용자 데이터 : 시작 시 인스턴스를 구성하거나 구성 스크립트를 실행할 때 사용할 사용자 데이터를 지정할 수 있습니다.



6. 스토리지를 구성합니다.

  • 디바이스(Device) : 설치된 OS에서 표시될 장치의 이름입니다.
  • 볼륨유형(Volume Type) : General Purpose와 Provisioned IOPS그리고 Magnetic를 설정할 수 있습니다.
    General Purpose와 Provisioned IOPS는 SSD를 사용합니다. General Purpose는 1GiB당 3IOPS를 제공하고, Provisioned IOPS는 I/O 대역폭을 설정할 수 있습니다. Magnetic은 일반적인 하드디스크 스토리지를 사용하며, IOPS는 Provisioned IOPS 옵션을 선택하면 활성화 됩니다.
  • 종료 시 삭제(Delete on Termination) : 인스턴스가 실행 중 스토리지가 삭제되는 것을 방지합니다.



7. 인스턴스에 태그를 부여합니다.
EC2 리소스를 관리하기 위한 태그를 부여합니다.



8. 보안그룹을 구성합니다.
일단 기본적으로 외부에서 접근하기 위해서 SSH 포트인 22번 포트는 열려있습니다. Source를 Anywhere가 아닌 MyIP나 Custom IP로 지정하여 범위를 설정할 수도 있습니다. 기본값 외 다른 보안정책도 반영할 수 있습니다.





9. 인스턴스의 구성을 검토 후 생성합니다.




Putty를 이용한 SSH 연결방법


인스턴스를 생성 후 위 그림과 같은 키페어 생성 창이 뜰겁니다. 여기서 발급 받은 키로 원격에서 콘솔로 접속 할 수 있습니다. 

더 정확하게 이야기하면 SSH로 접속을 위해서는 아래 자습서에 따라 인스턴스 생성 때 발급받은 키로 Putty 개인키를 생성해 접속해야합니다.

아래 그림과 자습서를 참조하시면 이해가 빠르실껍니다.

SSH 및 Putty 연결 아마존 자습서



SSH를 이용하여 root 권한 접속방법

SSH에 접속해서 Python, Django, DB 등을 설치하다보면 root 계정이 필요합니다.
AWS EC2에서는 기본적으로 root 권한 접속이 안됩니다. 따라서, 아래와 같이 설정 후 su 명령어 및 root로 바로 접속 할 수 있습니다.


1. 아래 그림과 같이 /etc/ssh/sshd_config 파일을 수정합니다.  


#PermitRootLogin yes 에서 주석을 해제합니다.



2. cd ~ 입력하여 ec2-user(ubuntu)계정의 홈디렉토리로 이동하여 SSH 접속시 인증에 사용되는 인증키를 root계정으로 접속할때도 사용될 수 있도록, root계정의 경로에 복사합니다.  

  $ sudo cp .ssh/authorized_keys /rooot/.ssh/  


3. sshd 서비스를 재시작 합니다.

  $ service sshd restart


4. root계정을 사용하여 ssh를 접속합니다.




다음 글에서는 설치한 인스턴스에 Python, 마리아DB, Django 등 설치하는 방법에 대해서 소개하겠습니다.