참고
이 글은 최원근님의 강연 'AWS Elastic Beanstalk 활용하여 수 분만에 코드 배포하기'
을 정리한 내용입니다.
Elastic Beanstalk
웹 어플리케이션/웹 서비스를 배포하고, 확장하고 관리하는데 있어 쉽고 빠르게 할 수 있도록 돕는 완전 관리형 서비스이다. 즉, 개발에 필요한 환경(Enviroment)을 미리 구성해놓으면 그 환경을 기반으로 Auto Scaling 및 다중 인스턴스 배포를 수월하게 할 수 있다.
이 뿐만아니라 업데이트, 로그 관리 기능도 지원한다.
Elastic Beanstalk 구성 시나리오
Elastic Beanstalk Infra Structure 구성
사용자 코드를 제외한 환경을 Beanstalk가 관리한다. 이는 개발자가 개발코드에만 집중할 수 있도록 하는데 의의가 있다. Beanstalk는 선택한 플랫폼의 응용프로그램을 실행하는데 필요한 구성요소로 EC2 인스턴스를 구성한다.
Elastic Beanstalk 애플리케이션 배포에 필요한 정보
Elastic Beanstalk 업데이트 배포 정책
All at once : 모든 인스턴스에 동시에 새 버전을 배포한다. 배포시간은 가장 짧지만 모든 인스턴스가 업데이트 되기 때문에 다운타임이 발생한다.
Rolling update : 기존 인스턴스 중 일부를 배치 단위로 선정하여 새 버전을 배포한다. 업데이트 중인 배치 인스턴스에 대해서는 서비스가 작동하지 않을 수 있다. 즉 서비스 다운타임을 방지하기 위해 일부 인스턴스만 먼저 업데이트하고 그 후 나머지 인스턴스를 업데이트 하는 방식이다.
Rolling update with additional batch : Rolling Update 방식을 그대로 따르나, Rolling Update 방식처럼 기존의 인스턴스외에 추가 인스턴스를 구성하여 배포하는 방식이다. 추가 인스턴스를 구성하기 때문에 Rolling Update에 비해 배포시간이 더 많이 걸리지만 배포 실패시의 영향은 더 적다.
Immutable : 기존의 인스턴스는 그대로 두고, 새로운 Auto Scaling 배치 그룹을 생성한다. 따라서 Rolling Update처럼 기존의 인스턴스에 변화가 생기지 않는다. (기존인스턴스가 변하지 않기때문에 immutable이라고 한다.) 새 배치 그룹에는 먼저 하나의 인스턴스만을 붙여서 정상적으로 동작하는지 체크하다가 정상적이라면 기존의 인스턴스 갯수만큼 배포 인스턴스들을 띄우게 된다.
Immutable 방식이 Environment내에서 배치 그룹을 추가한것이라면 , blue/green 업데이트 배포정책은 Environment 자체를 새로 생성하는 방식이다. 따라서 이 작업을 수행시 먼저 기존의 Environment를 clone하여 새로운 환경을 생성한다. 환경은 클로닝되었지만 이 둘의 DNS 주소는 서로 다르기 때문에 기존 환경과 새로운 환경의 URL을 교체(Swapping)하는 작업을 하게 된다.
Elastic Beanstalk 관리형 플랫폼 업데이트.
Elastic Beanstalk에는 환경을 유지관리할 수 있는 기능이 있다. 현재 Environment가 설정된 유지관리기간 (Maintenance Window) 동안 자동으로 최신 버전의 플랫폼으로 업그레이드 되도록 구성할 수 있다.
Elastic Beanstalk 알람과 알림
Elastic Beanstalk에서는 모니터링과 알람 설정을 위해 CloundWatch 를 사용한다. 주요 지표가 정상 범위를 벗어났을때 알람을 보내는데 사용하는 알람을 매우 쉽게 설정할 수 있다.
CloudWatch 로그 스트리밍
Elastic Beanstalk는 Amazon EC2 인스턴스에 프록시 및 배포 로그를 위한 CloudWatch Logs 로그 그룹을 만들어 이러한 로그 파일을 CloudWatch에 실시간으로 전송하는 기능이 있다.