이번에 개발하던 프로젝트를 Docker와 AWS ElasticBeanstalk를 통해 배포를 진행 해보게 되었는데,
무작정 배포 하기 보단 EB가 무엇이며, 왜 사용하는지 알고하면 또 다른 느낌이지 않을까하여 한번 정리해 보게 되었습니다.
Elastic Beanstalk은 무엇인가?
웹 어플리케이션/ 웹 서비스를 배포하고, 확장하고, 관리하는데 있어 쉽고 빠르게 할 수 있도록 돕는 완전 관리형 서비스
👉🏻 완전 관리형 서비스란 ?
- 인프라 레벨 쪽으로는 신경쓰지 않아도 되는 서비스 (업데이트, 설치 등등은 AWS가 서비스)
- 코드 레벨에서만 집중 하면 된다
- ex) Dynamo DB, ElasticBeanstalk, etc ..
AWS Elastic Beanstalk의 배경 및 사용 이유
✔️ 개발자들이 가지고 있는 Pain Point
- 코드의 배포, 프로비저닝, 관리가 복잡하다
- 서버, DB, 로드 밸런서, 방화벽 그리고 복잡한 네트워크의 구성 및 관리에 필요한 전문성과 시간이 필요
- 스케일 아웃/인의 자동화가 필요
- 팀내 / 팀 간 갈등이 생길 수 있다
✔️ 인프라의 구성만 놓고 볼 때에도 편리하다
- AWS EC2 인스턴스를 사용하더라도 (os 설치 까지는 AWS가 처리해준다)
- 그럼에도 불구하고 절반 정도의 공수는 더 남아있다.
👉🏻 이러한 배포, 버저닝, 관리 하는 과정 들의 간소화, 개발자는 좀 더 코드 레벨에 집중할 수 있도록 하는 의도,
그리고 위에서 언급한 Pain Point들을 해소하기 위함이 AWS ElasticBeanstalk 탄생 배경으로 볼 수 있다.
✔️ 사용 시 이점은 ?
- 빠르고 간단한 시작
- 개발자 생산성
- 완전한 자원 제어
- 시간과 비용 절감의 효과
- 불필요한 자원 낭비 x
- 사용에 따른 추가 요금이 없음
👉🏻 자동화가 이루어 지면 "내가 컨트롤 할 수 있는 부분들이 줄어드는게 아닌가?" 라 생각 할 수도 있는데
SSH 등 인스턴스 접속을 통해 입맛대로 설정도 가능하다고 하다.
AWS Elastic Beanstalk 인프라스트럭처 스택 구성
✔️ 스택 구성 과정
- Elastic Beanstalk 환경 구성
- EB 환경의 로드밸런서 구성
- 오토스케일링 그룹 설정 (사용량에 따른 스케일 인아웃이 가능)
- 오토스케일링 그룹에 적정한 수의 EC2 인스턴스 구성
- 이 모든 구성요소들을 연결
- DNS 설정을 통해 외부에 Publish
- 모니터링을 위한 로그와 버저닝 정보들은 S3에 모두 저장한다.
👉🏻 오토 스케일링 기법
- Triggers based scaling
- ex) request가 정해 놓은 임계값 보다 높아질 때 스케일 아웃, 그 반대 상황에는 스케일 인
- Time-based scaling
Elastic Beanstalk 애플리케이션 배포에 필요한 정보
- 배포 할 코드
- 리전 (서울, 미국, ... 등)
- 플랫폼 (스택 타입)
- Java, Node.js, Django, Go, Ruby, Docker ...
- 단일 인스턴스로 구성 할 것인지, 로드밸런싱 및 오토스케일링 환경으로 구축 할 것인지 선택
- 데이터베이스 (RDS)
AWS Elastic Beanstalk 배포 옵션
- All at once
- 모든 인스턴스에 동시에 새 버전 배포
- 다운 타임이 존재 한다
- Rolling
- 배치 단위로 새 버전 배포
- 예를 들어, 4개의 인스턴스가 동작 중이라면 2개씩 나눠 업데이트가 이루어진다
- Rolling with additional batch
- 배치 단위로 새 버전 배포, +1 추가 배치
- Rolling과 같은 방식으로 동작, 추가 인스턴스를 배치하여 배포한다 (4 → 6개로 늘려서)
- Immutable
- 새로운 인스턴스 그룹에 배포, 기존 환경 및 그룹을 건들지 않는다
- 여기서 새로운 그룹은, EB 환경내의 오토스케일링 그룹을 일컫는다
- 새로운 그룹 내에서 순차적으로 인스턴스를 생성하여 연결
- Blue/Green
- 새로운 환경 복제 (기존 프로젝트 복제)
- DNS 주소가 서로 다르기 때문에 변경 사항 배포 후 기존 URL 교환 (swap)
- 빠른 롤백이 가능, 다운 타임없이 배포가 가능
AWS Elastic Beanstalk 애플리케이션 관리와 모니터링
- 구동중인 EB 환경에 유지 관리 기간을 설정하여, 그 기간동안 자동으로 최신 버전의 플랫폼으로 업그레이드 되도록 구성 할 수 있다.
- 알람 및 알림
- 주요 지표가 정상 범위를 벗어났을 때 알림을 보내는데 사용 할 알람을 쉽게 설정 가능하다.
- CloudWatch 로그 스트리밍
정리
'간편하게 배포를 해준다' 정도로만 알고 있었는데, 이 외에도 인지하지 못하고 있던 EB 사용의 이점을 알 수 있었던 기회
참고 자료 및 영상