Search

Elastic Beanstalk

Elastic Beanstalk
웹 애플리케이션 및 서비스를 배포하고 운영하는 서비스
사용자가 직접 인프라 리소스를 구성할 필요 없고 애플리케이션 코드에만 집중하면 됨
코드를 업로드하기만 하면 Elastic Beanstalk가 용량 프로비저닝, 로드 밸런싱, Auto Scaling부터 시작하여 애플리케이션 상태 모니터링 등의 배포를 AWS에서 자동으로 처리
Java, .NET, PHP, Node.js, Python, Ruby, Go 및 Docker 등 웹 애플리케이션을 지원
Elastic Beanstalk는 CloudFormation으로 구축되어 있다

Workflow

.ebextensions 파일

Elastic Beanstalk 애플리케이션 환경을 설정할 때 사용하는 폴더
.ebextensions폴더에는 Elastic Beanstalk 환경을 설정하고 관리하기 위한 설정 파일을 넣는다
필요한 프로그램 설치 파일 (예: Apache, Git, Node.js)
명령어 실행 파일
환경 변수 설정 파일 (예: 애플리케이션에 사용되는 DB에 접근하기 위한 변수)
네트워크 설정 파일 (예: Load Balancer나 X-Ray 등의 환경 설정 파일)
애플리케이션의 소스 코드에 (.ebextensions) 폴더를 추가하여 파일 확장자를 .config를 가진 YAML 또는 JSON 형식의 파일을 이 폴더에 배치하여 Deploy(배포)한다.
elasticBeanstalk_application/ ├── .ebextensions/ │ ├── 01_packages.config │ ├── 02_environment.config │ ├── 03_scripts.config │ └── 04_custom_files.config ├── application.py └── requirements.txt
Markdown
복사

Deploy Policy (배포 정책)

Deploy Policy는 애플리케이션을 새로 배포할 때(버전을 바꿀 때) 사용한다
All at One (모두 한꺼번에 배포)
애플리케이션의 모든 인스턴스동시에 새로운 버전으로 배포(Deploy)한다
배포 속도가 다른 방법에 비교하여 가장 빠르다.
서비스가 중단되는 시간이 있다. (인스턴스들이 모두 동시에 업데이트하기 때문에 배포 도중에 서비스가 중단된다)
예시) 4개의 인스턴스 있을 경우 → 4개 한꺼번에 배포
4개의 인스턴스
4개 동시에 배포한다 (이 때 서비스가 중단될 수 있다.)
한꺼번에 배포하기 때문에 빠르게 배포가 완료된다.
Rolling (순차적으로 배포)
Rolling은 인스턴스를 한꺼번에 업데이트하지 않고, 여러 Batch로 나누어 순차적으로 배포(Deploy)하는 방법이다
사전에 Batch Size를 지정하여 새로운 버전을 배포한다
배포한 것에 문제가 없으면 다른 인스턴스에도 배포한다
(이런 방식으로 배포하기 때문에 인스턴스들에 새로운 버전과 이전 버전이 함께 공존하는 시간이 존재한다)
배포 중인 인스턴스는 일시적으로 서비스 중단 상태가 될 수도 있다
예시) 4개의 인스턴스 있을 경우 → 먼저 2개 배포 → 문제 없으면 나머지 2개 배포
4개의 인스턴스
Batch size가 2인 경우, 2개의 인스턴스 먼저 배포
나머지 2개도 배포
배포 완료
Rolling with Additional Batch
Rolling에 추가 Batch를 더한 방법으로, 서비스 중단을 최소화하고 성능 저하도 줄이기 위해 고안된 방식이다
추가로 하나의 Batch 만큼 인스턴스를 임시 생성 후에, Rolling과 동일하게 배포한다.
추가로 Batch 사이즈만큼 인스턴스를 임시 생성하여 배포하기 때문에 서비스 중단 시간을 최소화한다
Rolling의 방법보다 가용성이 높다
예시) 4개 인스턴스 있을 경우(Batch size: 2) → 추가로 2개 인스턴스를 임시 생성 → 2개 배포
4개의 인스턴스
추가 2개의 인스턴스 생성된다
기존의 2개의 인스턴스에 배포
나머지 2개는 필요가 없으니 삭제
Immutable
애플리케이션을 배포할 때 기존 인스턴스를 변경하지 않고, 동인한 수의 새로운 인스턴스를 생성하여 새 버전을 배포한다
그 후에 기존 인스턴스는 종료한다
예시) 4개 인스턴스 있을 경우→ 추가로 4개 인스턴스를 생성하여 새 버전 배포 → 기존 4개 인스턴스 삭제
4개의 인스턴스
추가로 동일하게 4개의 인스턴스 새로 생성
새로운 버전으로 생성완료되면 원래 있던 인스턴스 그룹은 중지
Traffic Splitting (Canary Release 방식)
새로운 버전으로의 트래픽 전환을 제어하는 방법으로, 특정 비율의 트래픽을 새로운 버전으로 전환하고, 나머지는 기존 버전으로 유지할 수 있다.
이는 Canary Release라고도 한다.
Canary Release 방식
일부 인스턴스에만 새로운 애플리케이션을 배포하고 업데이트한다.
수신 트래픽의 일부를 사용해 새로운 애플리케이션의 상태를 테스트한다.
예시) 80%의 트래픽을 기존 버전으로 유지하고, 20%의 트래픽을 새로운 버전으로 보낼 수 있다
Immutable 처럼 새로운 인스턴스를 생성한다
5분 동안 일정 비율로 트래픽 분산
5분 후에는 모든 트래픽이 새로운 인스턴스로 향한다
Blue / Green
Elastic Beanstalk 환경의 클론을 생성한 후, 클론에 새로운 애플리케이션을 배포하고, 환경 URL을 스왑하여 (새로운 환경과 기존 환경을 교체) 전환한다