애플리케이션 인스턴스화
- 풀스택(EC2,EBS,RDS) 실행
- 애플리케이션 설치
- 데이터 삽입 및 복구
- 구성
- 애플리케이션 실행
오래걸린다...
어떻게 빠르게 할까
- EC2 인스턴스
- Golden AMI: 골드 이미지
애플리케이션과 OS 종속성, 설정등을 사전에 설치하고, AMI를 생성
-> 이후 인스턴스들을 Golden AMI로 직접 실행하면 된다.
- EC2 사용자 데이터: Bootstrap
Bootstrap은 인스턴스가 처음 시작될때 구성하는 것을 의미
애플리케이션, OS 종속성등을 설치할때 부트스트래핑 가능(좀 느림)
동적 구성(DB URL, PASSWORD 가져올때)에 EC2 사용자 데이터를 사용해 부트 스트래핑 활용
- 하이브리드(Golden AMI + 사용자 데이터)
-> Elastic Beanstalk = AMI 구성 + 사용자 데이터 추가
- RDS DB
- 스냅샷으로부터 복구할 수 있다.
DB에서 스키마와 데이터가 준비된다.
-> 더 빠르게 데이터 검색하려고 할때 쓰는 방법
- EBS 볼륨
- 스냅샷으로부터 복구할 수 있다.
포맷되지 않은 비어있는 디스크는 필요하지 않다.
Elastic Beanstalk
WEb App 3-tier

배포할 애플리케이션이 많고 동일한 아키텍처를 따른다면 매번 다시 생성하기 번거롭다.
-> 개발자로서 인프라 관리와 코드 배포하기 어려워진다.
-> DB, 로드 밸런서등을 설정하기 번거롭다.
-> 확장의 문제
대부분의 웹 애플리케이션은 로드 밸런서와 오토 스케일링 그룹이 있는 동일한 아키텍처를 가짐.
개발자는 다른 건 신경쓰지 않고 그냥 코드를 실행하고 싶다.
만약 다른 프로그래밍 언어로 개발하고 다양한 애플리케이션과 환경을 갖고 있다면 한 가지 방법으로 애플리케이션을 배포하고 싶을 수 있다.
===> 그럴때 사용하는 것이 Beanstalk
Beanstalk 개요
- Beanstalk는 개발자 입장에서 애플리케이션을 AWS에 배포
하나의 인터페이스에서 EC2,ASG,ELB,RDS등 모든 컴포넌트를 재사용한다는 개념
- 그러나 Beanstalk가 우리를 대신해 그 모든 걸 배포하는 관리형 서비스
Beanstalk가 용량 프로비저닝, 로드 밸런서 설정, 스케일링, 모니터링, 인스턴스 설정 등 처리
모든 컴포넌트의 설정에 대해 권한을 가지고 있다.
간단하게 애플리케이션 업데이트하는 방법 제공
서비스 자체는 무료이다.(인스턴스,ASG ELB 사용에 대해서 비용 지불)
Beanstalk 컴포넌트
- 애플리케이션
Beanstalk의 컴포넌트는 환경, 버전, 설정등의 컴포넌트 컬렉션
- 애플리케이션 자체 버전
사용자의 애플리케이션과 같다.
- 환경
- 특정한 애플리케이션 버전을 실행하는 리소스의 컬렉션
어떤 환경에서 한번에 하나의 애플리케이션 버전만 가질 수 있다.
- 티어
- 웹 서버 환경 티어(웹사이트 실행)
전형적인 아키텍처?
로드벨런서로 트래픽을 오토 스케일링 그룹에 전송해 인스턴스 관리
- 워커 환경 티어(대기열에서 오는 작업 처리)
워커 환경을 중심으로 이루어져있다.
인스턴스에 직접적으로 액세스하는 클라이언트가 없음.
사용자는 SQS Queue를 사용한다.
-> 메세지는 메세지 대기열인 SQS Queue로 전송되고 인스턴스는 워커가 된다.
-> 메세지를 SQS Queue가 가져와 처리
이 경우에는 워커 환경은 SQS 메시지의 개수에 따라 스케일링 된다.
웹 환경이 메시지를 워커 환경의 SQS Queue에 푸시하게 해 웹 환경과 워커 환경을 하나로 모을 수 있다.
- dev, test, prod 같은 다양한 환경을 생성

Beanstalk 지원 플렛폼

+ 커스텀 플랫폼(위 프로그래밍 언어가 없다면 사용) - 고급 기능
웹 서버 티어 vs 워커 티어

Beanstalk 배포 모드

- 싱글 인스턴스
개발용
하나의 인스턴스를 가질 것이고, 탄력적IP를 가진다.
탄력적 IP를 가진 인스턴스를 기반으로 RDS등의 서비스를 시작 가능.
- 실제 Beanstalk 모드 스케일링
프로덕션 환경에 적합
로드 밸런서를 사용해 고가용성 확보하고 오토 스케일링 그룹과 다수의 가용성 영역에 맞춰 관리
다중 AZ, 마스터와 스탠바이가 있는 RDS DB를 가질 수 있다.
실습(웹 사이트 생성)
Beanstalk를 만들면 이벤트가 발생하는데 CloudFormation 콘솔에 스택이 생성된것을 볼 수 있음.
CloudFormation서비스는 뒤에서 리소스를 생성 한다.
그리고 다양한 종류의 인프라로 스택을 임의로 배포
CloudFormation -> 생성된 스택 -> Template -> viewin designer를 누르면
아키텍처를 볼 수 있다.
인스턴스 생성된후 EC2 콘솔로 가면 인스턴스가 실행 중인걸 볼 수 있다.
- 옵션
- 새 버전 업로드 하기
생성한 Beanstalk에서 업로드 누르면 새 버전을 올릴 수있고 인스턴스에 자동으로 배포된다.
- 상태 확인
- 로그 확인
- 모니터링으로 메트릭 확인
- 알람
- 업데이트 관리
Beanstalk가 환경을 업데이트할 때 나타남.
- 구성
왼쪽 목록에 구성을 쿨릭하면 Beanstalk 환경에 관한 모든 설정을 보기/수정/적용 가능.
- 추가 환경 구성
왼쪽 목록에 애플리케이션:Myapp을 누르면 생성한 Beanstalk가 있는데 추가로 두 번째 환경을 만들 수 있다.