Amazon ECS 서비스 파라미터 업데이트

Amazon ECS 서비스 파라미터 업데이트

서비스를 만든 후 태스크 수 같은 서비스 파라미터를 업데이트해야 하는 경우가 있어요. 서비스 스케줄러는 새 태스크를 실행할 때 다음 로직으로 클러스터에서 태스크 배치를 결정해요.

출처: 문서

본문

  1. 클러스터의 컨테이너 인스턴스 중 어떤 것이 서비스의 태스크 정의를 지원할 수 있는지 결정합니다. 예를 들어 필수 CPU, 메모리, 포트, 컨테이너 인스턴스 속성을 갖고 있는지 확인합니다.
  2. 기본적으로 서비스 스케줄러는 다른 배치 전략을 선택할 수 있음에도 불구하고 이 방식으로 가용 영역 간 태스크 균형을 맞추려고 시도합니다.
  3. 인스턴스와 같은 가용 영역에서 이 서비스의 실행 중인 태스크 수가 가장 적은 순으로 유효한 컨테이너 인스턴스를 정렬합니다. 예를 들어 영역 A에 실행 중인 서비스 태스크가 1개 있고 영역 B와 C에는 각각 0개라면, 영역 B 또는 C의 유효한 컨테이너 인스턴스가 배치에 최적인 것으로 간주됩니다.
  4. (이전 단계 기반의) 최적 가용 영역의 유효한 컨테이너 인스턴스에 새 서비스 태스크를 배치하며, 이 서비스의 실행 중인 태스크 수가 가장 적은 컨테이너 인스턴스를 선호합니다.

서비스 스케줄러가 실행 중인 태스크를 중지할 때는 다음 로직을 사용해 클러스터의 가용 영역 간 균형을 유지하려고 시도합니다.

  1. 인스턴스와 같은 가용 영역에서 이 서비스의 실행 중인 태스크 수가 가장 많은 순으로 컨테이너 인스턴스를 정렬합니다. 예를 들어 영역 A에 실행 중인 서비스 태스크가 1개 있고 영역 B와 C에는 각각 2개라면, 영역 B 또는 C의 컨테이너 인스턴스가 종료에 최적인 것으로 간주됩니다.
  2. (이전 단계 기반의) 최적 가용 영역의 컨테이너 인스턴스에서 태스크를 중지하며, 이 서비스의 실행 중인 태스크 수가 가장 많은 컨테이너 인스턴스를 선호합니다.

다음 목록을 사용해 서비스 파라미터를 변경할 수 있는지 결정하세요.

가용 영역 리밸런싱 (Availability Zone rebalancing)

서비스에 가용 영역 리밸런싱을 사용할지 여부를 나타내요. 롤링 배포에서는 이 파라미터를 변경할 수 있어요.

용량 공급자 전략 (Capacity provider strategy)

용량 공급자 전략의 세부 정보예요. 클러스터를 만들 때, 태스크를 실행할 때, 또는 서비스를 업데이트할 때 용량 공급자를 설정할 수 있어요. Fargate를 사용하면 용량 공급자는 FARGATE 또는 FARGATE_SPOT이에요. Amazon EC2를 사용하면 용량 공급자는 Auto Scaling 그룹이에요. 롤링 배포와 블루/그린 배포에서 용량 공급자를 변경할 수 있어요. 유효한 전환을 보려면 Service mutability를 참고하세요.

클러스터 (Cluster)

클러스터 이름은 변경할 수 없어요.

배포 구성 (Deployment configuration)

배포 구성에는 장애를 감지하는 데 사용되는 CloudWatch 알람, 회로 차단기(circuit breaker)와 필수 구성이 포함돼요.

  • 배포 회로 차단기는 서비스가 안정 상태에 도달할 수 없으면 서비스 배포가 실패할지 결정해요. 배포 회로 차단기를 사용하면 서비스 배포는 실패 상태로 전환되고 새 태스크 실행을 중지해요. 롤백 옵션을 사용하면 서비스 배포가 실패할 때 서비스는 마지막으로 성공적으로 완료된 배포로 롤백돼요.
  • Amazon ECS 회로 차단기를 사용하는 서비스를 업데이트하면 Amazon ECS는 서비스 배포와 서비스 개정을 만들어요. 이 리소스를 통해 서비스 기록에 대한 자세한 정보를 볼 수 있어요. 자세한 내용은 View service history using Amazon ECS service deployments를 참고하세요.
  • 서비스 스케줄러는 (서비스의 배포 구성에 있는) minimum healthy percent와 maximum percent 파라미터를 사용해 배포 전략을 결정해요.
  • 서비스가 롤링 업데이트(ECS) 배포 유형을 사용하면, minimum healthy percent는 배포 중에 RUNNING 상태로 유지되어야 하는 서비스의 태스크 수에 대한 하한을 desired task 수의 백분율(가장 가까운 정수로 올림)로 나타내요. 서비스에 EC2를 사용하는 태스크가 포함되어 있다면 컨테이너 인스턴스가 DRAINING 상태인 동안에도 이 파라미터가 적용돼요. 이 파라미터를 사용해 추가 클러스터 용량 없이 배포할 수 있어요. 예를 들어 서비스의 desired task 수가 4이고 minimum healthy percent가 50%라면, 스케줄러가 기존 태스크 2개를 중지해 클러스터 용량을 확보한 다음 새 태스크 2개를 시작할 수 있어요. 로드 밸런서를 사용하지 않는 서비스의 경우 서비스는 태스크가 RUNNING 상태이면 정상으로 간주해요. 로드 밸런서를 사용하는 서비스의 경우 서비스는 태스크가 RUNNING 상태이고 로드 밸런서가 정상으로 보고하면 정상으로 간주해요. minimum healthy percent의 기본값은 100%예요.
  • 서비스가 롤링 업데이트(ECS) 배포 유형을 사용하면, maximum percent는 배포 중에 PENDING, RUNNING 또는 STOPPING 상태로 허용되는 서비스의 태스크 수에 대한 상한을 desired task 수의 백분율(가장 가까운 정수로 내림)로 나타내요. 서비스에 EC2를 사용하는 태스크가 포함되어 있다면 컨테이너 인스턴스가 DRAINING 상태인 동안에도 이 파라미터가 적용돼요. 이 파라미터를 사용해 배포 배치 크기를 정의해요. 예를 들어 서비스의 desired task 수가 4이고 maximum percent 값이 200%라면, 스케줄러가 기존 태스크 4개를 중지하기 전에 새 태스크 4개를 시작할 수 있어요. 단 이를 수행하는 데 필요한 클러스터 리소스를 사용할 수 있어야 해요. maximum percent의 기본값은 200%예요.
  • 서비스 스케줄러가 업데이트 중에 태스크를 교체할 때, 서비스는 먼저 (사용한다면) 로드 밸런서에서 태스크를 제거하고 연결이 드레이닝될 때까지 기다려요. 그런 다음 태스크에서 실행되는 컨테이너에 docker stop에 해당하는 작업이 발행돼요. 이로 인해 SIGTERM 신호와 30초 시간 초과가 발생하고, 그 후 SIGKILL이 전송되어 컨테이너가 강제로 중지돼요. 컨테이너가 SIGTERM 신호를 정상적으로 처리하고 수신 후 30초 내에 종료하면 SIGKILL 신호는 전송되지 않아요. 서비스 스케줄러는 minimum healthy percent와 maximum percent 설정에 정의된 대로 태스크를 시작하고 중지해요.
  • 서비스 스케줄러는 컨테이너 상태 검사 또는 로드 밸런서 대상 그룹 상태 검사가 실패한 후 비정상으로 판단된 태스크도 교체해요. 이 교체는 서비스 정의 파라미터인 maximumPercent와 desiredCount에 따라 달라져요. 태스크가 비정상으로 표시되면 서비스 스케줄러는 먼저 교체 태스크를 시작해요. 그런 다음 다음이 발생해요.
    • 교체 태스크의 상태가 HEALTHY이면 서비스 스케줄러는 비정상 태스크를 중지해요.
    • 교체 태스크의 상태가 UNHEALTHY이면 스케줄러는 비정상 교체 태스크 또는 기존 비정상 태스크 중 하나를 중지해 총 태스크 수가 desiredCount와 같아지게 해요.
    • maximumPercent 파라미터가 스케줄러가 먼저 교체 태스크를 시작하는 것을 제한하면, 스케줄러는 용량을 확보하기 위해 비정상 태스크를 무작위로 한 번에 하나씩 중지한 다음 교체 태스크를 시작해요.
    • 이 시작 및 중지 프로세스는 모든 비정상 태스크가 정상 태스크로 교체될 때까지 계속돼요. 모든 비정상 태스크가 교체되고 정상 태스크만 실행되고 있다면, 총 태스크 수가 desiredCount를 초과할 때 정상 태스크는 총 태스크 수가 desiredCount와 같아질 때까지 무작위로 중지돼요.