Amazon ECS 서비스 배포 컨트롤러 및 전략 - Amazon Elastic Container Service

Amazon ECS 서비스 배포 컨트롤러 및 전략

서비스를 배포하기 전에 서비스를 배포하기 위한 옵션과 서비스가 사용하는 기능을 결정합니다.

일정 전략

사용 가능한 서비스 스케줄러 전략으로 다음 두 가지가 있습니다.

  • REPLICA—복제본 일정 전략은 클러스터에 원하는 작업 수를 배치하고 유지합니다. 기본적으로 서비스 스케줄러는 가용 영역에 태스크를 분산합니다. 작업 배치 전략과 제약을 사용하여 작업 배치 결정을 사용자 지정할 수 있습니다. 자세한 내용은 복제본 예약 전략 섹션을 참조하세요.

  • DAEMON—데몬 일정 전략은 사용자가 클러스터에 지정하는 작업 배치 제약을 모두 충족하는 각 활성 컨테이너 인스턴스에 한 작업씩 정확히 배포합니다. 이 전략을 사용하는 경우 원하는 태스크 수, 작업 배치 전략을 지정하거나 서비스 Auto Scaling 정책을 사용할 필요가 없습니다. 자세한 내용은 대몬 예약 전략 섹션을 참조하세요.

    참고

    Fargate 태스크는 DAEMON 일정 전략을 지원하지 않습니다.

복제본 예약 전략

복제본 일정 전략은 클러스터에 원하는 작업 수를 배치하고 유지합니다.

Fargate에서 작업을 실행하는 서비스의 경우, 서비스 스케줄러가 새 작업을 시작하거나 실행 중인 작업을 중지하면 서비스 스케줄러는 가용 영역 간의 밸런스를 유지하려고 최선을 다합니다. 작업 배치 전략이나 제약을 지정할 필요가 없습니다.

EC2 인스턴스에서 태스크를 실행하는 서비스를 생성할 때, 선택적으로 작업 배치 전략과 제약 조건을 지정하여 작업 배치 결정을 사용자 지정할 수 있습니다. 작업 배치 전략이나 제약 조건이 지정되지 않은 경우, 서비스 스케줄러는 기본적으로 가용 영역 간 태스크를 분산합니다. 서비스 스케줄러는 다음 로직을 사용합니다.

  • 클러스터에서 어느 컨테이너 인스턴스가 서비스의 태스크 정의를 지원할 수 있는지 판단합니다(예: 필요한 CPU, 메모리, 포트, 컨테이너 인스턴스 속성).

  • 서비스에 대해 정의된 배치 제약을 어느 컨테이너 인스턴스가 충족하는지 판단합니다.

  • 대몬(daemon) 서비스에 의존하는 복제 서비스(예: 작업에서 로깅을 사용하려면 먼저 실행해야 하는 대몬(daemon) 로그 라우터 작업)가 있는 경우, 대몬(daemon) 서비스 작업이 복제 서비스 작업보다 먼저 EC2 인스턴스에 배치되도록 작업 배치 제약을 생성합니다. 자세한 내용은 Amazon ECS 작업 배치 제약 조건 예제 섹션을 참조하세요.

  • 배치 전략이 정의되어 있으면 해당 전략을 사용하여 나머지 후보에서 인스턴스를 선택합니다.

  • 배치 전략이 정의되어 있지 않으면 다음 로직을 사용하여 클러스터의 가용 영역 사이로 태스크를 분산합니다.

    • 유효한 컨테이너 인스턴스를 정렬합니다. 해당 가용 영역에서 이 서비스에 대해 실행되고 있는 태스크의 수가 가장 적은 인스턴스에 우선순위가 지정됩니다. 예를 들어 영역 A에는 실행 중인 서비스 작업이 1개이고, 영역 B 및 C에는 0개일 경우 영역 B 또는 C가 최적 배치로 간주됩니다.

    • 이전 단계에 따라 최적 가용 영역의 유효한 컨테이너 인스턴스에서 새 서비스 태스크를 배치합니다. 이 서비스에 대해 실행 중인 태스크 수가 가장 적은 컨테이너 인스턴스를 우선으로 합니다.

REPLICA 전략을 사용할 때는 서비스의 고가용성 확보에 도움이 되므로 서비스 리밸런싱 기능을 사용하는 것이 좋습니다.

대몬 예약 전략

대몬(Daemon) 일정 전략은 클러스터에 지정된 작업 배치 제약을 모두 충족하는 각 활성 컨테이너 인스턴스에 한 작업씩 정확히 배포합니다. 서비스 스케줄러는 실행 중인 태스크에 대한 작업 배치 제약을 평가하고 배치 제약을 충족하지 않는 태스크를 중지합니다. 이 전략을 사용하는 경우 원하는 태스크 수와 태스크 배치 전략을 지정하거나 서비스 Auto Scaling 정책을 사용할 필요가 없습니다.

Amazon ECS는 대몬 태스크를 위해 CPU, 메모리 및 네트워크 인터페이스를 포함한 컨테이너 인스턴스 컴퓨팅 리소스를 예약합니다. 다른 복제 서비스가 있는 클러스터에서 대몬 서비스를 시작하면 Amazon ECS가 대몬 태스크를 우선순위로 지정합니다. 즉, 대몬 태스크는 인스턴스에서 가장 먼저 실행되는 태스크이며 모든 복제본 태스크가 중지된 후 마지막으로 중지되는 태스크입니다. 이 전략은 보류 중인 복제 태스크에서 리소스를 사용하지 않고 대몬 작업에 사용할 수 있도록 합니다.

대몬 서비스 스케줄러는 DRAINING 상태인 인스턴스에는 어떤 태스크도 배치하지 않습니다. 컨테이너 인스턴스가 DRAINING 상태로 전환하면 이 컨테이너 인스턴스에 대한 대몬 태스크가 중지됩니다. 또한 클러스터에 새 컨테이너 인스턴스가 추가되는지 모니터링하고 새 컨테이너 인스턴스에 대몬 태스크를 추가합니다.

배포 구성을 지정할 때 maximumPercent 파라미터의 값은 설정하지 않은 경우 기본값으로 사용되는 100(백분율로 지정)이어야 합니다. minimumHealthyPercent 파라미터의 기본값은 0(비율로 지정)입니다.

대몬 서비스의 배치 제약을 변경할 때 서비스를 다시 시작해야 합니다. Amazon ECS는 대몬 태스크에 적합한 인스턴스에 예약된 리소스를 동적으로 업데이트합니다. 기존 인스턴스의 경우 스케줄러는 인스턴스에 태스크를 배치하려고 시도합니다.

작업 정의에서 작업 크기 또는 컨테이너 리소스 예약을 변경하면 새 배포가 시작됩니다. 서비스를 업데이트하거나 태스크 정의의 다른 개정을 설정할 때도 새 배포가 시작됩니다. Amazon ECS는 대몬에 대한 업데이트된 CPU 및 메모리 예약을 선택한 다음, 대몬 작업에 대한 해당 용량을 차단합니다.

위의 경우 중 하나에 대한 리소스가 부족하면 다음과 같은 상황이 발생합니다.

  • 작업 배치가 실패합니다.

  • CloudWatch 이벤트가 생성됩니다.

  • Amazon ECS는 리소스를 사용할 수 있을 때까지 기다리면서 인스턴스에 대한 태스크를 계속 시도하고 예약합니다.

  • Amazon ECS는 더 이상 배치 제약 기준을 충족하지 않는 예약 인스턴스를 확보하고 해당 대몬 태스크를 중지합니다.

대몬 일정 전략은 다음과 같은 경우에 사용할 수 있습니다.

  • 애플리케이션 컨테이너 실행

  • 로깅, 모니터링 및 추적 태스크를 위한 지원 컨테이너 실행

Fargate 시작 유형이나 CODE_DEPLOY 또는 EXTERNAL 배포 컨트롤러 유형을 사용하는 태스크는 대몬 일정 전략을 지원하지 않습니다.

서비스 스케줄러는 실행 태스크를 중지할 때 클러스터의 가용 영역 간에 밸런싱을 유지하려고 합니다. 스케줄러는 다음 로직을 사용합니다.

  • 배치 전략이 정의된 경우 해당 전략을 사용하여 종료할 태스크를 선택합니다. 예를 들어 서비스에 가용 영역 분산 전략이 정의되어 있으면, 나머지 태스크를 최적 분산 상태로 만드는 태스크가 선택됩니다.

  • 정의된 배치 전략이 없으면 다음 로직을 사용하여 클러스터 내 가용 영역 간 밸런스를 유지 관리합니다.

    • 유효한 컨테이너 인스턴스를 정렬합니다. 해당 가용 영역에서 이 서비스에 대해 실행되고 있는 태스크의 수가 가장 많은 인스턴스에 우선순위가 지정됩니다. 예를 들어 영역 A에는 실행 중인 서비스 태스크가 1개이고 영역 B 및 C에는 2개일 경우, 영역 B 또는 C의 컨테이너 인스턴스가 종료에 최적인 것으로 간주됩니다.

    • 이전 단계에 따라 최적 가용 영역의 컨테이너 인스턴스에서 태스크를 중지합니다. 이 서비스에 대해 실행 중인 태스크 수가 가장 많은 컨테이너 인스턴스를 우선으로 합니다.

배포 컨트롤러

배포 컨트롤러는 서비스에 대해 태스크 배포 방법을 결정하는 메커니즘입니다. 유효한 옵션은 다음과 같습니다.

  • ECS

    ECS 배포 컨트롤러를 사용하는 서비스를 생성하는 경우 다음 배포 전략 중에서 선택할 수 있습니다.

    • ROLLING: 롤링 업데이트(ROLLING) 배포 유형을 사용하는 서비스를 생성하는 경우 Amazon ECS 서비스 스케줄러가 현재 실행 중인 태스크를 새 태스크로 대체합니다. 롤링 업데이트 중에 Amazon ECS가 서비스에 추가하거나 서비스에서 제거하는 작업의 수는 서비스 배포 구성으로 제어합니다.

      롤링 업데이트 배포는 다음 시나리오에 가장 적합합니다.

      • 점진적 서비스 업데이트: 전체 서비스를 한 번에 오프라인으로 전환하지 않고 서비스를 점진적으로 업데이트해야 합니다.

      • 제한된 리소스 요구 사항: 블루/그린 배포에서 필요한 대로 두 개의 전체 환경을 동시에 실행하는 데 드는 추가 리소스 비용을 피하려고 합니다.

      • 허용되는 배포 시간: 롤링 업데이트는 태스크를 하나씩 대체하므로 애플리케이션이 더 긴 배포 프로세스를 허용할 수 있습니다.

      • 즉각적인 롤백 필요 없음: 서비스가 몇 초가 아닌 몇 분 정도 걸리는 롤백 프로세스를 허용할 수 있습니다.

      • 간단한 배포 프로세스: 여러 환경, 대상 그룹 및 리스너를 관리하는 복잡성 없이 간단한 배포 접근 방식을 선호합니다.

      • 로드 밸런서 요구 사항 없음: 서비스에서 로드 밸런서, Application Load Balancer, Network Load Balancer 또는 Service Connect(블루/그린 배포에 필요함)를 사용하거나 필요로 하지 않습니다.

      • 상태 저장 애플리케이션: 애플리케이션이 두 개의 병렬 환경을 실행하기 어려운 상태를 유지 관리합니다.

      • 비용 민감도: 배포 중에 중복 환경을 실행하지 않음으로써 배포 비용을 최소화하려고 합니다.

      롤링 업데이트는 서비스의 기본 배포 전략이며 많은 일반적인 애플리케이션 시나리오에서 배포 안전과 리소스 효율성 간의 균형을 제공합니다.

    • BLUE_GREEN: 블루/그린 배포 전략(BLUE_GREEN)은 블루와 그린이라는 두 개의 동일한 프로덕션 환경을 실행하여 가동 중지 시간과 위험을 줄이는 릴리스 방법론입니다. Amazon ECS 블루/그린 배포를 사용하면 프로덕션 트래픽을 전달하기 전에 새 서비스 개정을 검증할 수 있습니다. 이 접근 방식은 필요한 경우 빠르게 롤백하는 기능을 통해 변경 내용을 배포하는 더 안전한 방법을 제공합니다.

      Amazon ECS 블루/그린 배포는 다음 시나리오에 가장 적합합니다.

      • 서비스 검증: 프로덕션 트래픽을 전달하기 전에 새 서비스 개정을 검증해야 하는 경우

      • 가동 중지 시간 없음: 서비스에 가동 중지 시간 없는 배포가 필요한 경우

      • 즉시 롤백: 문제가 감지되면 빠르게 롤백할 수 있는 기능이 필요한 경우

      • 로드 밸런서 요구 사항: 서비스가 Application Load Balancer, Network Load Balancer 또는 Service Connect를 사용하는 경우

  • 외부

    타사 배포 컨트롤러를 사용합니다.

  • 블루/그린 배포(AWS CodeDeploy 제공)

    CodeDeploy는 애플리케이션의 업데이트된 버전을 새 대체 태스크 세트로 설치하고 원래 애플리케이션 태스크 세트에서 대체 태스크 세트로 프로덕션 트래픽을 다시 라우팅합니다. 배포가 성공하면 기존 작업 세트는 종료됩니다. 이 배포 컨트롤러를 사용하여 프로덕션 트래픽을 전송하기 전에 서비스의 새로운 배포를 확인합니다.