Amazon ECS Capacity Providers의 크기 조정 문제는 어떻게 해결합니까?

최종 업데이트 날짜: 2022년 4월 14일

Amazon Elastic Container Service(Amazon ECS) 클러스터용으로 용량 공급자를 설정했습니다. 하지만 클러스터의 리소스가 부족할 때 용량 공급자가 확장되지 않거나 용량이 남을 때 축소되지 않습니다.

간략한 설명

Amazon ECS 클러스터의 용량 공급자가 자동으로 확장되거나 축소되지 않는 경우 다음 원인 중 하나 이상 때문입니다.

  • Amazon ECS 서비스가 용량 공급자와 연결되어 있지 않습니다.
  • 용량 공급자와 관련한 크기 조정 정책이 Auto Scaling 그룹에 연결되어 있지 않습니다.
  • 대상 추적 크기 조정 정책이 올바르게 구성되지 않았습니다.
  • 목표 용량 비율이 용량 공급자에 올바르게 구성되지 않았습니다.
  • 태스크 배치 전략이 워크로드에 따라 정의되지 않았습니다.
  • ECS 서비스가 오류로 인해 실패하고 용량 공급자의 확장이 차단됩니다.
  • 용량 공급자에 관리형 크기 조정 기능을 사용하고 있으며 Auto Scaling 그룹에는 사용자 지정 크기 조정 정책이 연결되어 있습니다.
  • Auto Scaling 그룹이 컨테이너 인스턴스를 시작했지만 클러스터에 조인할 수 없습니다.
  • 컨테이너 인스턴스는 축소되지 않도록 보호됩니다.
  • 용량 공급자가 실패 상태에서 응답하지 않습니다.
  • Auto Scaling 그룹이 확장 및 축소 루프에서 응답하지 있습니다.

해결 방법

Amazon ECS 서비스가 용량 공급자와 연결되어 있지 않음

ECS 서비스가 용량 공급자와 연결되어 있는지 확인하려면 AWS Command Line Interface(AWS CLI) 명령 describe-services를 실행합니다.

aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query services[].capacityProviderStrategy

ECS 서비스가 용량 공급자와 연결된 경우 출력은 다음과 비슷해야 합니다.

[
  [
    {
      "capacityProvider": "example-capacity-provider",
      "weight": 1,
      "base": 1
    }
  ]
]

출력에서 capacityProviderStrategy 필드가 null이 아닌지 확인합니다. CreateServiceUpdateService API 호출에 대한 AWS CloudTrail 이벤트에서 서비스 구성을 확인할 수 있습니다.

이 문제를 해결하려면 AWS CLI 명령 update-service, run-task 또는 put-cluster-capacity-providers를 사용하여 ECS 서비스를 업데이트하세요. Amazon ECS 콘솔을 사용하여 서비스를 업데이트할 수도 있습니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

용량 공급자가 생성되어 Auto Scaling 그룹에 연결되면 Auto Scaling 그룹은 대상 추적을 사용하여 클러스터 로드를 수용하기 위해 원하는 용량을 수정하는 크기 조정 정책을 생성합니다.

이 문제를 해결하려면 UpdateAutoScalingGroup, CreateCapacityProvider, UpdateCapacityProviderPutScalingPolicy API에 대한 CloudTrail 이벤트를 검토하세요.

다음 명령을 실행하여 Auto Scaling 그룹이 클러스터 연결로 생성되었는지 확인합니다.

aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query clusters[].attachments[]

명령의 출력이 다음과 비슷해야 합니다.

[
  {
    "id": "100a23456-5f0b-4abc-b998-d6789d111a",
    "type": "asp",
    "status": "CREATED",
    "details": [
      {
        "name": "capacityProviderName",
        "value": "example-capacityProvider"
      },
      {
        "name": "scalingPlanName",
        "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345"
      }
    ]
  }
]

관리형 크기 조정 정책을 사용하는 경우 다음을 수행하여 정책이 Auto Scaling 그룹에 연결되었는지 확인합니다.

  1. Amazon ECS 콘솔을 엽니다.
  2. 탐색 창에서 Clusters(클러스터)를 선택합니다.
  3. 확인하고자 하는 클러스터를 엽니다.
  4. Capacity Providers(용량 공급자) 탭을 선택합니다.
  5. 확인하려는 용량 공급자에 대해 ASG를 선택합니다.
    Amazon EC2 콘솔에서 Auto Scaling groups(Auto Scaling 그룹) 페이지로 이동됩니다.
  6. Auto Scaling 탭을 선택합니다.
    크기 조정 정책을 볼 수 있습니다.
  7. 사용 중인 크기 조정 정책이 포함되어 있는지 확인합니다.

또한 Auto Scaling 그룹 크기 조정 정책의 이름에 AutoScaling-ECSManagedAutoScalingPlan이라는 접두사가 포함되어 있는지 확인합니다. 그렇지 않으면 Auto Scaling 그룹이 용량 공급자가 관리하는 정책과 다른 크기 조정 정책을 사용하는 것입니다. 용량 공급자는 다른 유형의 크기 조정 정책으로 사용할 수 있습니다. 자세한 내용은 서비스 자동 크기 조정을 참조하세요.

대상 추적 크기 조정 정책이 올바르게 구성되지 않았습니다.

대상 추적 크기 조정 정책은 정의한 지표의 목표 값을 추적합니다. Amazon ECS 서비스 자동 크기 조정 기능은 규모 조정 정책을 트리거하는 Amazon CloudWatch 경보를 생성 및 관리하고, 지표와 대상 값을 기준으로 크기 조정 값을 계산합니다. 대상 추적 정책이 올바르게 구성되지 않은 경우 필요에 따라 태스크가 자동으로 크기 조정되지 않을 수 있습니다.

대상 추적 자동 크기 조정 정책이 CloudWatch의 CPU 사용률 지표를 추적하고 중이고, 대상 추적 비율을 60으로 지정한다고 가정해보겠습니다. 이 경우 용량 공급자는 총 CPU 사용률을 최대한 60%로 유지하려고 시도합니다. 이로 인해 CPU 사용률이 60%보다 높으면 확장 이벤트가 발생하고 사용률이 60% 미만이면 축소 이벤트가 발생합니다.

이 문제를 해결하려면 대상 추적 정책에서 워크로드에 따라 올바른 지표를 선택하고 올바른 축소 및 확장 값을 설정하세요. 자세한 내용은 대상 추적 크기 조정 정책을 참조하세요.

목표 용량 비율이 용량 공급자에 올바르게 구성되지 않았습니다.

목표 용량 값은 Amazon ECS 관리형 대상 추적 크기 조정 정책에 사용되는 CloudWatch 지표의 목표 값으로 사용됩니다. 용량 공급자는 이 목표 용량 값을 최대한 유지하려고 시도합니다. 이 값에 허용되는 값은 1에서 100 사이의 정수입니다. 예를 들어 목표 용량을 100%로 설정하면 모든 인스턴스가 사용되고, 태스크를 실행하지 않는 인스턴스는 모두 축소됩니다. 하지만 이러한 동작이 항상 보장되는 것은 아닙니다. 여유 용량이 필요한 경우 요구 사항에 따라 목표 용량을 100%보다 약간 낮은 값으로 설정하세요.

올바른 목표 용량 비율로 용량 공급자를 업데이트하려면 클래식 콘솔을 사용하여 Auto Scaling 그룹 용량 공급자 업데이트의 지침을 따르세요.

태스크 배치 전략이 워크로드에 따라 정의되지 않았습니다.

서비스를 생성하거나 태스크를 실행할 때 태스크 배치 전략을 지정할 수 있습니다. 기존 서비스의 태스크 배치 전략을 업데이트할 수도 있습니다. 예를 들어 메모리 집약적인 워크로드에 대해, 거기에 맞게 태스크 배치 전략을 구성하지 않으면 메모리 사용량에 따라 태스크가 확장되거나 축소되지 않습니다. 태스크 배치 전략 유형을 확인하고 워크로드에 따라 이 전략을 정의해야 합니다.

ECS 서비스가 실패하고 오류가 발생하여 용량 제공자의 확장이 차단됨

오류가 발생하여 ECS 서비스가 실패하면 용량 공급자가 축소 및 확장할 수 없도록 차단됩니다. ECS 서비스가 실패한 원인을 해결하려면 Amazon ECS 콘솔에서 서비스 이벤트 메시지를 확인하세요.

용량 공급자에 관리형 크기 조정을 사용하고 있으며 Auto Scaling 그룹에는 사용자 지정 조정 정책이 연결되어 있습니다.

클러스터가 자동으로 확장되지 않으면 다음 오류가 발생할 수 있습니다.

"StatusCode": "ActiveWithProblems"
"StatusMessage": "Scaling plan has been created but failed to be applied to all resources. Problems were encountered for 1 resource. See scaling plan resources for the failure details."
이 오류는 다음 조건에 해당할 경우 발생합니다.
  • 용량 공급자에 AWS 관리형 크기 조정을 사용하고 있습니다.
  • Auto Scaling 그룹에 연결된 Amazon ECS에서 생성되지 않는 사용자 지정 크기 조정 정책이 있습니다.

이 오류를 해결하려면 ActiveWithProblems 오류 방지를 참조하세요. 관리형 크기 조정을 활성화하면 Amazon ECS가 Auto Scaling 크기 조정 플랜을 사용하여 Auto Scaling 그룹의 축소 및 확장 작업을 관리합니다. 항상 새 Auto Scaling 그룹을 생성하고 이 그룹을 용량 공급자에 연결하는 것이 좋습니다.

Auto Scaling 그룹에서 컨테이너 인스턴스를 시작했지만 클러스터에 조인할 수 없음

컨테이너 인스턴스가 축소되지 않도록 보호됨

용량 공급자를 구성할 때 관리형 종료 보호를 활성화한 경우, Amazon ECS는 축소 작업 중에 태스크가 포함된 Auto Scaling 그룹의 Amazon EC2 인스턴스가 종료되는 것을 방지합니다.

원하는 용량을 변경할 때 Auto Scaling 그룹이 이전 인스턴스를 종료할 수 있도록 하려면 다음과 같이 합니다.

자세한 내용은 Amazon ECS에서 "Capacity Provider에 대한 관리형 종료 보호 설정이 올바르지 않습니다." 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

용량 공급자가 실패 상태에서 응답하지 않음

기존 그룹을 사용하지 말고, 용량 공급자에 사용할 새 Auto Scaling 그룹을 생성하는 것이 좋습니다. 기존 Auto Scaling 그룹을 사용하면 용량 공급자를 사용하는 데 문제가 발생할 수 있습니다. 이는 기존 그룹과 연결되어 있고 Amazon ECS 클러스터에 등록된 실행 중 상태의 Amazon EC2 인스턴스가 용량 공급자에 제대로 등록되지 않았을 수 있기 때문입니다.

용량 공급자의 상태를 보려면 AWS CLI 명령 describe-capacity-providers를 실행합니다.

또한 CloudTrail 이벤트에서 CreateCapacityProvider API와 관련한 오류가 있는지 확인합니다.

Auto Scaling 그룹이 확장 및 축소 루프에서 응답하지 있음

ECS 서비스의 크기 조정 정책에 지정된 지표 값이 급증하면 Auto Scaling 그룹이 필요에 따라 인스턴스를 확장하고 시작합니다. 하지만 급증한 이후 지표 값이 떨어지면 Auto Scaling 그룹은 인스턴스에서 축소를 시도합니다. 지표 값이 단시간 내에 여러 번 변동할 경우 Auto Scaling 그룹이 확장 및 축소 루프에서 중단될 수 있습니다. 이 문제를 방지하려면 워크로드에 따라 크기 조정 정책에서 지표의 임계값을 정의해야 합니다.