정책 및 설정 배포 - AWS Elastic Beanstalk

정책 및 설정 배포

AWS Elastic Beanstalk는 배포가 처리되는 방법에 대한 여러 옵션을 제공합니다. 그 중에는 배포 정책(한 번에 모두, 롤링, 추가 배치를 사용한 롤링, 변경 불가능, 트래픽 분할)과 배포 중에 배치 크기 및 상태 확인 동작을 구성할 수 있는 옵션이 있습니다. 현재 사용자의 환경에서는 한 번에 배포를 기본적으로 사용합니다. EB CLI로 환경을 생성했고 해당 환경이 확장 가능한 경우에는(--single 옵션을 지정하지 않음) 롤링 배포를 사용합니다.

롤링 배포를 사용하면 Elastic Beanstalk에서는 환경의 Amazon EC2 인스턴스를 배치로 분할하고 새 버전의 애플리케이션을 한 번에 한 배치로 배포합니다. 나머지 인스턴스는 이전 버전의 애플리케이션을 실행하는 환경에 남겨 둡니다. 롤링 배포 중 일부 인스턴스는 애플리케이션의 기존 버전을 사용하여 요청을 서비스하는 반면, 완료된 배치에 있는 인스턴스는 새로운 버전을 사용하여 다른 요청을 서비스합니다. 자세한 내용은 롤링 배포의 작동 방식 단원을 참조하십시오.

배포 중 전체 용량을 유지하려면 인스턴스를 서비스에서 제거하기 전에 인스턴스의 새로운 배치(batch)를 시작하도록 환경을 구성할 수 있습니다. 이 옵션을 추가 배치를 사용한 롤링 배포라고 합니다. 배포가 완료되면 Elastic Beanstalk는 인스턴스의 추가 배치(batch)를 종료합니다.

변경 불가능한 배포변경 불가능한 업데이트를 수행하여 기존 버전을 실행하는 인스턴스와 함께 별도의 Auto Scaling 그룹에서 애플리케이션의 새 버전을 실행하는 새로운 인스턴스의 전체 세트를 시작할 수 있습니다. 변경 가능한 배포는 부분적으로 완료된 롤링 배포에서 발생하는 문제를 방지할 수 있습니다. 새 인스턴스가 상태 확인을 전달하지 않는 경우 Elastic Beanstalk는 해당 인스턴스를 종료하여 원본 인스턴스를 원래 그대로 유지합니다.

트래픽 분할 배포를 사용하면 애플리케이션 배포의 일부로 Canary 테스트를 수행할 수 있습니다. 트래픽 분할 배포에서는 Elastic Beanstalk가 변경 불가능 배포 시처럼 전체 새 인스턴스 세트를 시작합니다. 그런 다음 지정된 평가 기간 동안 지정된 비율의 수신 클라이언트 트래픽을 새 애플리케이션 버전으로 전달합니다. 새 인스턴스가 정상 상태를 유지하면 Elastic Beanstalk는 모든 트래픽을 해당 인스턴스로 전달하고 이전 인스턴스를 종료합니다. 새 인스턴스가 상태 확인을 통과하지 못하거나 배포를 중단하도록 선택하면 Elastic Beanstalk가 트래픽을 이전 인스턴스로 다시 이동하고 새 인스턴스를 종료합니다. 서비스 중단은 전혀 발생하지 않습니다. 자세한 내용은 트래픽 분할 배포 작동 방식 단원을 참조하십시오.

주의

일부 정책은 배포 또는 업데이트 중에 모든 인스턴스를 대체합니다. 따라서 누적된 모든 Amazon EC2 버스트 잔고가 소실됩니다. 이 동작은 다음과 같은 경우에 발생합니다.

  • 인스턴스 교체가 활성화된 관리형 플랫폼 업데이트

  • 변경이 불가능한 업데이트

  • 변경 불가능한 업데이트 또는 트래픽 분할이 활성화된 배포

애플리케이션이 모든 상태 확인을 전달하지는 않지만, 낮은 상태 확인 상태에서 여전히 올바르게 작동하는 경우 인스턴스가 Warning와 같은 낮은 상태의 상태 확인을 전달할 수 있도록 정상 임계값 옵션을 수정할 수 있습니다. 인스턴스가 상태 확인을 전달하지 않기 때문에 배포가 실패하고 상태 확인과 상관없이 업데이트를 강제 실행해야 하는 경우 상태 확인 무시 옵션을 지정합니다.

롤링 업데이트에 대한 배치 크기를 지정하면 Elastic Beanstalk는 롤링 애플리케이션 다시 시작에도 해당 값을 사용합니다. 가동 중지 없이 환경의 인스턴스에서 실행 중인 프록시 및 애플리케이션 서버를 다시 시작해야 하는 경우 롤링 다시 시작을 사용합니다.

애플리케이션 배포 구성

환경 관리 콘솔에서 환경의 구성 페이지에 있는 업데이트와 배포를 편집하여 배치 애플리케이션 버전 배포를 활성화하고 구성합니다.

배포를 구성하려면(콘솔)

  1. Elastic Beanstalk 콘솔을 연 다음 리전 목록에서 해당 AWS 리전을 선택합니다.

  2. 탐색 창에서 환경을 선택한 다음 목록에서 환경의 이름을 선택합니다.

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

  3. 탐색 창에서 구성을 선택합니다.

  4. [롤링 업데이트와 배포] 구성 범주에서 [편집]을 선택합니다.

  5. 애플리케이션 배포 섹션에서 배포 방식, batch settings(배치 설정) 및 상태 확인 옵션을 선택합니다.

  6. 적용을 선택합니다.

롤링 업데이트와 배포 페이지의 애플리케이션 배포 섹션에는 다음과 같은 애플리케이션 배포 옵션이 있습니다.

  • 배포 방식(Deployment policy) - 다음 배포 옵션 중에서 선택합니다.

    • 한 번에 모두(All at once) - 새 버전을 모든 인스턴스에 동시에 배포합니다. 배포가 수행되는 동안 환경에 있는 모든 인스턴스가 잠시 서비스 중지됩니다.

    • 롤링(Rolling) - 새 버전을 배치로 배포합니다. 각 배치는 배포 단계 동안 서비스에서 제외되므로 배치에 있는 인스턴스의 수만큼 환경의 용량이 감소합니다.

    • 추가 배치를 사용한 롤링(Rolling with additional batch) - 새 버전을 배치로 배포하지만, 먼저 새로운 배치의 인스턴스를 시작하여 배포 프로세스 중에 모든 용량이 유지되도록 합니다.

    • 변경 불가능(Immutable) - 변경 불가능 업데이트를 수행하여 새 버전을 새로운 인스턴스 그룹에 배포합니다.

    • 트래픽 분할(Traffic splitting) - 새 버전을 새 인스턴스 그룹에 배포하고 수신되는 클라이언트 트래픽을 일시적으로 기존 애플리케이션 버전과 새 애플리케이션 버전 간에 분할합니다.

롤링추가 배치를 사용한 롤링 배포 정책의 경우 다음을 구성할 수 있습니다.

  • 배치 크기(Batch size) - 각 배치에 배포할 인스턴스 세트의 크기입니다.

    비율(Percentage)을 선택하여 Auto Scaling 그룹에서 총 EC2 인스턴스 수의 비율(최대 100%)을 구성하거나 고정(Fixed)을 선택하여 인스턴스의 고정 수(환경의 Auto Scaling 구성에 있는 최대 인스턴스 수)를 구성합니다.

Traffic splitting(트래픽 분할) 배포 정책의 경우 다음을 구성할 수 있습니다.

  • 트래픽 분할(Traffic split) - Elastic Beanstalk가 수신되는 클라이언트 트래픽을 배포할 새 애플리케이션 버전을 실행하는 환경 인스턴스로 전환하는 초기 비율입니다.

  • 트래픽 분할 평가 시간(Traffic splitting evaluation time) - Elastic Beanstalk가 모든 수신 클라이언트 트래픽을 배포할 새 애플리케이션 버전으로 전환하기 전에 초기 정상 배포 후에 대기하는 시간(분)입니다.


        Elastic Beanstalk 애플리케이션 배포 구성 페이지

배포 기본 설정 섹션에는 상태 확인과 관련된 옵션이 포함되어 있습니다.

  • 상태 확인 무시(Ignore health check) - 배치가 명령 제한 시간(Command timeout) 내에 정상 상태가 되지 못할 경우 배포가 롤백되지 않도록 합니다.

  • 정상 임계 값(Healthy threshold) - 롤링 배포, 롤링 업데이트, 변경이 불가능한 업데이트 중에 인스턴스가 정상 상태로 간주되는 임계값을 낮춥니다.

  • 명령 제한 시간(Command timeout) - 배포를 취소하기 전에 인스턴스가 정상 상태가 될 때까지 또는 상태 확인 무시(Ignore health check)가 설정된 경우 다음 배치로 진행하기까지 대기할 시간(초)입니다.


        Elastic Beanstalk 애플리케이션 배포 구성 페이지

롤링 배포의 작동 방식

배치를 처리할 때 Elastic Beanstalk는 배치에 있는 모든 인스턴스를 로드 밸런서에서 분리하고, 새 애플리케이션 버전을 배포한 다음, 인스턴스를 다시 연결합니다. Connection Draining을 활성화한 경우 Elastic Beanstalk는 배포를 시작하기 전에 각 배치의 Amazon EC2 인스턴스에서 기존 연결을 드레이닝합니다.

배치의 인스턴스를 로드 밸런서에 다시 연결한 후 Elastic Load Balancing은 인스턴스가 최소한의 Elastic Load Balancing 상태 확인(정상 확인 개수 임계 값(Healthy check count threshold))을 전달할 때까지 기다린 다음 그 인스턴스로 트래픽을 라우팅하기 시작합니다. 상태 확인 URL이 구성되지 않은 경우 인스턴스가 TCP 연결을 수락할 수 있게 되는 즉시 상태 확인을 전달하기 때문에 이 작업이 매우 빠르게 수행될 수 있습니다. 상태 확인 URL이 구성된 경우 인스턴스가 상태 확인 URL에 대한 200 OK 요청에 응답하여 HTTP GET 상태 코드를 반환할 때까지 로드 밸런서가 업데이트된 인스턴스에 트래핑을 라우팅하지 않습니다.

Elastic Beanstalk는 배치에 있는 모든 인스턴스가 정상 상태가 될 때까지 대기한 후 다음 배치로 이동합니다. 기본 상태 보고를 사용할 경우 인스턴스 상태는 Elastic Load Balancing 상태 확인 상태에 의존합니다. 배치에 있는 모든 인스턴스가 Elastic Load Balancing에서 정상 상태로 간주될 수 있도록 상태 확인을 충분히 전달하면 배치가 완료됩니다. 확장 상태 보고가 활성화된 경우 Elastic Beanstalk는 수신 요청의 결과를 포함한 다른 여러 요인을 고려합니다. 확장된 상태 보고를 사용할 경우 모든 인스턴스는 웹 서버 환경에 대해서는 2분 내에 12회 연속으로 OK 상태의 상태 확인을 전달해야 하며, 작업자 환경에 대해서는 3분 내에 18회의 상태 확인을 전달해야 합니다.

한 배치의 인스턴스가 명령 제한 시간 내에 정상 상태가 되지 않으면 배포가 실패합니다. 배포에 실패한 후에는 환경에 있는 인스턴스의 상태를 확인하여 실패 원인에 대한 정보를 검토합니다. 그런 다음 고정된 또는 알려진 정상 버전의 애플리케이션으로 롤백하여 다른 배포를 수행합니다.

하나 이상의 배치가 성공적으로 완료된 후 배포에 실패할 경우 완료된 배치는 애플리케이션의 새로운 버전을 실행하는 반면, 대기 중인 배치는 계속 기존 버전을 실행합니다. 콘솔의 상태 페이지에서 환경의 인스턴스에서 실행 중인 버전을 식별할 수 있습니다. 이 페이지에는 환경의 각 인스턴스에서 실행된 가장 최신 배포의 배포 ID가 표시됩니다. 실패한 배포에서 인스턴스를 종료하면 Elastic Beanstalk는 해당 인스턴스를 가장 최근에 성공한 배포의 애플리케이션 버전을 실행하는 인스턴스로 교체합니다.

트래픽 분할 배포 작동 방식

트래픽 분할 배포를 사용하면 Canary 테스트를 수행할 수 있습니다. 수신되는 클라이언트 트래픽의 일부를 새 애플리케이션 버전으로 전환하여 애플리케이션의 상태를 확인한 후 새 버전으로 커밋하고 모든 트래픽을 해당 버전으로 보냅니다.

트래픽 분할 배포 시 Elastic Beanstalk는 별도의 임시 Auto Scaling 그룹에 새 인스턴스 세트를 만듭니다. 그런 다음 Elastic Beanstalk는 환경의 수신 트래픽 중 일정 비율을 새 인스턴스로 보내도록 로드 밸런서에 지시합니다. 그런 다음 Elastic Beanstalk는 구성된 시간 동안 새 인스턴스 세트의 상태를 추적합니다. 모두 양호하면 Elastic Beanstalk는 남은 트래픽을 새 인스턴스로 전환하고 환경의 원래 Auto Scaling 그룹에 연결하여 이전 인스턴스를 대체합니다. 그런 다음 Elastic Beanstalk가 정리되어 이전 인스턴스를 종료하고 임시 Auto Scaling 그룹을 제거합니다.

참고

트래픽 분할 배포 시에는 환경의 용량이 변경되지 않습니다. Elastic Beanstalk는 배포가 시작될 때 원래 Auto Scaling 그룹에 있는 것과 동일한 수의 인스턴스를 임시 Auto Scaling 그룹에서 시작합니다. 그런 다음 배포 기간 동안 두 Auto Scaling 그룹 모두에서 일정한 수의 인스턴스를 유지 관리합니다. 환경의 트래픽 분할 평가 시간을 구성할 때 이 사실을 고려하십시오.

배포를 이전 애플리케이션 버전으로 롤백하는 것이 빠르며 클라이언트 트래픽에 대한 서비스에 영향을 주지 않습니다. 새 인스턴스가 상태 확인을 통과하지 못하거나 배포를 중단하도록 선택하면 Elastic Beanstalk가 트래픽을 이전 인스턴스로 다시 이동하고 새 인스턴스를 종료합니다. Elastic Beanstalk 콘솔의 환경 개요 페이지를 사용하고 환경 작업(Environment actions)에서 현재 작업 중단(Abort current operation)을 선택하여 배포를 중단할 수 있습니다. 또한 AbortEnvironmentUpdate API 또는 이와 동등한 AWS CLI 명령을 호출할 수도 있습니다.

트래픽 분할 배포에는 Application Load Balancer가 필요합니다. Elastic Beanstalk는 Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성할 때 기본적으로 이 로드 밸런서 유형을 사용합니다.

배포 옵션 네임스페이스

aws:elasticbeanstalk:command 네임스페이스에서 구성 옵션을 사용하여 배포를 구성할 수 있습니다. 트래픽 분할 정책을 선택하면 aws:elasticbeanstalk:trafficsplitting 네임스페이스에서 이 정책에 대한 추가 옵션을 사용할 수 있습니다.

DeploymentPolicy 옵션을 사용하여 배포 유형을 설정합니다. 다음과 같은 값이 지원됩니다.

  • AllAtOnce - 롤링 배포를 비활성화하고 항상 모든 인스턴스를 동시에 배포합니다.

  • Rolling - 표준 롤링 배포를 활성화합니다.

  • RollingWithAdditionalBatch - 배포를 시작하기 전에 인스턴스의 추가 배치를 시작하여 전체 용량을 유지합니다.

  • Immutable - 모든 배포에 대해 변경 불가능한 업데이트를 수행합니다.

  • TrafficSplitting - 트래픽 분할 배포를 수행하여 애플리케이션 배포를 Canary 테스트합니다.

롤링 배포를 활성화할 때는 BatchSizeBatchSizeType 옵션을 설정하여 각 배치의 크기를 구성합니다. 예를 들어, 각 배치에서 모든 인스턴스의 25%를 배포하려면 다음과 같은 옵션과 값을 지정합니다.

예 .ebextensions/rolling-updates.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: Rolling BatchSizeType: Percentage BatchSize: 25

실행 중인 인스턴스 수와 관계 없이 각 배치에서 인스턴스 5개를 배포하고 인스턴스를 서비스에서 제외하기 전에 새 버전을 실행하는 인스턴스 5개를 추가로 불러오려면 다음과 같은 옵션과 값을 지정합니다.

예 .ebextensions/rolling-additionalbatch.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: RollingWithAdditionalBatch BatchSizeType: Fixed BatchSize: 5

상태 확인 임계 값이 경고인 각 배포에 대해 변경 불가능한 업데이트를 수행하고 배치의 인스턴스가 15분의 제한 시간 내에 상태 확인을 전달하지 않더라도 배포를 진행하려면 다음과 같은 옵션과 값을 지정합니다.

예 .ebextensions/immutable-ignorehealth.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: Immutable HealthCheckSuccessThreshold: Warning IgnoreHealthCheck: true Timeout: "900"

트래픽 분할 배포를 수행하여 클라이언트 트래픽의 15%를 새 애플리케이션 버전으로 전달하고 10분 동안 상태를 평가하려면 다음 옵션 및 값을 지정합니다.

예 .ebextensions/traffic-splitting.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: TrafficSplitting aws:elasticbeanstalk:trafficsplitting: NewVersionPercent: "15" EvaluationTime: "10"

EB CLI 및 Elastic Beanstalk 콘솔에서 위의 옵션에 대한 권장 값을 적용합니다. 구성 파일을 사용해 동일하게 구성하고자 하는 경우 이러한 설정을 제거해야 합니다. 자세한 내용은 권장 값 단원을 참조하십시오.