간편하게 사용하는 애플리케이션 플랫폼 서비스 Elastic Beanstalk

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

Elastic Beanstalk으로 Node.js 애플리케이션과 환경 생성하기

Elastic Beanstalk에 사용자가 애플리케이션을 업로드하는 공간을 애플리케이션Application이라고 하고, 애플리케이션을 실행하는 플랫폼을 환경Environment이라고 합니다. Node.js 애플리케이션과 환경을 생성하고, 간단한 문자열을 출력해보겠습니다.

AWS 콘솔로 접속한 뒤 메인 화면에서 Deployment & Management의 Elastic Beanstalk을 클릭합니다.


그림 23-3 Elastic Beanstalk AWS Application Container

오른쪽 위에서 Elastic Beanstalk의 리전을 변경할 수 있습니다. Elastic Beanstalk 애플리케이션을 생성하면 여기서 선택한 리전에 AWS 리소스가 생성됩니다. 이 책에서는 우리나라에서 Tokyo 리전을 사용하겠습니다.


그림 23-4 Elastic Beanstalk 리전 선택

생성한 Elastic Beanstalk 애플리케이션이 하나도 없을 때 그림 23-5과 같은 페이지가 표시됩니다. 위쪽 Create New Application을 클릭합니다(Select a Platform에서 플랫폼을 선택하고 Launch Now 버튼을 클릭하면 옵션 설정 없이 바로 생성됩니다).


그림 23-5 Elastic Beanstalk 메인 페이지

새 Elastic Beanstalk 애플리케이션을 생성합니다(그림 23-6).

  • Application name: 애플리케이션 이름을 설정합니다. exampleapp를 입력합니다.
  • Description: 애플리케이션의 설명입니다. 입력하지 않아도 상관 없습니다.

설정이 완료되었으면 Next 버튼을 클릭합니다.


그림 23-6 Elastic Beanstalk 애플리케이션 설정

애플리케이션을 실행할 환경(Environment)을 생성합니다. 환경은 EC2 인스턴스, Auto Scaling, ELB 등을 조합한 플랫폼을 뜻합니다(그림 23-7).

  • Launch a new environment running this application: 애플리케이션이 실행될 환경을 생성하는 옵션입니다. 애플리케이션은 환경이 없으면 실행할 수 없으니, 나중에라도 생성해야 합니다. 이미 생성된 환경을 사용할 수도 있습니다.
  • Environment tier: 환경 종류입니다. Web Server을 선택합니다.
    • Web Server: 인터넷에서 접속할 수 있는 웹 서버입니다.
    • Worker: 백그라운드 작업을 위한 환경입니다. 이 환경은 인터넷에 연결되어 있지 않습니다. 워커와 웹 서버는 SQS(Simple Queue Service)로 데이터를 주고받아야 합니다.
  • Predefined configuration: 개발 언어입니다. Node.js를 선택합니다.
    • Docker로 서버를 구축하고 배포하려면 Docker를 선택하면 됩니다.
  • Environment Type: 환경의 구성 방식입니다. 기본값 그대로 사용합니다.
    • Load Balancing, autoscaling: 부하 분산과 자동 확장을 사용합니다.
    • Single Instance: EC2 인스턴스 하나만 사용합니다.

설정이 완료되었으면 Next 버튼을 클릭합니다.


그림 23-7 Elastic Beanstalk 환경 설정

실행될 애플리케이션의 소스를 업로드하거나 예제 애플리케이션을 사용합니다. 기본값 그대로 예제 애플리케이션을 선택합니다(그림 23-8).

  • Sample application: Elastic Beanstalk에서 제공하는 예제 소스입니다.
  • Upload your own: 사용자가 갖고 있는 소스를 업로드합니다.
  • S3 URL: S3 버킷에 저장된 소스를 사용합니다.

Next 버튼을 클릭합니다.


그림 23-8 Elastic Beanstalk 애플리케이션 소스 설정

Elastic Beanstalk 환경의 URL을 설정합니다. 웹 브라우저에서 이 URL에 접속하여 애플리케이션을 사용하게 됩니다(그림 23-9).

  • Environment name: 환경의 이름입니다. 기본값 그대로 사용합니다.
  • Environment URL: 환경의 URL입니다. URL은 유일해야 하므로 Check availability 버튼을 클릭하여 중복되지 않는지 확인합니다. 중복되면 다른 URL을 입력합니다.
  • Description: 환경의 설명입니다. 입력하지 않아도 상관없습니다.

설정이 완료되었으면 Next 버튼을 클릭합니다.


그림 23-9 Elastic Beanstalk 환경 URL 설정

추가 리소스를 생성하고 설정합니다(그림 23-10).

  • Create an RDS DB Instance with this environment: RDS DB 인스턴스를 생성하는 옵션입니다. 이번에는 DB 인스턴스를 생성하지 않을 것이므로 기본값 그대로 체크하지 않습니다.
  • Create this environment inside a VPC: 환경을 다른 격리된 VPC에 생성하는 옵션입니다. 외부에서 접속할 수 없고 내부에서만 접속해야 할 때 사용합니다. VPC에 VPN으로 연결하여 사내망을 구축할 때 활용하면 됩니다. 이번에는 인터넷에서 접속할 수 있게 할 것이므로 기본값 그대로 체크하지 않습니다.

설정이 완료되었으면 Next 버튼을 클릭합니다.


그림 23-10 Elastic Beanstalk 추가 리소스 생성 및 설정

Elastic Beanstalk 환경의 세부 설정입니다(그림 23-11).

  • Instance Type: EC2 인스턴스의 유형입니다. 기본값 그대로 사용합니다.
  • EC2 key pair: EC2 인스턴스에 접속할 때 사용할 키 쌍입니다. 앞에서 생성한 awskeypair를 선택합니다.
  • Email address: 환경에서 주요 내용이 바뀌면 이메일로 내용을 받아봅니다. 이메일을 입력하지 않아도 상관 없습니다.
  • Application health check URL: ELB에서 웹 서버(Node.js, 아파치 웹 서버, Nginx)가 정상적으로 실행되고 있는지 확인할 URL입니다. 입력하지 않으면 / 경로를 사용합니다. 기본값 그대로 비워둡니다.
  • Enable rolling updates: 단계적 업데이트를 사용하는 옵션입니다. EC2 인스턴스의 유형을 변경하거나 EC2 인스턴스를 교체할 때 EC2 인스턴스가 정지되므로 일시적으로 서비스가 중단됩니다. 서비스가 중단되지 않도록 일부 EC2 인스턴스가 운영 중인 상태에서 부분적으로 업데이트합니다. 업데이트가 완료된 EC2 인스턴스에서 트래픽을 처리하고 남은 EC2 인스턴스도 업데이트합니다. 이 기능은 애플리케이션 배포와는 관련이 없습니다. 이번에는 사용하지 않을 것이므로 기본값 그대로 비워둡니다. 자세한 내용은 다음 링크를 참조하기 바랍니다.
    http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rollingupdates.html
  • Cross zone load balancing: 여러 가용 영역에 EC2 인스턴스를 생성하여 로드 밸런싱을 하는 옵션입니다. 기본값 그대로 사용합니다.
  • Connection draining: Auto Scaling이 사용자의 요청을 처리 중인 EC2 인스턴스를 바로 삭제하지 못하도록 방지하는 기능입니다. 자세한 내용은 ‘18장 부하 분산과 고가용성을 제공하는 ELB’을 참조하기 바랍니다. 기본값 그대로 사용합니다.
  • Connection draining timeout: Connection draining 대기 시간입니다. 기본값 그대로 사용합니다.
  • Instance profile: EC2 인스턴스에서 사용할 IAM 역할입니다. 미리 만들어놓은 IAM 역할을 선택할 수도 있고 새로 생성할 수도 있습니다. 기본값 그대로 Create Default Profile을 선택합니다.

설정이 완료되었으면 Next 버튼을 클릭합니다.


그림 23-11 Elastic Beanstalk 환경 세부 설정

Elastic Beanstalk의 환경에 태그를 설정합니다. 7개까지 생성할 수 있습니다. Next 버튼을 클릭합니다.


그림 23-12 Elastic Beanstalk 환경 태그 설정

지금까지 설정한 내용에 이상이 없는지 확인합니다. 이상이 없으면 Launch 버튼을 클릭합니다.


그림 23-13 Elastic Beanstalk 애플리케이션 및 환경 설정 내용 확인

Elastic Beanstalk 애플리케이션과 환경 생성이 시작되었습니다. Health를 보면 Launching이라고 표시됩니다. 완전히 생성되기까지 약 5분 정도 소요됩니다.


그림 23-14 Elastic Beanstalk 애플리케이션 및 환경 생성 중

Elastic Beanstalk 애플리케이션과 환경 생성이 완료되었으면 위쪽 <환경 이름>.elasticbeanstalk.com 링크를 클릭합니다.


그림 23-15 Elastic Beanstalk URL 확인

웹 브라우저에서 Elastic Beanstalk URL에 접속하면 예제 애플리케이션의 내용이 표시됩니다.

그림 23-16 Elastic Beanstalk 예제 애플리케이션

Elastic Beanstalk과 EC2 인스턴스
Elastic Beanstalk으로 애플리케이션과 환경을 생성하면 EC2 인스턴스 목록에 Elastic Beanstalk이 생성한 EC2 인스턴스가 추가되어 있습니다. 이 EC2 인스턴스는 삭제하거나 설정을 변경하지 않는 것이 좋습니다. 삭제하더라도 Elastic Beanstalk이 다시 생성합니다.

Elastic Beanstalk 환경, 애플리케이션, S3 버킷에 저장된 애플리케이션 버전 삭제
Elastic Beanstalk 환경, 애플리케이션, 애플리케이션 버전은 따로 삭제해야 합니다. 환경을 모두 삭제하더라도 애플리케이션과 S3 버킷에 저장된 애플리케이션 버전은 남아 있습니다.

  • 환경 삭제
    1. 삭제할 환경에서 Actions 버튼을 클릭하면 팝업 메뉴가 나옵니다.
    2. Terminate Environment를 클릭합니다.
    3. Terminate 버튼을 클릭합니다.
  • 애플리케이션 버전 삭제: 애플리케이션을 삭제하기 전에 애플리케이션 버전을 먼저 삭제해야 합니다. 그렇지 않으면 애플리케이션이 저장된 S3 버킷이 계속 남아있게 됩니다.
    1. Elastic Beanstalk 애플리케이션 목록에서 Actions 버튼을 클릭하면 팝업 메뉴가 나옵니다.
    2. View Application Versions를 클릭합니다.
    3. 애플리케이션 버전 목록에 표시된 버전들을 모두 선택합니다.
    4. Delete 버튼을 클릭합니다.
    5. Delete versions from Amazon S3를 체크합니다.
    6. Delete 버튼을 클릭합니다.
    7. Done 버튼을 클릭합니다.
  • 애플리케이션 삭제
    1. Elastic Beanstalk 애플리케이션 목록에서 Actions 버튼을 클릭하면 팝업 메뉴가 나옵니다.
    2. Delete Application을 클릭합니다.
    3. Delete 버튼을 클릭합니다.

애플리케이션을 먼저 삭제하여 남겨진 S3 버킷(애플리케이션 버전이 저장된)을 삭제하는 방법

  1. S3 버킷 목록으로 이동합니다.
  2. S3 버킷 목록에서 애플리케이션 버전이 저장된 S3 버킷을 클릭합니다.
  3. S3 버킷에 저장된 모든 파일을 삭제합니다.
  4. 위쪽 Properties 버튼을 클릭합니다.
  5. Permissions 탭을 클릭합니다.
  6. Bucket Policy Editor 창에서 Delete 버튼을 클릭합니다.
  7. 확인 창에서 확인 버튼을 클릭합니다.
  8. All Buckets 링크를 클릭하여 버킷 목록으로 이동합니다.
  9. 삭제할 S3 버킷을 선택하고, 위쪽 Actions 버튼을 클릭하면 팝업 메뉴가 나옵니다.
  10. Delete를 클릭합니다.
  11. 확인 창에서 확인 버튼을 클릭합니다.

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.