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