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을 스왑하여 (새로운 환경과 기존 환경을 교체) 전환한다





















