Share
Sign In

Elastic Beanstalk

Elastic Beanstalk (EB)는 인프라에 대한 지식 없이 웹 어플리케이션을 배포하고 조정할 수 있는 서비스이다. 템플릿에 따라 필요한 AWS 컴포넌트가 자동으로 설치된다.
EB CLI
콘솔에서 작업해도 되지만, Elastic Beanstalk CLI를 설치해 터미널에서 작업할 수도 있다.
eb init # EB를 새로 시작한다. eb create dev-env # 현재 폴더를 압축해 S3에 업로드한다. 해당 압축 파일을 가지고 새 환경을 만든다. eb deploy # 현재 폴더를 압축해 S3에 업로드한다. 해당 압축 파일을 가지고 기존 환경을 업데이트한다. eb open # app이 실행 중인 창을 띄운다. eb status # 현재 상태를 표시한다. eb health # --refresh # 리소스 health 정보를 표시한다. eb logs # 인스턴스들의 모든 어플리케이션 로그를 가져온다.
환경 구성 공유하기
우리는 환경별로 구성을 변경해 어플리케이션을 제어한다. EB는 현재 환경 구성을 스냅샷 찍을 수 있는 기능을 제공한다.
eb config save <env> -cfg <config_name> # 현재 환경 구성을 저장하고 구성 파일을 로컬에 저장한다. eb config <env> -cfg <config_name> # 현재 환경에 원하는 '저장된 구성'을 적용한다. eb setenv ENABLE_BLABLA=true # 현재 환경의 구성을 변경한다. # 환경 구성 파일을 변경하고 해당 명령을 실행하면, 환경 구성이 업데이트된다. eb config put <config_name>
리전을 옮기거나 새로운 어플리케이션에 구성을 적용할 때, ‘저장된 구성'을 활용하면 빠르게 적용할 수 있다.
.ebextensions
EB의 고급 설정 파일이다. 어플리케이션의 설정을 변경할 수 있고, CFN으로 생성할 수 있는 모든 리소스를 생성할수 있다.
Resources: ... # 리소스 생성 option_settings: ... # EB 설정 변경
.ebextensions 폴더에 config 확장자 파일에만 적용
get-config : 인스턴스에서 EB 설정을 확인하는 명령어
구성 우선순위
1.
환경에 직접 적용된 설정 : 생성, 업데이트할 때 설정
2.
저장된 구성
3.
구성 파일 (.ebextensions)
4.
디폴트 값
5.
commands & container_commands
commands : app이나 웹 서버가 설정되기 전 / app 버전 파일이 추출되기 전에 실행
container_commands : app이나 웹 서버가 설정된 후 / app 버전 파일이 추출된 후 / app 버전을 배포하기 이전에 실행
# .ebextensions/ commands: python_install: command: myscript.py cwd: /home/ec2-user container_commands: database_migration: command: 'echo "do migration"' leader_only: true # 오직 한 인스턴스에서만 실행
배포 전략
💡
배포 과정과 장단점을 외우기보다 느껴야 한다…!
All at once : 인스턴스들 전부 한 번에 업데이트
Rolling : 인스턴스들 중 몇 개씩 묶어서 한 묶음 끝나면 다음 거 업데이트
Rolling with additional batches : 새 인스턴스 몇 개 배포한 후 Rolling을 진행. 전체 실행 중인 인스턴스 수가 늘 동일하다.
Immutable : 새 ASG 안에 새 인스턴스를 만들고, 기존의 ASG와 완전히 교체
Blue / Green : Immutable처럼 ASG를 하나 만들고, Route53을 통해 트래픽을 조절하는 방식. 기존 ASG로 가는 트래픽을 점진적으로 줄인다. EB에서 Swap Env URLs 기능을 지원한다.
Worker Environment
Web server env : 웹 서버용
Worker env : cron 작업 혹은 장시간 동작해야 하는 워크로드용
워커 환경은 SQS queue와 DLQ가 기본으로 설치된다. 어플리케이션은 queue에서 작업을 가지고 온다.
Docker
EB Platform에는 두 가지 도커 플랫폼을 지원한다.
Docker : 하나의 컨테이너만 돌린다.
Multi-container Docker : 하나의 EC2에 여러 도커 컨테이너를 돌린다. Dockerrun.aws.json에 컨테이너 정보를 정의한다.
추가 내용
RDS 같이 EB가 지워질 때 같이 지워지면 안되는 리소스는 어떻게 해야 할까? → 따로 RDS를 만들고 arn이나 name을 주입한다.
최대 1000개의 버전까지만 저장 가능 → 버전 생명 주기를 설정해야 한다.
Rebuild : 전부 지우고 다시 만들 수 있다.
Manged update : 특정 시간대에 자동으로 업데이트 가능하다