2018년 6월 24일 일요일

AWS EC2 인스턴스 생성하기

 미국의 온라인 유통 기업이었던 아마존은 자신들의 서비스를 구축하는 데 이용하던 기술을 활용해서 클라우드 서비스인 Amazon Web Services(이하 AWS)를 시작했다. 그런데 이게 굉장히 체계적으로 잘 구축되어 있어서 정말 많은 기업들이 도입을 하고 있다. 최근에 작업 했던 국내 대기업의 외주개발 업무에서도 자체 IDC가 아닌 AWS를 이용해서 서비스를 구축하는 것을 보고 국내에서의 위상도 상당하다는 것을 알 수 있었다.

 이에 AWS에 관심을 가지고 좀 알아보니 꽤 쓸만하고 유용한 서비스를 많이 제공하고 있었고 제대로 한번 알아보자는 생각에 1년간 제공하는 무료(Free Tier) 서비스를 이용해서 웹 서비스 개발 환경을 구축해 보려고 한다.

 AWS에서는 정말 다양한 서비스를 많이 제공한다. 하지만 그래도 가장 기본이 되는 건 EC2(Elastic Compute Cloud) 서비스다. EC2는 일반적으로 많은 클라우드 서비스 업체들이 제공하는 가상 서버 서비스와 같다. AWS에서는 가상 서버를 EC2 인스턴스라고 부른다. 마치 프로세스를 하나 실행했다가 종료하는 것처럼 서버를 실행했다가 종료하면 완전히 삭제하게 되고 이렇게 서버가 생성되어있는 동안 과금이 종량제로 이루어지게 된다. 이렇게 얘기하면 "컴퓨터 끄면 데이터 다 날라가는 것인가?"라고 생각하기 쉽지만 흔히 생각하는 컴퓨터를 끄는 동작은 중지라는 개념이고 가상 서버를 삭제하는 종료라는 개념과 다르므로 혼동하지 말기 바란다. 즉, 어떤 서비스를 제공하는 동안에 EC2 인스턴스를 종료할 일은 없고 그 서비스를 더 이상 제공하지 않고 접게(폐업?)되면 그 때 인스턴스를 종료하는 것이라 생각하면 된다.

 일단 가장 먼저 해야할 일은 가상 서버인 EC2 인스턴스를 생성하는 것이다. AWS에 계정을 만들고 로그인 후 "내 계정 > AWS Management Console > 서비스 > EC2"를 거쳐서 EC2 대쉬보드 페이지를 띄워보면 아래와 같은 페이지가 보일 것이다. 지금은 이렇게 되어있지만 메뉴 체계는 얼마든지 바뀔 수 있으므로 알아서 EC2 대시보드 페이지를 찾아가 보도록 하자.


 위 그림에서 빨간색으로 표시해 놓은 부분들을 유심히 보도록 하자. 먼저 우측 상단의 "서울"이라고 표시된 부분에서 인스턴스를 생성할 영역(Region)을 선택할 수 있다. AWS가 구축한 IDC는 세계 곳곳에 있고 영역에 따라서 지원되지 않는 서비스가 있을 수 있으므로 자신이 이용할 서비스의 지원 여부를 알아보고 영역을 선택하는 게 좋겠다. 영역을 선택했으면 이제 중간에 있는 "인스턴스 시작" 버튼을 눌러서 다음 단계로 넘어가자.


 위의 단계는 인스턴스에서 사용할 AMI(Amazon Machine Image)를 선택하는 것이다. 생성되는 서버에서 사용할 OS 이미지를 선택한다고 생각하면 된다. 사실 AMI는 OS뿐만 아니라 그 위에서 특정 서비스를 하는 데 필요한 환경을 모두 구축한 채로 만들어진 것들도 있고 이것을 AWS Marketplace를 통해서 구매할 수도 있다. 원하는 환경에 딱 맞게 만들어진 이미지가 있을 수 있으므로 위 페이지에서 여기 저기 둘러보고 어떤 것들이 있는 지 체크해 보는 것도 좋다.

 일단 여기서는 Amazon Linux 2 이미지를 선택해서 생성해보려고 한다. Amazon Linux는 CentOS 기반이라 어느 정도 익숙하기도 하고 Amazon에서 배포하는 만큼 AWS에 최적화 되어있을 것으로 생각되어 최근에 2로 업그레이드 된 Amazon Linux를 선택하였다. Red Hat, Ubuntu 같은 인기 배포본은 대부분 AMI로 제공되고 있으므로 원하는 이미지를 선택하면 된다. 우측의 "선택" 버튼을 눌러서 다음으로 넘어가자.


 위 단계는 인스턴스 유형을 선택하는 것이다. 여러가지 유형이 있지만 Free Tier에서 사용가능한 유형인 t2.micro를 선택하고 다음으로 넘어가겠다. 어떤 유형들이 제공되는 지 훑어보고 넘어가도록 하자. 여기서 바로 "검토 및 시작" 버튼을 눌러서 많은 부분을 기본 설정으로 두고 건너뛸 수 있지만 추가적으로 설정할 것들이 약간 있으므로 어떤 설정들이 가능한 지 알아볼 겸 빨간색으로 표시한 다음 버튼을 눌러서 다음 단계로 넘어가도록 하자.


 위 단계는 인스턴스의 세부 정보를 구성하는 단계이다. 여러가지 설정 사항이 제공되지만 대부분 사용에 문제가 없는 기본값을 가지고 있으므로 기본 설정으로 두고 다음 단계로 넘어가자.


 위 단계는 인스턴스가 사용할 스토리지를 설정하는 단계이다. 기본 값으로 8GB로 설정되어 있지만 30GB까지 무료이므로 원한다면 더 크게 잡아도 된다. 다른 값들은 그대로 두고 다음 단계로 넘어가자.


 위 단계에서 할 일은 인스턴스에 각종 태그를 추가하는 것이다. 태그 정보를 추가하는 것은 관리해야할 인스턴스가 많아졌을 때 관리를 용이하게 하는 꼬리표들을 달아놓는 것이라고 생각하면된다. 인스턴스가 하나밖에 없을 때는 태그가 하나도 없더라도 문제될 게 없지만 적어도 "Name" 태그 만큼은 꼭 달아놓도록 하자. Name 태그의 값이 인스턴스 목록에서 표시되므로 반드시 추가하도록 한다. 키값으로 Name(대소문자 구분)이라고 입력하고 값으로는 원하는 이름을 넣으면 된다. 여기서는 WebDev라고 넣었다. 이제 다음 단계로 넘어가자.


 위 단계는 보안 그룹을 구성하는 것이다. 일반적인 방화벽 구성이라고 생각하면 된다. 전에 설정해 놓은 보안 그룹이 있다면 기존 보안 그룹을 선택해도 된다. 일단 처음이라고 생각하고 여기서는 위 그림과 같이 설정하도록 하겠다. 기본적인 관리를 위해서 SSH 포트가 이미 추가되어있고 원하는 포트를 추가로 넣으면 된다.  웹 개발용으로 쓸 것이라고 생각하고 HTTP, HTTPS 그리고 Tomcat용 포트를 하나 추가하였다. 여기서 생성한 보안 그룹은 인스턴스와 상관없이 따로 저장되어 다른 인스턴스를 생성할 때도 사용할 수 있으며 인스턴스를 삭제해도 계속 남아있으므로 감안하여 용도에 맞게 이름을 정하면 된다. 이제 거의 다 왔다. 다음 단계로 넘어가자.


 위 단계는 따로 설정할 건 없다. 지금까지 설정한 것들이 제대로 되었는 지 검토해보는 단계이므로 한 번 훑어 보고 "시작" 버튼을 눌러서 인스턴스를 시작 시켜보자.


 시작 버튼을 누르면 생성되는 인스턴스에서 사용할 키 페어를 선택하는 창이 나온다. 인스턴스에 접속하기 위해서는 반드시 키 페어가 필요한데 이번이 처음이라면 아마도 키 페어가 없을 것이므로 "새 키 페어 생성"을 선택하고 키 페어 이름을 적절히 입력한 후 "키 페어 다운로드" 버튼을 눌러 프라이빗 키 파일(.pem)을 다운받도록 한다. 여기서 받은 키 파일을 잃어버리면 다시 다운받을 수도 없고 인스턴스에 접속할 수 있는 방법도 없으므로 절대로 잃어버리지 않도록 주의해서 관리해야 한다. 전에 만들어둔 키 페어가 이미 있고 그 키 페어의 프라이빗 키 파일을 잘 가지고 있다면 기존 기 페어를 선택하고 넘어가도 된다. 이제 "인스턴스 시작" 버튼을 눌려 다음으로 넘어가자.


 드디어 인스턴스 생성 작업이 완료 되었다. 인스턴스가 완전히 시작되는 데는 몇 초 정도 시간이 걸린다. "인스턴스 보기" 버튼을 눌러서 인스턴스 목록 화면으로 가보자.


 인스턴스 목록화면에서 아까 생성한 인스턴스의 상태를 볼 수 있다. 이 화면은 왼쪽 메뉴에서 "인스턴스" 메뉴를 선택하면 언제든지 볼 수 있는 화면이다. 현재 인스턴스의 상태는 running 상태이고 Name 필드에는 아까 태그에 입력한 Name의 값이 보인다. 태그에 Name을 입력하지 않으면 Name 컬럼에 값이 비어있게 되기 때문에 반드시 입력하라고 한 것이다.

 이제 SSH 접속을 하려면 인스턴스의 Public IP를 알아야 하는데 화면 오른쪽 아래를 보면 Public IP값이 표시되어 있다. 그런데 이 값은 고정 IP가 아니라 유동 IP이기 때문에 인스턴스를 재부팅하면 매번 값이 바뀌게 된다. 그래서 일단 SSH 접속을 하기 전에 고정 IP를 할당하여 인스턴스에 부여하도록 하자.


 화면 왼쪽의 메뉴에서 "탄력적 IP"를 선택하면 위와 같은 페이지가 보인다. 탄력적 IP(Elastic IP)는 AWS에서 제공하는 고정 IP라고 생각하면 된다. 일단 고정 IP를 하나 할당받아야 한다. "새 주소 할당" 버튼을 눌러보자.


 버튼을 누르면 위와 같은 화면이 나오는 데 따로 설정하는 건 없다. 그냥 "할당" 버튼을 누르면 된다.


 성공했다는 메시지와 IP 주소가 보일 것이다. 새로 할당된 IP이므로 참고하도록 하자. 여기서 중요한 것은 IP를 할당하고나서 인스턴스에 연결해서 사용하지 않으면 요금이 부과된다는 것이다. IP는 제한된 자원이기 때문에 사용하지 않고 할당만 해두는 것을 막기 위해서 요금을 부과한다. 요금을 피하기 위해서 바로 인스턴스에 연결하도록 하자. 닫기 버튼을 누르면 아래 그림과 같이 할당된 IP의 목록이 보일 것이다.


 할당된 주소를 선택하고 "작업" 버튼을 눌러 메뉴를 보면 "주소 연결"이라는 메뉴가 보인다. 주소 연결 메뉴를 클릭해보자. 


 위와 같은 화면이 나오면 빨간색으로 표시된 인스턴스 선택 버튼으로 방금 생성한 인스턴스를 선택하고 다른 값들은 기본 그대로 둔다. 이제 연결 버튼을 눌러서 계속 진행해 보자.


 별 문제가 없다면 연결이 성공했다는 메시지가 나올 것이다. 닫기 버튼을 누르고 인스턴스 목록 화면으로 가보자.


 화면 하단의 정보들을 자세히 보면 탄력적 IP, 퍼블릭 IP 값들이 바로 전에 할당한 IP 값으로 표시될 것이다. 할당된 탄력적 IP는 인스턴스를 삭제해도 남아있게 된다. 인스턴스를 삭제한 후 연결이 되지 않은 채로 남아있으면 요금이 부과될 것이므로 신경써서 관리하도록 하자. 

 이제 고정 IP도 연결되었으니 SSH 접속을 해보자. SSH 접속은 터미널에서 아래 명령으로 접속할 수 있다. 먼저 다운받은 키 페어 프라이빗 파일의 권한을 체크하여 소유자 외에 다른 사람이 접근가능한 상태라면 접근 권한을 600 으로 바꿔 주도록 한다. 키 파일의 접근 권한이 다른 사람에게도 열려있으면 접속이 거부되므로 반드시 바꿔 주도록 하자. 

// 접근 권한 변경
$ chmod 600 {pem파일 저장 경로}

// SSH 연결
$ ssh -i {pem파일 저장 경로} ec2-user@{인스턴스 퍼블릭 IP}

 인스턴스를 생성할 때 Amazon Linux를 사용했는데 Amazon Linux의 기본 사용자 계정은 "ec2-user" 이다. 사용된 AMI 마다 기본 사용자 계정이 다르므로 자신이 사용한 AMI의 설명을 읽어보거나 약간의 구글링으로 알 수 있으므로 적절한 계정을 사용하기 바란다. 몇 가지 알려진 기본 계정은 아래와 같다.
  • Amazon Linux : ec2-user
  • CentOS : centos
  • Ubuntu : ubuntu
  • RHEL 6.4 later : ec2-user
  • RHEL 6.3 earlier : root
  • Debian : admin
 마지막으로, SSH 접속을 하고나면 아래와 같은 메시지를 볼 수 있다. 


 무엇이 출력되는 지는 사용된 이미지에 따라 다르겠지만 자세히 읽어보면 도움이 된다. 여기서는 yum으로 패키지 업데이트를 하도록 권하고 있다. 업데이트를 실행하여 모든 패키지를 최신 상태로 업데이트를 해놓도록 하자. 

 단계별로 상당히 많은 정보와 관련 링크, 친절한 설명이 같이 표시되어 있으므로 처음 시도하는 거라면 하나 하나 자세히 읽어보면서 진행해 보기를 추천한다. 이제 깔끔한 서버 한 대가 마련 되었으므로 원하는 형태로 활용하면 된다.

댓글 5개: