[AWS] EB를 공부해보자

이 글은 AWS Elastic Beanstalk 공식문서를 보고 작성하였습니다.

Elastic Beanstalk

앱을 배포하는 데에 사용되는 여러 서비스들은 AWS 인프라 관리의 유연성을 제공하지만, 이를 선택하고 사용하는 방법이 까다롭다고 느껴질 수 있다.

Elastic Beanstalk을 사용할 경우, 애플리케이션을 실행하는 인프라에 대한 걱정 없이 AWS 클라우드에서 신속하게 배포 및 관리할 수 있다. 애플리케이션을 업로드하기만 하면 Elastic Beanstalk에서 용량 프로비저닝, 로드 밸런싱, 조정, 애플리케이션 상태 모니터링에 대한 세부 정보를 자동으로 처리한다.

프로비저닝이란, 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 준비해두는 것을 말한다.

AWS 리소스에서 애플리케이션을 실행하기 위해 Elastic Beanstalk에서 다음 작업을 수행한다. 완료하기까지 5분이 소요된다.

  • EC2 인스턴스 : Amazon Elastic Compute Cloud 가상 머신이다. 각 플랫폼마다 지원하는 파일 및 스크립트가 다르고, 대부분의 플랫폼에서는 웹 앱 앞에 위치에 웹 앱으로 요청을 전달하고, 정적 자산을 제공하고, 액세스 및 오류 로그를 생성하는 역방향 프록시로 Apache 또는 Nginx를 사용한다.
  • 인스턴스 보안 그룹 : Port 80에서 수신을 허용하도록 구성된 Amazon EC2 보안 그룹이다. 다른 port에서는 트래픽 허용이 되지 않고, 이 리소스를 통해 로드밸런서의 HTTP 트래픽이 EC2에 도달할 수 있다.
  • Amazon S3 버킷 : Elastic Beanstalk 사용 시 생성된 소스 코드, 로그 등의 스토리지 위치
  • Amazon CloudWatch 경보 : 인스턴스에 대한 로드를 모니터링하는 CloudWatch 경보, 로드가 너무 높거나 낮은 경우 트리거된다. 경보가 트리거되면 Auto Scaling 그룹이 확장 또는 축소된다.
  • AWS CloudFormation 스택 : Elastic Beanstalk에서는 AWS CloudFormation을 사용하여 사용자 환경의 리소스를 시작하고 구성 변경 사항을 전파한다.

Application

  • 애플리케이션 : 환경, 버전 및 환경 구성을 포함한 Elastic Beanstalk 구성요소의 논리적 모음이다. (?) 폴더의 개념과 유사하다.
  • 애플리케이션 버전 : 배포 가능한 코드가 포함된 Amazon S3 객체이다. 애플리케이션의 일부에 해당하고, 실행 중인 환경에서 애플리케이션에 이미 업로드한 애플리케이션 버전을 배포하거나 새 애플리케이션 버전을 업로드하고 즉시 배포할 수 있다.
  • 환경 : 애플리케이션 버전을 실행 중인 AWS 리소스 모음이다. 각 환경은 하나의 애플리케이션 버전만 실행하지만, 여러 환경에서 여러 애플리케이션 버전을 동시에 실행할 수 있다. 환경을 생성하면 Elastic Beanstalk에서 사용자가 지정한 애플리케이션 버전을 실행하는 데 필요한 리소스를 프로비저닝한다.
  • 환경 티어 : EB 환경을 시작할 때 먼저 환경 티어를 선택한다. 환경 티어는 환경에서 실행하는 애플리케이션 유형을 지정하고 EB에서 이러한 애플리케이션을 지원하기 위해 프로비저닝하는 리소스를 결정한다. HTTP 요청을 처리하는 애플리케이션은 웹 서버 환경 티어에서 실행되고, Amazon SQS 대기열에서 작업을 가져오는 환경은 작업자 환경 티어에서 실행된다.
  • 환경 구성 : 환경이 구성 설정을 업데이트하면 EB가 자동으로 기존 리소스에 변경 사항을 적용하거나, 삭제하고 새 리소스를 배포한다.
  • 저장된 구성 : 고유한 환경 구성을 생성하기 위한 템플릿이다. EB 콘솔, EB CLI, AWS CLI 또는 API를 사용하여 저장된 구성을 생성 및 수정하고 환경에 적용할 수 있다.
  • 플랫폼 : 운영체제, 프로그래밍 언어 실행 시간, 웹 서버, 애플리케이션 서버 및 EB 구성요소의 조합이다. 플랫폼을 대상으로 하는 웹 애플리케이션을 설계한다.

웹 서버 환경

환경은 애플리케이션의 핵심이다. 환경을 생성하면 EB가 애플리케이션을 실행하는 데에 필요한 리소스를 프로비저닝한다. 환경에 대해 생성된 AWS 리소스에는 하나의 로드 밸런서(ELB), Auto Scaling, 하나 이상의 EC2 인스턴스가 포함된다.

모든 환경에는 로드 밸런서를 가리키는 URL이 있다. 이 URL은 Amazon Route 53에서 CNAME 레코드를 사용하여 ELB URL로 별칭이 지정된다. 로드 밸런서는 Auto Scaling 그룹의 일부인 Amazon EC2 인스턴스 앞에 있다. 애플리케이션 로드 증가에 맞게 Amazon EC2 Auto Scaling에서 자동으로 추가 EC2 인스턴스를 시작한다. 애플리케이션의 로드가 감소하면 마찬가지로 자동으로 인스턴스를 중지하지만 항상 최소 한 개의 인스턴스는 실행 상태에 있다.

Amazon EC2 인스턴스는 한 보안 그룹에 속한다. 보안 그룹은 인스턴스의 방화벽 규칙을 정의한다. 기본적으로 EB는 보안 그룹을 정의하며, 이를 통해 모든 사람이 port 80(HTTP)을 사용하여 연결할 수 있다. 보안 그룹을 두 개 이상 정의할 수 있다. 예를 들어 그림처럼 데이터베이스 서버의 보안 그룹을 정의할 수 있다.