Beanstalk
개요
Beanstalk는 AWS에 애플리케이션을 배포하는 것을 자동화하여 개발에만 집중할 수 있도록 도와준다.
배포할 애플리케이션이 너무 많고 이들이 동일한 아키텍처를 따를 경우 매번 이를 다시 생성하는 것은 번거롭다.
대부분의 웹 애플리케이션은 로드 밸런서 및 오토 스케일링 그룹으로 구성된 유사한 아키텍처를 갖는다.
Beanstalk 이용 시 하나의 배포 방식으로 다양한 프로그래밍 언어로 개발된 다양한 애플리케이션과 환경을 사용하는 애플리케이션을 배포할 수 있다.
하나의 인터페이스에서 EC2, ASG, ELB, RDS와 같이 이전에 본 모든 구성 요소를 재사용한다.
용량 프로비저닝, 로드 밸런서 구성, 자동 확장, 애플리케이션 안정성 모니터링과 인스턴스 구성 등을 자동으로 처리한다.
각 구성 요소의 설정을 직접 할수도 있다.
Beanstalk 서비스 자체는 무료이지만 Beanstalk가 사용하는 기본 인스턴스나 ASG, ELB 등에 대한 비용은 지불해야 한다.
애플리케이션 컴포넌트
환경, 버전, 설정 등 Beanstalk 컴포넌트의 집합
버전은 점차 증가하는 값이다.
환경은 특정 애플리케이션 버전을 실행하는 리소스의 모음이다. 환경 내에서는 한 번에 하나의 애플리케이션 버전만 사용할 수 있다. 애플리케이션 버전을 업데이트할 수 있다.
개발, 테스트, 프로덕션 등 여러 환경을 생성할 수 있다.
Beanstalk 티어
웹 서버 환경
로드 밸런서가 있는 위치를 알고 있는 전통적인 아키텍처
로드 밸런서가 트래픽을 ASG로 보내고, ASG의 EC2 인스턴스들이 웹 서버 역할을 한다.
작업자 환경
메시지는 SQS 대기열에 전송되며, EC2 인스턴스는 SQS 대기열에서 메시지를 가져와 처리하는 작업자 역할을 한다. 작업자인 EC2 인스턴스는 SQS 메시지 수에 따라 확장된다.
웹 환경과 작업자 환경을 함께 배치할 수 있다.
애플리케이션 생성 -> 버전 업로드 -> 환경 구동 -> 환경 관리
순으로 작업이 진행된다.새로운 버전의 애플리케이션을 업로드하면 환경에 다시 배포해 애플리케이션 스택을 업데이트할 수 있다.
다양한 프로그래밍 언어를 지원한다.
Go, Java SE, Java with Tomcat, .Net Core on Linux, .Net on Windows Server, Node.js, PHP, Python, Ruby, Packer Builder, 단일 Docker 컨테이너, 다중 Docker 컨테이너, 사전 구성된 Docker 등
배포 모드
단일 인스턴스
개발 목적에 적합하다.
탄력적인 IP를 가진 EC2 인스턴스 하나를 사용한다.
RDS 데이터베이스 등을 생성할 수도 있지만, 결국 하나의 인스턴스와 탄력적 IP를 기반으로 한다.
로드밸런서 사용하여 고가용성 확보
실 운영 목적으로 적합하다.
로드 밸런서를 통해 오토 스케일링 그룹 및 여러 가용 영역에서 관리되는 여러 EC2 인스턴스에 부하를 분산시킬 수 있다.
마스터와 스탠바이 인스턴스를 가진 Multi-AZ RDS 데이터베이스를 가질 수 있다.
Last updated