[AWS, Certified Developer Associate] Elastic Beanstalk
Programming

[AWS, Certified Developer Associate] Elastic Beanstalk

Elastic Beanstalk

  • 하나의 인터페이스에서 EC2, ASG, ELB, RDS 등을 재사용해 자동으로 배포해주는 관리형 서비스
    • 용량 프로비저닝, 로드밸런서 구성, 스케일링, 애플리케이션 상태 모니터링, 인스턴스 구성 자동화
  • 개발자는 코드에만 신경
  • 무료
  • 환경, 버전, 구성 등의 집합으로 이루어짐
    • 하나의 환경 안에서 애플리케이션 버전을 1 -> 2로 업데이트 가능
  • 다양한 언어 지원 (고급 설정으로 사용자 지정 플랫폼 생성도 가능)

 

 

Beanstalk - 애플리케이션 업데이트를 위한 배포 옵션

  • All at once
    • 한번에 모든 인스턴스 배포
    • 속도가 가장 빠름 but 모든 서비스가 중지되므로 다운타임 발생
    • UC ) 빠른 배포 & 개발환경 & 다운타임 중요 X & 추가요금 X
  • Rolling
    • 버킷이라는 인스턴스 묶음을 동시 업데이트
    • 첫번째 버킷의 상태가 괜찮으면 다음 버킷 업데이트
    • 추가요금 X
  • Rolling with additional batches
    • 롤링 옵션과 같으나 인스턴스를 생성해 시간에 걸쳐 인스턴스 업데이트
    • 배포 중 용량을 유지한 채 이전 애플리케이션 이용 가능
    • 새로운 인스턴스를 위한 약간의 추가요금
  • Immutable
    • ASG에 인스턴스가 있을 때 새 인스턴스를 다같이 배포
    • 임시 ASG에 버전을 배포한 다음 상태가 모두 괜찮으면 모든 인스턴스를 스왑
    • 많은 추가비용 (새로운 임시 ASG를 만들어 배포)
    • 롤백이 빠름 (임시 ASG 제거)
  • Blue & Green
    • Beanstalk가 직접 제공하는 기능은 아님
    • 새로운 환경을 모두 생성 & 준비가 되면 전환
    • Route 53 등을 사용해 트래픽이 두 방향으로 흐르는 것 방지 (가중치 기반 정책)
      • 약간의 가중치를 스테이징 환경에 두고 테스트 가능
    • 여러 테스트를 진행하고자 하는 릴리즈 버전에 적합
  • Traffic Splitting
    • 카나리 테스트용 (A / B Test)
    • 블루그린 방식에서 자동화 된 방식
    • 애플리케이션 트래픽의 일부를 완전히 새로운 배포로 전송
    • 임시 ASG 이용 배포

 

 

 

 

Beanstalk - 확장 (EB Extentsions)

  • UI에서 설정한 매개변수 / 환경변수를 파일을 사용해 코드로 구성 가능
  • 소스코드 루트 디렉토리의 .ebextensions/ 폴더에 들어가야함
  • .config 확장자로 YAML / JSON 형식 작성
  • option_settings를 통해 기본값 수정 가능
  • 콘솔에서는 할 수 없는 기능 제공
    • RDS, ElastiCache, DynamoDB와 같은 리소스 추가 가능
  • EB 확장에서 관리되는 모든 것들은 환경이 삭제되면 함께 제거

 

 

 

Beanstalk - 마이그레이션

  • 로드밸런서
    • 환경 생성 후 로드밸런서 유형 변경 불가 (구성만 변경 가능)
    • 유형 변경을 위해선 다음 단계를 통해 마이그레이션 필요
      • 동일한 구성으로 새로운 환경 생성 (클론 X, 로드밸런서 제외하고 생성)
      • 애플리케이션을 새 환경에 배포
      • CNAME 교체, Route 53을 통해 새 환경으로 트래픽 이동 (DNS 업데이트)
  • RDS
    • Beanstalk 애플리케이션을 통해 프로비저닝 가능 (개발 / 테스트에서 유용)
      • 프로덕션 환경에서는 유용하지 않음 (Beanstalk 수명주기를 따라가므로)
    • 프로덕션에서는 EB와 RDS를 분리한 후 연결 문자열로 참조
    • EB와 연결된 RDS를 분리하는 단계는 다음과 같음
      • 문제 발생에 대비 RDS 스냅샷 생성
      • RDS 콘솔로 이동해 RDS 삭제 방지 설정
      • 새로운 EB 환경 생성 (RDS 제외하고 생성, 환경변수 등을 통해 기존 RDS와 연결)
      • CNAME 교체, Route 53을 통해 새 환경으로 트래픽 이동 (DNS 업데이트)
      • 기존 환경 삭제
        • RDS 삭제 방지를 설정했으므로 RDS 유지됨
        • CloudFormation에서 stack 수동으로 삭제 (DELETE_FAILED 상태로 표시됨)

 

 

 


Reference

Udemy - AWS Certified Developer Associate 시험 합격을 위한 모든 것!