AWS 사용하기 01 - 간단한 웹 어플리에이션 올려보기
그 동안 IBM Cloud Service 를 계속 사용 하다가 새로 들어가는 프로젝트 부터 AWS 를 사용하게 되었습니다. 아직 손에 익지않아 공부하는 내용을 적어 보려고 합니다.
일단 간단하게 AWS의 EC2 와 Elastic Beanstalk 를 이용해서 웹 어플리케이션을 올리기 까지의 과정을 살펴보겠습니다.
AWS 에 처음 가입하게 되면 1년간 일정한 범위 안에서 무료로 사용할 수 있습니다.(AWS Free Tier) 거의 모든 서비스들을 체험해 볼 수 있기 때문에 설명도 무료 계정을 기준으로 하겠습니다.
1. EC2 인스턴트 실행해보기
먼저 EC2 에 대해 알아보겠습니다.
EC2 는 Elastic Compute Cloud 의 약자 입니다. AWS 에 여러가지 서비스 들이 있지만 EC2 만 놓고 보았을 때 기존의 가상 서버 임대방식과 큰 차이는 없는 것 같습니다. 차이점이라고 하자면 서버 리소스를 자유롭게 확장할 수 있다는 는 점일까요? 아마도 이게 서비스 이름에 Elastic이 붙은 이유인듯.. 서버 관리자 입장에서는 좀 더 차이점이 있을 수도 있겠지만 개발자 입장에서는 큰 차이는 느낄 수 없었습니다.
본격적으로 EC2의 인스턴트를 만들고 => 실행해서 => SSH 로 접속하는 것 까지 알아보겠습니다.
먼저 AWS 에 접속 후 상단의 메뉴에서 Service -> EC2 를 클릭합니다.
EC2 환경이 물리적으로 올라갈 지역을 선택합니다. 저는 현재 일본에 거주 중 이기 때문에 Tokyo 를 선택했습니다.
선택 후 Launch Instance 버튼을 클릭.
Instance 이미지 선택화면이 나옵니다. OS와 서버, 각종 어플리 케이션이 묶여있는 이미지를 입맛대로 고를 수 있습니다.
저는 프리티어로 사용할 수 있는 Amazon Linux 2 AMI 를 선택했습니다.
다음으로 인스턴스 타입 을 선택합니다. 당연한 얘기지만 성능이 높은 인스턴스를 선택할 수 록 가격도 올라갑니다. 여기서는 t2.micro 선택.
주문서 확인하듯 환경구성 확인 후 Launch 버튼 클릭.
SSH 접속시 사용할 Key Pair 를 만들고 다운받습니다. 한번 키를 다운받고 다면 다시 받을 수 없기 때문에 잘 보관해야 합니다.
Instance 생성 후 다시 대쉬보드로 돌아와 잠시 기다리면 Instance State 가 Running 으로 바뀌는 걸 확인할 수 있습니다.
Instance 를 오른쪽클릭 후 Connect 를 클릭하면 SSH 접속하는 방법 이 나옵니다. 이 방법대로 접속해 보겠습니다. Example 의 SSH 로 시작하는 커맨드를 복사합니다.
조금 전 다운받은 Key Pair 가 있는 폴더로 이동 후 콘솔에서 방금 복사 한 커맨드를 붙여넣기 해서 SSH 로 접속 합니다.
정상적으로 쉘에 접속되었습니다.
Elastic Beanstalk 으로 EC2 에 어플리케이션 올리기
Elastic Beanstalk 을 얼핏 봤을때는 Cloud Foundry 와 비슷한 느낌의 PaaS 로 보였습니다만, 한 번 사용해보니 조금 달랐습니다. 어플리케이션을 올리는 PasS 자체라기 보다는 EC2 와 연동해서 어플리케이션을 디플로이하고 관리하는 배포 관리툴 에 더 가까운 느낌이었습니다.
본격적으로 Elastic Beanstalk 를 이용해서 웹 어플리케이션을 EC2 에 올려보겠습니다.
그전에 조금 전 EC2 에서 만들었던 인스턴트는 stop 으로 꺼두시길 바랍니다. 무료 계정에서는 인스턴스를 하나밖에 못돌리기 때문에
먼저 위에 있는 서비스 -> Elastic Beanstalk 를 클릭하여 Beanstalk 서비스 화면으로 이동 후, Beanstalk 의 메인화면에서 Get Started 클릭.
Application Name 에 적당한 이름을 입력하고, Platform 에서 어플리케이션 기동 환경을 선택합니다.
Application Code 항목에서는 AWS 에서 제공하는 샘플 코드를 선택할 수도 있지만 실제 Deploy 방식도 배울겸 zip 파일을 업로드 합니다.
업로드한 zip 파일의 경우 콘솔에서 express node-test
과 같이 익스프레스 scaffolding 을 간단히 만들어 zip 으로 압축해 주었습니다.
Zip 파일을 업로드하고 Create Application 을 누르게 되면 어플리케이션이 빌드 되기 시작합니다.
빌드가 끝나고 나면 Beanstalk 의 Dashbord 에서 업로드한 어플리케이션 상태를 확인할 수 있습니다.
빌드가 끝나고 상태를 확인하니 Degraded 로 어플리케이션이 돌아가지 않고 있습니다. 문제를 해결해 보겠습니다.
왼쪽메뉴에서 Configuration -> Software -> Modify 로 어플리케이션 설정화면으로 들어갑니다.
설정화면을 보게되면 Node Command 항목이 비어있는 것을 확인 할 수 있습니다.
Node Command 항목이 비어있을 경우 Beanstalk 에서는 디폴트로 어플리케이션의 app.js 를 실행하게 됩니다.
하지만 저희가 올린 express 어플리케이션은 디폴트 진입점이 /bin/www
이기 때문에 어플리케이션 실행에 실패한 것입니다.
어플리케이션의 package.json 파일을 보게 되면 npm start 명령을 통해 /bin/www 실행이 정의되어 있는 것을 확인 할 수 있습니다.
[package.json]
{
"name": "node-test",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
......
설정화면에 Node Command 항목에 npm start
를 입력하여 어플리케이션 초기 기동시 www 파일이 실행되도록 설정하겠습니다. 설정을 저장하고 나면 어플리케이션이 다시 빌드 됩니다.
빌드가 끝나고 어플리케이션이 정상적으로 실행되고 있는 것이 확인 되었습니다.
어플리케이션의 URL 로 접속해서 확인.
Beanstalk 로 어플리케이션을 올리게 되면 자동적으로 EC2의 인스턴스도 새로 생성되게 됩니다. EC2 의 대쉬보드로 가서 확인해보면 처음에 만들었던 인스턴스와는 별개로 새로운 인스턴트가 생성되어 돌아가고 있는 것을 확인 할 수 있습니다.