AWS Elastic Beanstalk
개발자 가이드

정책 및 설정 배포

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

롤링 배포를 사용할 경우 Elastic Beanstalk는 환경의 EC2 인스턴스를 배치로 분할하고 애플리케이션의 새 버전을 한 번에 하나의 배치로 배포하여 애플리케이션의 기존 버전을 실행하는 환경에 나머지 인스턴스를 그대로 둡니다. 롤링 배포 중 일부 인스턴스는 애플리케이션의 기존 버전을 사용하여 요청을 서비스하는 반면, 완료된 배치에 있는 인스턴스는 새로운 버전을 사용하여 다른 요청을 서비스합니다.

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

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

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

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

애플리케이션 배포 구성

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

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

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Configuration]을 선택합니다.

  4. 롤링 업데이트와 배포 구성 범주에서 수정을 선택합니다.

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

  6. 적용을 선택합니다.

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

  • 배포 방식 – 다음 배포 옵션 중에서 선택합니다.

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

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

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

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

  • 배치 크기 – 각 배치에 배포할 인스턴스 세트의 크기입니다.

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


        Elastic Beanstalk application deployment configuration(Elastic Beanstalk 애플리케이션 배포 구성) 페이지

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

  • 상태 확인 무시 – 배치가 명령 제한 시간 내에 정상 상태가 되지 못할 경우 배포가 롤백되지 않도록 합니다.

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

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


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

롤링 배포의 작동 방식

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

배치의 인스턴스를 로드 밸런서에 다시 연결한 후 Elastic Load Balancing은 인스턴스가 최소한의 Elastic Load Balancing 상태 확인(정상 확인 개수 임계값)을 전달할 때까지 기다린 다음 그 인스턴스로 트래픽을 라우팅하기 시작합니다. 상태 확인 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는 해당 인스턴스를 가장 최근에 성공한 배포의 애플리케이션 버전을 실행하는 인스턴스로 교체합니다.

The aws:elasticbeanstalk:command 네임스페이스

또한 aws:elasticbeanstalk:command 네임스페이스에서 구성 옵션을 사용하여 롤링 배포를 구성할 수 있습니다.

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

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

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

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

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

롤링 배포를 활성화할 때는 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"

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