AWS(Amazon Web Service)

[AWS] Beanstalk

yunseohhe 2024. 10. 24. 09:27

Typical architecture : Web App 3-tier

(출처 : 구글이미지)

  • 로드밸런서는 사용자의 모든 요청을 처리하고 있다. 그런 다음, 여러 가용 영역을 가진 오토 스케일링 그룹이 있다. 그리고 각 AZ에는 일부 EC2 인스턴스가 배포될 것이다. 그리고 백엔드에는 데이터 서브넷이 있을 수 있다.
    그래서 읽기와 쓰기를 수행하는 RDS 데이터베이스가 있다.
  • 그런 다음 캐싱 레이어가 필요한 경우, ElastiCache를 살펴봐야한다. 

 

Developer problems on AWS

  • 배포할 애플리케이션이 너무 많고 이들이 동일한 아키텍처를 따를 경우, 매번 이를 다시 생성하는 것은 번거로울 수 있다.
  • 개발자로서 코드를 배포하기 위해 인프라를 관리하는 것은 복잡하다.
  • 모든 데이터베이스, 로드 밸런서 등을 일일이 구성하고 싶지 않으며 모든 것이 확장되기를 원한다.
  • 대부분의 웹 애플리케이션은 로드 밸런서 및 오토 스케일링 그룹과 동일한 아키텍처를 갖는다. 
    개발자로서 원하는 것은 제 코드가 실행되는 것이다. 다른 것은 걱정하고 싶지 않아한다.
  • 따라서 다양한 프로그래밍 언어로 개발하고 다양한 애플리케이션과 환경을 사용하는 경우, 애플리케이션을 배포하는 단일 방법을 원할 수 있다.
    바로 이 부분에서 Beanstalk가 작동한다.

 

Elastic Beanstalk 

Overview

  • Beanstalk는 AWS에 애플리케이션을 배포하는 데 있어 개발자 중심의 관점을 제공한다.
  • Elastic Beanstalk의 아이디어는 하나의 인터페이스에서 EC2, ASG, ELB, RDS와 같이 이전에 본 모든 구성 요소를 재사용하는 것이다.
    하지만 이러한 모든 것을 자동으로 배포해 주는 관리형 서비스가 될 것이다.
  • Elastic Beanstalk는 용량 프로비저닝, 로드 밸런서 구성, 자동 확장, 애플리케이션 안정성 모니터링과 인스턴스 구성 등을 처리할 것이다.
  • 각 구성 요소의 설정에 대한 전체적인 제어는 여전히 가능하지만 적어도 Elastic Beanstalk에서는 이들이 단일 인터페이스로 통합되어 제공된다. 
  • Beanstalk 서비스는 그 자체로는 무료지만, Beanstalk가 사용하는 기본 인스턴스나 ASG, ELB 등에 대한 비용은 지불하게 된다.

 

Components

  • Beanstalk의 구성 요소는 애플리케이션으로 구성되며, 이는 환경, 버전, 구성 등과 같은 Beanstalk 구성 요소의 모음이다.
  • 애플리케이션 버전 자체는 애플리케이션 코드의 반복 버전이어서 버전1, 버전2, 버전3 등으로 나눌 수 있다.
  • 환경은 특정 애플리케이션 버전을 실행하는 리소스의 모음이므로 환경내에서는 한 번에 하나의 애플리케이션 버전만 사용할 수 있다.
  • 실제로 환경 내에서 애플리케이션 버전을 버전1에서 버전2로 업데이트 할 수 있다.
  • Beanstalk에는 티어가 있기 때문에 두 가지 다른 티어를 설정할 수 있다.(웹 서버 환경과 작업자 환경)
  • Beanstalk에서 개발, 테스트, 프로덕션 등 여러 환경을 생성할 수 있으며 원하는 모든 환경을 만들 수 있다.
  • 프로세스는 애플리케이션을 만드는 것이다. 그런 다음 버전을 업로드하고 환경을 시작한 다음 환경의 생애 주기를 관리하게 된다.
  • 만약 밑의 이미지의 작업을 반복하고 싶다면 새로운 버전을 업로드하여 버전을 업데이트한 다음 해당 새로운 버전을 환경에 다시 배포하여 애플리케이션 스택을 업데이트 할 수 있다.

(출처 : 구글이미지)

 

Supported Platforms

  • Beanstalk는 다음과 같은 다양한 프로그래밍 언어를 지원한다.
      - Go
      - Java SE
      - Java with Tomcat
      - .NET Core on Linux
      - .NET on Windows Server
      - Node.js
      - PHP
      - Python
      - Ruby
      - Packer Builder
      - Single Container Docker
      - Multi-container Docker
      - Preconfigured Docker

 

Web Server Tier(웹 티어)  vs  Worker Tier(작업자 티어)

(출처 : 구글이미지)

  • 왼쪽은 Beanstalk의 아키텍처 1이고, 웹 환경이다.
    우리가 로드 밸런서가 있는 위치를 알고 있는 전통적인 아키텍처로 로드 밸런서가 트래픽을 오토 스케일링 그룹으로 보내고 여기에 여러 EC2 인스턴스가 포함되어 있어 웹 서버 역할을 한다.
  • 오른쪽은 Beanstalk의 아키텍처 2는 작업자 환경을 중심으로 이루어질 것이다.
    따라서 EC2 인스턴스에 직접 액세스하는 클라이언트가 없다.
  • 메시지 대기열인 SQS 대기열을 사용할 것이며 메시지는 SQS 대기열로 전송된다.
  • EC2 인스턴스는 작업자 역할을 할 것인데 SQS 대기열에서 메시지를 가져와 처리할 것이기 때문이다.
    이 경우 작업자 환경은 SQS 메시지 수에 따라 확장된다.
    따라서 메시지가 많을수록 EC2 인스턴스도 많아진다.

 

Deployment Modes(알아야할 배포 모드)

(출처 : SAA 강의)

  • Beanstalk에 대해 알아야 할 두 가지 배포모드가 있다.
  • 첫 번째는 개발 목저에 적합한 단일 인스턴스이다.
      - 이 경우 탄력적인 IP를 가진 EC2 인스턴스가 하나 있다.
      - 잠재적으로 RDS 데이터베이스 등을 생성할 수도 있지만 이는 모두 하나의 인스턴스와 탄력적 IP를 기반으로 한다.
      - 개발 목적에는 맞지만, 실제 Elastic Beanstalk모드에서 확장하려면 고가용성을 위해 로드 밸런서를 사용해야 하며 이는 생산 환경에 적합한다. 이 경우 로드 밸런서가 오토 스케일링 그룹 및 여러 가용 영역에서 관리되는 여러 EC2 인스턴스에 로드를 분산시킬 수 있다.
  • 두 번째는 마스터와 스탠바이 인스턴스를 가진 Multi-az RDS 데이터베이스를 가질 수 있다.