참고

이 글은 최원근님의 강연 'AWS Elastic Beanstalk 활용하여 수 분만에 코드 배포하기'
을 정리한 내용입니다.

Slide Share 강연 링크

Elastic Beanstalk

웹 어플리케이션/웹 서비스를 배포하고, 확장하고 관리하는데 있어 쉽고 빠르게 할 수 있도록 돕는 완전 관리형 서비스이다. 즉, 개발에 필요한 환경(Enviroment)을 미리 구성해놓으면 그 환경을 기반으로 Auto Scaling 및 다중 인스턴스 배포를 수월하게 할 수 있다.
이 뿐만아니라 업데이트, 로그 관리 기능도 지원한다.

장점

  1. 시간 및 비용 절감
  2. 사용에 따른 추가 요금이 없음 (사용되는 리소스에 대해서만 비용 지불)
  3. 빠르고 간단한 시작
  4. 개발자 생산성
  5. 완전한 자원 제어
  6. 불필요한 자원 낭비 없음.

Elastic Beanstalk 구성 시나리오

  1. 환경 전체 구성 (Elastic Beanstalk)
  2. 로드 밸런서 추가
  3. Auto Scaling Group 설정
  4. EC2 인스턴스 시작
  5. 모든 구성 연결
  6. DNS 설정하여 외부에 Publish
  7. 로그 및 앱 버전 설정 S3에 저장.

Elastic Beanstalk Infra Structure 구성

  1. 사용자코드 : 사용자는 애플리케이션 작성에만 집중한다
  2. HTTP 서버
  3. APP 서버, 인터프리터
  4. 운영체제
  5. 호스트

사용자 코드를 제외한 환경을 Beanstalk가 관리한다. 이는 개발자가 개발코드에만 집중할 수 있도록 하는데 의의가 있다. Beanstalk는 선택한 플랫폼의 응용프로그램을 실행하는데 필요한 구성요소로 EC2 인스턴스를 구성한다.

Elastic Beanstalk 애플리케이션 배포에 필요한 정보

  1. 코드
  2. 리전
  3. 스택타입 : php, nodeJS, .net , docker , java 등등...
  4. 단일 인스턴스 또는 오토스켈링및 로드밸런싱 (둘중 택)
  5. 데이터 베이스(RDS) : 선택사항

Elastic Beanstalk 업데이트 배포 정책

  • All at once : 모든 인스턴스에 동시에 새 버전을 배포한다. 배포시간은 가장 짧지만 모든 인스턴스가 업데이트 되기 때문에 다운타임이 발생한다.

  • Rolling update : 기존 인스턴스 중 일부를 배치 단위로 선정하여 새 버전을 배포한다. 업데이트 중인 배치 인스턴스에 대해서는 서비스가 작동하지 않을 수 있다. 즉 서비스 다운타임을 방지하기 위해 일부 인스턴스만 먼저 업데이트하고 그 후 나머지 인스턴스를 업데이트 하는 방식이다.

  • Rolling update with additional batch : Rolling Update 방식을 그대로 따르나, Rolling Update 방식처럼 기존의 인스턴스외에 추가 인스턴스를 구성하여 배포하는 방식이다. 추가 인스턴스를 구성하기 때문에 Rolling Update에 비해 배포시간이 더 많이 걸리지만 배포 실패시의 영향은 더 적다.

  • Immutable : 기존의 인스턴스는 그대로 두고, 새로운 Auto Scaling 배치 그룹을 생성한다. 따라서 Rolling Update처럼 기존의 인스턴스에 변화가 생기지 않는다. (기존인스턴스가 변하지 않기때문에 immutable이라고 한다.) 새 배치 그룹에는 먼저 하나의 인스턴스만을 붙여서 정상적으로 동작하는지 체크하다가 정상적이라면 기존의 인스턴스 갯수만큼 배포 인스턴스들을 띄우게 된다.

Blue/Green update 배포 정책

Immutable 방식이 Environment내에서 배치 그룹을 추가한것이라면 , blue/green 업데이트 배포정책은 Environment 자체를 새로 생성하는 방식이다. 따라서 이 작업을 수행시 먼저 기존의 Environment를 clone하여 새로운 환경을 생성한다. 환경은 클로닝되었지만 이 둘의 DNS 주소는 서로 다르기 때문에 기존 환경과 새로운 환경의 URL을 교체(Swapping)하는 작업을 하게 된다.

  • 장점 : 이전 환경이 여전히 실행중이므로 언제든지 빠른롤백이 가능하며, 다운타임없이 배포가 가능하다. 또한 새로운 환경 배포가 실패하더라도, 기존 인스턴스에 영향을 미치지 않는다.
  • 단점 : 새로운 환경이 생성되기 때문에 배치가 느리다. (평균 5분정도 소요.) 또한 RDS까지 구축되어있는 경우 자동 Clone이 안되기 때문에, RDS는 별도로 복제가 필요하다.

Elastic Beanstalk 관리형 플랫폼 업데이트.

Elastic Beanstalk에는 환경을 유지관리할 수 있는 기능이 있다. 현재 Environment가 설정된 유지관리기간 (Maintenance Window) 동안 자동으로 최신 버전의 플랫폼으로 업그레이드 되도록 구성할 수 있다.

  • 권한, 유지 관리 기간 설정
  • 마이너/패치 업데이트

Elastic Beanstalk 알람과 알림

Elastic Beanstalk에서는 모니터링과 알람 설정을 위해 CloundWatch 를 사용한다. 주요 지표가 정상 범위를 벗어났을때 알람을 보내는데 사용하는 알람을 매우 쉽게 설정할 수 있다.

CloudWatch 로그 스트리밍

Elastic Beanstalk는 Amazon EC2 인스턴스에 프록시 및 배포 로그를 위한 CloudWatch Logs 로그 그룹을 만들어 이러한 로그 파일을 CloudWatch에 실시간으로 전송하는 기능이 있다.

  • Configuration -> Software -> Modify -> Rotate logs 활성화
  • Log Streaming 활성화 및 Retention/LifeCycle 옵션 설정.