Kaonmir Blog
kaonmir
시리즈
SAA
DOP
System Design Interview
Linux
ETC
Se connecter
Accueil
Kaonmir (손성훈)
Copy & Translate
시리즈
SAA
DOP
System Design Interview
Linux
ETC
AI를 더 잘 쓰기 위한 IT 용어
구독

Elastic Beanstalk

Elastic Beanstalk (EB)는 인프라에 대한 지식 없이 웹 어플리케이션을 배포하고 조정할 수 있는 서비스이다. 템플릿에 따라 필요한 AWS 컴포넌트가 자동으로 설치된다.

EB CLI

콘솔에서 작업해도 되지만, Elastic Beanstalk CLI를 설치해 터미널에서 작업할 수도 있다.

환경 구성 공유하기

우리는 환경별로 구성을 변경해 어플리케이션을 제어한다. EB는 현재 환경 구성을 스냅샷 찍을 수 있는 기능을 제공한다.
리전을 옮기거나 새로운 어플리케이션에 구성을 적용할 때, ‘저장된 구성'을 활용하면 빠르게 적용할 수 있다.

.ebextensions

EB의 고급 설정 파일이다. 어플리케이션의 설정을 변경할 수 있고, CFN으로 생성할 수 있는 모든 리소스를 생성할수 있다.
•
.ebextensions 폴더에 config 확장자 파일에만 적용
•
get-config : 인스턴스에서 EB 설정을 확인하는 명령어
구성 우선순위
1.
환경에 직접 적용된 설정 : 생성, 업데이트할 때 설정
2.
저장된 구성
3.
구성 파일 (.ebextensions)
4.
디폴트 값
5.
commands & container_commands
•
commands : app이나 웹 서버가 설정되기 전 / app 버전 파일이 추출되기 전에 실행
•
container_commands : app이나 웹 서버가 설정된 후 / app 버전 파일이 추출된 후 / app 버전을 배포하기 이전에 실행

배포 전략

💡
배포 과정과 장단점을 외우기보다 느껴야 한다…!
•
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 : 특정 시간대에 자동으로 업데이트 가능하다
Créé avec Slashpage
eb init # EB를 새로 시작한다.
eb create dev-env # 현재 폴더를 압축해 S3에 업로드한다. 해당 압축 파일을 가지고 새 환경을 만든다. 
eb deploy # 현재 폴더를 압축해 S3에 업로드한다. 해당 압축 파일을 가지고 기존 환경을 업데이트한다.

eb open # app이 실행 중인 창을 띄운다.
eb status # 현재 상태를 표시한다.
eb health # --refresh # 리소스 health 정보를 표시한다.
eb logs # 인스턴스들의 모든 어플리케이션 로그를 가져온다.
eb config save <env> -cfg <config_name> # 현재 환경 구성을 저장하고 구성 파일을 로컬에 저장한다.
eb config <env> -cfg <config_name> # 현재 환경에 원하는 '저장된 구성'을 적용한다.
eb setenv ENABLE_BLABLA=true # 현재 환경의 구성을 변경한다.

# 환경 구성 파일을 변경하고 해당 명령을 실행하면, 환경 구성이 업데이트된다.
eb config put <config_name> 
Resources:
	... # 리소스 생성
option_settings:
	... # EB 설정 변경
# .ebextensions/
commands:
  python_install:
    command: myscript.py
    cwd: /home/ec2-user

container_commands:
	database_migration:
    command: 'echo "do migration"'
		leader_only: true # 오직 한 인스턴스에서만 실행