대상 추적 조정 정책 - Amazon Elastic Container Service

대상 추적 조정 정책

대상 추적 조정 정책을 사용하는 경우 지표를 선택하고 목표 값을 설정합니다. Amazon ECS 서비스 자동 크기 조정은 조정 정책을 트리거하는 CloudWatch 경보를 생성 및 관리하고 지표와 대상 값을 기준으로 조정 조절을 계산합니다. 조정 정책은 필요에 따라 서비스 태스크를 추가하거나 제거하여 측정치를 지정된 대상 값과 같거나 비슷하게 유지합니다. 측정치를 대상 값과 비슷하게 유지하는 것 외에도, 대상 추적 조정 정책은 변동하는 로드 패턴으로 인한 측정치 변동에 맞게 조정하고 서비스에서 실행 중인 작업 수의 급격한 변동을 최소화합니다.

고려 사항

다음 사항에 유의합니다.

  • 대상 추적 조정 정책은 지정한 지표가 목표 값을 초과할 때 한해서 확장을 수행해야 합니다. 대상 추적 조정 정책에서는 지정한 지표가 목표 값보다 작을 때 확장할 수 없습니다.

  • 대상 추적 조정 정책에서는 지정한 지표에 데이터가 부족할 때 조정을 수행하지 않습니다. 데이터가 부족하다고 해서 사용량이 낮은 것으로 해석하지 않기 때문에 축소를 수행하지 않습니다.

  • 목표 값과 실제 지표 데이터 포인트 사이에는 차이가 발생할 수 있습니다. 서비스 자동 크기 조정이 추가하거나 제거할 용량을 결정할 때마다 항상 반올림 또는 내림을 통해 어림짐작으로 동작하기 때문입니다. 이는 용량을 부족하게 추가하거나 너무 많이 제거하는 일을 방지하기 위해서입니다.

  • 애플리케이션 가용성을 보장하기 위해 서비스는 지표에 비례하여 가능한 한 빠르게 확장하지만, 비교적 점진적으로 축소합니다.

  • Application Auto Scaling은 Amazon ECS 배포가 진행 중인 동안 축소 프로세스를 비활성화합니다. 그러나 배포 중에 일시 중단되지 않는 한 확장 프로세스는 계속 발생합니다. 자세한 정보는 서비스 자동 크기 조정 및 배포 섹션을 참조하세요.

  • 각 정책이 다른 측정치를 사용한다면 한 Amazon ECS 서비스에 대해 여러 대상 추적 조정 정책을 생성할 수 있습니다. 서비스 자동 크기 조정은 항상 가용성을 우선시하므로, 대상 추적 정책이 확장 또는 축소를 허용하는지에 따라 그 동작이 달라집니다. 대상 추적 정책 중 하나라도 확장을 허용할 경우 서비스를 확장하지만, 모든 대상 추적 정책(축소 부분이 활성화됨)이 축소를 허용하는 경우에만 서비스를 축소합니다.

  • 서비스 자동 크기 조정의 대상 추적 조정 정책에서 관리되는 CloudWatch 경보는 편집하거나 삭제하지 마세요. 조정 정책을 삭제하면 서비스 자동 크기 조정에서 경보가 자동으로 삭제됩니다.

자습서: 대상 추적을 사용하는 서비스 자동 크기 조정

다음 절차는 Amazon ECS 클러스터와 대상 추적을 사용하여 수요에 따라 자동으로 확장(및 축소)하는 서비스를 생성하는 데 도움이 됩니다.

이 자습서에서는 Amazon ECS 처음 실행 마법사를 사용하여 클러스터와 Elastic Load Balancing 로드 밸런서 이면에서 실행되는 서비스를 생성합니다. 그런 다음 서비스의 CPU 사용률에 의해 측정된 현재 애플리케이션 로드를 기반으로 서비스를 자동으로 확장하는 대상 추적 조정 정책을 구성합니다(CloudWatch의 ECS, ClusterName, ServiceName 범주에서).

서비스의 평균 CPU 사용률이 75% 이상으로 상승하면(서비스를 위해 예약된 CPU의 75% 이상이 사용되고 있음을 의미) 확장 경보가 서비스 자동 크기 조정을 트리거하여 서비스에 다른 태스크를 추가함으로써 부하 증가를 지원합니다. 반대로 서비스의 평균 CPU 사용률이 일정 기간 동안 대상 사용률 이하로 떨어지면 축소 경보가 서비스의 원하는 수 감소를 트리거하여 해당 클러스터 리소스를 다른 작업 및 서비스에 사용할 수 있도록 확보합니다.

사전 조건

이 자습서에서는 관리자 자격 증명을 사용하고 있으며 현재 리전에 Amazon EC2 키 페어가 있다고 가정합니다. 이러한 리소스가 없거나 확실하지 않으면 Amazon ECS 사용 설정의 단계에 따라 리소스를 생성할 수 있습니다.

1단계: 클러스터 및 서비스 생성

먼저 Amazon ECS 처음 실행 마법사를 사용하여 클러스터 및 서비스를 생성합니다. 처음 실행 마법사는 이 자습서에 필요한 IAM 역할, 컨테이너 인스턴스에 대한 Auto Scaling 그룹, 로드 밸런서 이면에서 실행되는 서비스를 생성합니다. 또한 이 마법사를 사용하면 전체 AWS CloudFormation 스택을 한 단계로 삭제할 수 있기 때문에 정리 프로세스를 훨씬 더 쉽게 수행할 수 있습니다.

이 자습서에서는 service-autoscaling이라고 하는 클러스터와 sample-webapp이라고 하는 서비스를 생성합니다.

클러스터와 서비스를 생성하려면

  1. https://console.aws.amazon.com/ecs/home#/firstRun에서 Amazon ECS 콘솔 처음 실행 마법사를 엽니다.

  2. 탐색 모음에서 미국 동부(버지니아 북부) 리전을 선택합니다.

  3. 1단계: 컨테이너 및 작업(Step 1: Container and Task)컨테이너 정의(Container definition)에서 sample-app을 선택합니다.

  4. 태스크 정의(Task definition)에서 모든 기본 옵션을 그대로 두고 다음(Next)을 선택합니다.

  5. 2단계: 서비스(Step 2: Service)로드 밸런서 유형(Load balancer type)에서 Application Load Balancer, 다음(Next)을 선택합니다.

    중요

    Application Load Balancer가 AWS 리소스에 존재하는 동안은 비용이 발생합니다. 자세한 정보는 Elastic Load Balancing 요금을 참조하세요.

  6. 3단계: 클러스터(Step 3: Cluster)클러스터 이름(Cluster name)service-autoscaling을 입력하고 다음(Next)을 선택합니다.

  7. 선택 사항을 검토한 다음 생성(Create)을 선택합니다.

    시작 상태를 보여 주고 프로세스의 각 단계를 설명하는 시작 상태 페이지로 연결됩니다(이 단계에서 클러스터 리소스가 생성되고 채워지므로 이 단계가 완료되려면 몇 분 정도 시간이 걸릴 수 있습니다).

  8. 클러스터와 서비스가 생성되면 서비스 보기(View service)를 선택합니다.

2단계: 서비스 자동 크기 조정 구성

지금까지 클러스터를 시작하고 로드 밸런서 뒤에서 실행되는 해당 클러스터의 서비스를 생성했으므로 이제 대상 추적 조정 정책을 생성하여 서비스 자동 크기 조정을 사용할 수 있습니다.

기본 서비스 자동 크기 조정 파라미터를 구성하려면

  1. 서비스: sample-app-service 페이지에서 서비스 구성이 아래 이미지와 비슷하게 보여야 합니다. 다만 태스크 정의 개정 및 로드 밸런서 이름은 다를 수 있습니다. 업데이트(Update)를 선택해 새 서비스를 업데이트합니다.

    
                                구성 옵션 선택
  2. 서비스 업데이트 페이지에서 3단계: Auto Scaling 설정(선택 사항)(Step 3: Set Auto Scaling (optional))에 도달할 때까지 다음 단계(Next step)를 선택합니다.

  3. 서비스 자동 크기 조정에서 서비스의 원하는 개수를 조정하도록 서비스 자동 크기 조정 구성(Configure Service Auto Scaling to adjust your service’s desired count)을 선택합니다.

  4. 작업의 최소 개수(Minimum number of tasks)에서 서비스 자동 크기 조정이 사용할 작업 수의 하한으로 1을 입력합니다. 원하는 서비스 개수는 자동으로 이 수량 이하로 조정됩니다.

  5. 원하는 작업 개수(Desired number of tasks) 필드는 이전에 입력한 값으로 미리 채워져 있습니다. 이 값은 이 페이지에서 지정한 작업 최소 수와 최대 수 사이여야 합니다. 이 값을 1로 그대로 둡니다.

  6. 작업의 최대 개수(Maximum number of tasks)에서 서비스 자동 크기 조정이 사용할 작업 수의 상한으로 2를 입력합니다. 원하는 서비스 개수가 이 수량을 초과하도록 자동 조정되지는 않습니다.

  7. 서비스 자동 조정에 대한 IAM 역할(IAM role for Service Auto Scaling)에서 ecsAutoscaleRole을 선택합니다. 이 역할이 없으면 새 역할 생성(Create new role)을 선택하여 콘솔에서 자동으로 생성하도록 합니다.

서비스에 대한 대상 추적 조정 정책을 구성하려면

  1. 조정 정책 추가(Add scaling policy)를 선택하여 조정 정책을 구성합니다.

  2. 정책 추가(Add policy) 페이지에서 다음 필드를 업데이트합니다.

    1. 조정 정책 유형(Scaling policy type)에서 대상 추적(Target tracking)을 선택합니다.

    2. 정책 이름(Policy name)TargetTrackingPolicy을 입력합니다.

    3. ECS 서비스 지표(ECS service metric)ECSServiceAverageCPUUtilization을 선택합니다.

    4. 대상 값(Target value)75를 입력합니다.

    5. 확장 휴지 기간(Scale-out cooldown period)60초를 입력합니다. 확장 활동은 서비스 작업 수를 늘립니다. 확장 휴지 기간이 진행되는 동안 휴지를 시작한 이전 확장 활동에 의해 추가된 용량은 다음 확장에 대해 원하는 용량의 일부로 계산됩니다. 지속적이지만 과도하지는 않게 확장하기 위한 목적입니다.

    6. 축소 휴지 기간(Scale-in cooldown period)60초를 입력합니다. 축소 활동은 서비스 작업 수를 줄입니다. 축소 휴지 기간은 만료될 때까지 후속 축소 요청을 차단하는 데 사용됩니다. 보수적으로 축소하여 애플리케이션의 가용성을 보호하기 위한 목적입니다. 그러나 축소 후 휴지 기간 동안 다른 경보가 확장 활동을 트리거하면 서비스 자동 크기 조정은 확장 가능한 대상을 즉시 확장합니다.

    7. 저장(Save)을 선택합니다.

  3. 다음 단계(Next step)를 선택합니다.

  4. 모든 선택 사항을 검토한 다음 서비스 업데이트(Update Service)를 선택합니다.

  5. 서비스 상태 업데이트가 종료되면 서비스 보기(View Service)를 선택합니다.

3단계: 조정 활동 트리거

서비스가 서비스 자동 크기 조정으로 구성된 후 서비스의 CPU 사용률을 ALARM 상태로 보내 조정 활동을 트리거할 수 있습니다. 이 자습서의 예제는 로드 밸런서 뒤에서 실행되는 웹 애플리케이션이므로 수천 개의 HTTP 요청을 서비스로 전송하여(ApacheBench 유틸리티 사용) 서비스 CPU 사용률을 임계 수량 이상으로 스파이크할 수 있습니다. 이러한 급증은 경보를 트리거하고 서비스에 하나의 태스크를 추가하는 조정 활동을 트리거해야 합니다.

ApacheBench 유틸리티가 요청을 종료한 후 서비스 CPU 사용률이 75% 임계값 아래로 감소하여 원하는 서비스 수를 1로 되돌리는 축소 활동이 트리거되어야 합니다.

서비스의 조정 활동을 트리거하려면

  1. 콘솔의 서비스 기본 보기 페이지에서 Amazon EC2 콘솔에서 세부 정보를 보려는 로드 밸런서 이름을 선택합니다. 필요한 로드 밸런서의 DNS 이름은 EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com과 비슷해야 합니다.

  2. ApacheBench(ab) 유틸리티를 사용하면 짧은 시간 안에 로드 밸런서에 대해 수천 개의 HTTP 요청을 할 수 있습니다.

    참고

    이 명령은 macOS에 기본적으로 설치되며 다양한 Linux 배포에도 사용할 수 있습니다. 예를 들어 다음 명령을 사용하여 Amazon Linux에 ab를 설치할 수 있습니다.

    $ sudo yum install -y httpd24-tools

    다음 명령을 실행하여 로드 밸런서의 DNS 이름을 대체합니다.

    $ ab -n 100000 -c 1000 http://EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com/
  3. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  4. 왼쪽 탐색 창에서 경보(Alarms)를 선택합니다.

  5. ab HTTP 요청이 CloudWatch 콘솔에서 확장 경보를 트리거할 때까지 기다립니다. Amazon ECS 서비스가 확장되고 원하는 서비스 수에 하나의 작업이 추가되는 것이 보여야 합니다.

  6. ab HTTP 요청이 완료된 직후(1분에서 2분 사이) 축소 경보가 트리거되고 축소 정책이 원하는 서비스 수를 다시 1로 줄입니다.

4단계: 다음 단계

이 자습서용으로 방금 생성한 기본 인프라를 삭제하려면 다음 단계로 이동합니다. 그렇지 않으면 이 인프라를 기본으로 사용하여 다음 중 하나 이상을 시도해 볼 수 있습니다.

  • Amazon ECS 콘솔에서 이러한 조정 활동을 보려면 서비스의 이벤트(Events) 탭을 선택합니다. 조정 이벤트가 발생하면 여기에 정보 메시지가 표시됩니다. 예:

    Message: Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy
  • CloudWatch Container Insights를 설정하여 Amazon ECS 지표를 수집하고 있다면 CloudWatch 자동 대시보드에서 지표 데이터를 볼 수 있습니다. 더 많은 예는 AWS 컴퓨팅 블로그Amazon ECS의 Amazon CloudWatch Container Insights 소개를 참조하세요.

  • CloudWatch Container Insights 설정 방법을 알아봅니다. 추가 요금이 발생합니다. 자세한 정보는 Amazon ECS CloudWatch Container Insights클러스터 설정 업데이트 섹션을 참조하세요.

5단계: 정리

이 자습서를 완료한 후에도 클러스터, Auto Scaling 그룹, 로드 밸런서, 대상 추적 조정 정책 및 CloudWatch 경보를 그대로 둘 수 있습니다. 하지만 이 리소스를 적극적으로 활용하지 않는 경우에는 계정에 불필요한 요금이 발생하지 않도록 이 리소스를 삭제하는 것도 고려해야 합니다.

클러스터를 삭제하려면

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 좌측 탐색 창에서 클러스터(Clusters)를 선택합니다.

  3. 클러스터 페이지에서 service-autoscaling 클러스터를 선택합니다.

  4. 클러스터 삭제(Delete Cluster), 삭제(Delete)를 선택합니다. 클러스터 AWS CloudFormation 스택 삭제가 완료되려면 몇 분 정도 걸릴 수 있습니다.