Amazon EC2 Auto Scaling의 대상 추적 조정 정책 - Amazon EC2 Auto Scaling

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EC2 Auto Scaling의 대상 추적 조정 정책

대상 추적 조정 정책은 대상 지표 값을 기반으로 Auto Scaling 그룹의 용량을 자동으로 조정합니다. 이를 통해 애플리케이션은 수동 개입 없이 최적의 성능과 비용 효율성을 유지할 수 있습니다.

대상 추적을 사용할 때는 애플리케이션의 이상적인 평균 사용률 또는 처리량 수준을 나타내는 지표와 목표 값을 선택합니다. Amazon EC2 Auto Scaling은 지표가 대상에서 벗어날 때 조정 이벤트를 호출하는 CloudWatch 경보를 생성하고 관리합니다. 예를 들어, 이는 온도 조절기가 목표 온도를 유지하는 방법과 유사합니다.

예컨대, 현재 인스턴스 2개에서 애플리케이션이 실행되고 있고 사용자가 애플리케이션 로드에 변경이 있는 경우, Auto Scaling 그룹의 CPU 사용량을 50% 정도로 유지시키려 한다고 가정해 보겠습니다. 이로 인해 과도한 유휴 리소스를 유지하지 않고도 트래픽 급증을 처리할 수 있는 추가 용량을 확보할 수 있습니다.

평균 CPU 사용률 50%를 목표로 하는 대상 추적 조정 정책을 생성하면 이러한 요건을 충족할 수 있습니다. 그러면 Auto Scaling 그룹은 CPU가 50% 를 초과하면 증가된 부하를 처리하기 위해 용량을 확장하거나 늘립니다. CPU가 50% 미만으로 떨어지면 용량을 늘리거나 줄여 사용률이 낮은 기간 동안 비용을 최적화합니다.

다수의 대상 추적 조정 정책

조정 성능을 최적화하기 위해, 각각 다른 지표를 사용한다는 전제하에 다수의 대상 추적 조정 정책을 함께 사용할 수 있습니다. 예컨대, 사용률과 처리량(throughput)은 서로 영향을 줄 수 있습니다. 이러한 지표 중 하나가 변경될 때마다 일반적으로 다른 지표도 영향을 받게 됩니다. 따라서 여러 지표를 사용하면 Auto Scaling 그룹이 겪고 있는 부하에 대한 추가 정보가 제공됩니다. 이를 통해 Amazon EC2 Auto Scaling에서 그룹에 추가할 용량을 결정할 때 정보에 입각한 결정을 내릴 수 있습니다.

Amazon EC2 Auto Scaling의 목적은 항상 가용성에 우선 순위를 두는 것입니다. 대상 추적 정책 중 어느 하나라도 확장할 준비가 되면 Auto Scaling 그룹을 축소합니다. 모든 대상 추적 정책 (축소 부분 활성화) 이 축소될 준비가 된 경우에만 축소됩니다.

지표 선택

맞춤 또는 사전 정의된 지표를 사용하여 대상 추적 크기 조정 정책을 생성할 수 있습니다.

사전 정의된 지표 타입을 사용하여 대상 추적 크기 조정 정책을 생성하는 경우, 다음의 사전 정의된 지표 목록에서 지표를 하나 선택합니다:

  • ASGAverageCPUUtilization - Auto Scaling 그룹의 평균 CPU 사용률.

  • ASGAverageNetworkIn - 모든 네트워크 인터페이스에서 단일 인스턴스가 받은 평균 바이트 수

  • ASGAverageNetworkOut - 모든 네트워크 인터페이스에서 단일 인스턴스가 보낸 평균 바이트 수

  • ALBRequestCountPerTarget - 대상당 평균 Application Load Balancer 요청 수

중요

대상당 CPU 사용률, 네트워크 I/O 및 Application Load Balancer 요청 수에 대한 기타 중요한 정보는 Amazon EC2 사용 설명서의 인스턴스에 사용할 수 있는 CloudWatch 지표 나열 항목과 CloudWatch 애플리케이션 로드 밸런서 사용 설명서의 Application Load Balancer 항목에 대한 지표에서 각각 확인할 수 있습니다.

사용자 지정 측정치를 CloudWatch 지정하여 사용 가능한 다른 CloudWatch 측정치를 선택하거나 자체 측정치를 선택할 수 있습니다. AWS CLI 또는 SDK를 사용하여 사용자 지정된 지표 사양이 포함된 대상 추적 정책을 생성해야 합니다. 를 사용하여 대상 추적 조정 정책에 대한 사용자 지정 지표 사양을 지정하는 예는 을 AWS CLI참조하십시오AWS Command Line Interface 에 대한 조정 정책의 예(AWS CLI).

지표를 선택하는 경우, 다음 사항에 유의하세요.

  • 사용률 변화에 따라 더 빠르게 조정할 수 있도록 1분 간격으로 제공되는 지표만 사용할 것을 권장합니다. 대상 추적은 사전 정의된 모든 지표와 맞춤 지표에 대해 1분 단위로 집계된 지표를 평가하지만, 기본 지표는 데이터를 게시하는 빈도가 낮을 수 있습니다. 예컨대, 모든 Amazon EC2 지표는 기본적으로 5분 간격으로 전송되지만, 1분 간격으로 구성할 수 있습니다(세부 모니터링이라고 함). 이 선택은 개별 서비스에 따라 달라집니다. 대부분의 경우, 가능한 가장 짧은 간격을 사용하려고 합니다. 자세한 모니터링 활성화에 대한 자세한 설명은 Auto Scaling 인스턴스에 대한 모니터링 구성을(를) 참조하세요.

  • 모든 맞춤 지표를 대상 추적에 사용할 수 있는 것은 아닙니다. 지표는 유효한 사용량 수치로서 인스턴스의 사용량을 설명해야 합니다. 지표 값은 Auto Scaling 그룹의 인스턴스 수에 비례하여 증가하거나 감소합니다. 즉, 지표 데이터를 사용하여 인스턴스 수에 따라 비례적으로 스케일 아웃하거나 축소할 수 있습니다. 예컨대, Auto Scaling 그룹의 부하가 인스턴스로 분산되는 경우에는 Auto Scaling 그룹의 CPU 사용량(즉, 지표 차원 AutoScalingGroupName의 Amazon EC2 지표 CPUUtilization)이 유효합니다.

  • 다음 지표는 대상 추적에 사용할 수 없습니다.

    • Auto Scaling 그룹에 대한 로드 밸런서가 수신하는 요청 수(즉, Elastic Load Balancing 지표 RequestCount). 로드 밸런서가 수신하는 요청 수는 Auto Scaling 그룹의 사용량에 따라 변경되지 않습니다.

    • 로드 밸런서 요청 지연 시간(즉, Elastic Load Balancing 지표 Latency). 요청 지연 시간은 사용량 증가에 따라 늘어날 수는 있지만 반드시 비례하지는 않습니다.

    • CloudWatch Amazon SQS 대기열 메트릭. ApproximateNumberOfMessagesVisible 대기열의 메시지 수는 대기열의 메시지를 처리하는 Auto Scaling 그룹의 크기에 비례하여 변경되지 않을 수 있습니다. 하지만 Auto Scaling 그룹의 EC2 인스턴스당 대기열의 메시지 수를 측정하는 맞춤 지표는 작동합니다. 자세한 설명은 Amazon SQS 기반 크기 조정 섹션을 참조하세요.

  • ALBRequestCountPerTarget 지표를 사용하려면 ResourceLabel 파라미터를 지정하여 지표와 연관된 로드 밸런서 대상 그룹을 식별해야 합니다. 를 사용하여 대상 추적 조정 정책의 ResourceLabel 파라미터를 지정하는 예는 을 참조하십시오AWS Command Line Interface 에 대한 조정 정책의 예(AWS CLI). AWS CLI

  • 지표가 실제 0 값을 내보내는 경우 CloudWatch (예:ALBRequestCountPerTarget) 일정 기간 동안 애플리케이션에 대한 트래픽이 없을 때 Auto Scaling 그룹은 0으로 확장할 수 있습니다. 해당 그룹에 요청이 라우팅되지 않은 경우, Auto Scaling 그룹을 인스턴스 0개로 스케일 인하려면, 그룹의 최소 용량을 0으로 설정해야 합니다.

  • 조정 정책에 사용할 새 지표를 게시하는 대신 지표 수학을 사용하여 기존 지표를 결합할 수 있습니다. 자세한 설명은 지표 수학을 사용하여 Amazon EC2 Auto Scaling에서 대상 추적 조정 정책 생성 섹션을 참조하세요.

목표 값 정의

대상 추적 조정 정책을 생성할 경우, 목표 값을 지정해야 합니다. 목표 값은 Auto Scaling 그룹의 최적 평균 사용률 또는 처리량(throughput)을 나타냅니다. 리소스를 비용 효율적으로 사용하려면 예상치 못한 트래픽 증가에 대비하여, 적절한 버퍼를 두고 목표 값을 가능한 한 높게 설정합니다. 애플리케이션이 정상적인 트래픽 흐름을 위해 최적으로 스케일 아웃되면 실제 지표 값은 목표 값과 같거나 그보다 조금 낮아야 합니다.

조정 정책이 Application Load Balancer 대상당 요청 수, 네트워크 I/O 또는 기타 수 지표와 같은 처리량(throughput)에 근거하여 하는 경우, 대상 값은 1분 동안 단일 인스턴스의 최적 평균 처리량(throughput)을 나타냅니다.

인스턴스 워밍업 시간을 정의합니다.

새로 시작된 인스턴스가 워밍업되는 데 걸리는 시간(초)을 선택적으로 지정할 수 있습니다. 지정된 워밍업 시간이 만료될 때까지 인스턴스는 Auto Scaling 그룹의 집계된 EC2 인스턴스 측정치에 포함되지 않습니다.

인스턴스가 워밍업 기간에 있는 동안에는 워밍업하지 않는 인스턴스의 지표 값이 정책의 목표 사용률보다 큰 경우에만 조정 정책이 확장됩니다.

그룹이 다시 스케일 아웃되면 아직 워밍업 중인 인스턴스가 다음 스케일 아웃 활동에 대한 원하는 용량의 일부로 계산됩니다. 계속적이지만 과도하지는 않게 스케일 아웃하기 위한 목적입니다.

스케일 아웃 활동이 진행 중인 동안에는 인스턴스 워밍업이 완료될 때까지 조정 정책에 의해 시작된 모든 축소 활동이 차단됩니다. 인스턴스 워밍업이 완료된 후 스케일 인 이벤트가 발생하면 현재 해지 중인 인스턴스는 새로 원하는 용량을 계산할 때 그룹의 현재 용량에 포함됩니다. 따라서 Auto Scaling 그룹에서 인스턴스를 필요 이상으로 빼지 않습니다.

기본값

값이 설정되지 않은 경우 조정 정책은 그룹에 정의된 기본 인스턴스 웜업 값인 기본값을 사용합니다. 기본 인스턴스 워밍업이 null인 경우 기본 재사용 대기시간 값으로 돌아갑니다. 웜업 시간이 변경될 때 모든 조정 정책을 더 쉽게 업데이트할 수 있도록 기본 인스턴스 워밍업을 사용하는 것이 좋습니다.

고려 사항

대상 추적 조정 정책과 관련한 작업을 수행할 때는 다음 고려 사항이 적용됩니다.

  • 대상 추적 조정 정책과 함께 사용되는 CloudWatch 경보를 생성, 편집 또는 삭제하지 마십시오. Amazon EC2 Auto Scaling은 대상 추적 조정 정책과 관련된 CloudWatch 경보를 생성 및 관리하며 더 이상 필요하지 않을 때 이를 삭제합니다.

  • 대상 추적 조정 정책은 트래픽이 감소할 때 보다 점진적으로 스케일 인하여 트래픽 수준이 변동하는 기간 동안 가용성을 우선으로 보장합니다. 워크로드가 완료될 때 Auto Scaling 그룹을 즉시 스케일 인하려는 경우, 정책의 스케일 인 부분을 비활성화할 수 있습니다. 이 기능은 사용률이 낮을 때 사용자의 요건에 가장 적합한 스케일 인 방법을 사용할 수 있는 유연성을 제공합니다. 스케일 인이 최대한 빨리 이루어지도록 하려면 냉각 기간이 추가되는 것을 방지하는 단순 조정 정책을 사용하지 않는 것이 좋습니다.

  • 지표에 데이터 포인트가 누락된 경우 CloudWatch 경보 상태가 로 변경됩니다. INSUFFICIENT_DATA 이 경우, 새 데이터 포인트를 찾을 때까지 Amazon EC2 Auto Scaling이 그룹을 조정할 수 없습니다.

  • 설계상 지표가 드물게 보고되는 경우, 지표 수학이 유용할 수 있습니다. 예컨대, 가장 최근 값을 사용하려면 m1이 지표에 있는 FILL(m1,REPEAT) 함수를 사용하세요.

  • 대상 값과 실제 지표 데이터 포인트 사이에는 차이가 발생할 수 있습니다. 추가하거나 제거할 인스턴스 수를 결정할 때마다 항상 반올림 또는 내림을 통해 어림짐작으로 동작하기 때문입니다. 이는 인스턴스를 부족하게 추가하거나 너무 많이 제거하는 일을 방지하기 위해서입니다. 하지만 인스턴스가 줄어서 Auto Scaling 그룹이 작아지는 경우에는 그룹의 사용량이 목푯값에서 멀어질 수도 있습니다. 예컨대, CPU 사용률 목푯값을 50%로 설정한 후 Auto Scaling 그룹이 목푯값을 초과한다고 가정해 보겠습니다. 1.5개의 인스턴스를 추가하면 CPU 사용률이 50% 가까이 감소할 것을 알 수 있습니다. 하지만 1.5개의 인스턴스를 추가할 수 없기 때문에 반올림을 통해 인스턴스 2개를 추가합니다. 그러면 CPU 사용량이 50% 아래로 떨어지는 동시에 애플리케이션은 리소스를 충분히 확보하게 됩니다. 마찬가지로 인스턴스를 1.5개 제거하면 CPU 사용량이 증가하여 50%를 상회한다고 판단할 경우에는 인스턴스를 1개만 제거합니다.

    인스턴스가 더 많고 규모가 큰 Auto Scaling 그룹의 경우, 활용도가 더 많은 수의 인스턴스에 분산되므로 인스턴스를 추가 또는 제거하면 대상 값과 실제 지표 데이터 포인트 간 차이가 줄어듭니다.

  • 대상 추적 조정 정책은 지정한 지표가 목푯값을 초과할 때 한해서 Auto Scaling 그룹을 스케일 아웃하게 되어 있습니다. 대상 추적 조정 정책에서는 지정한 지표가 목푯값보다 작을 때 Auto Scaling 그룹을 스케일 아웃할 수 없습니다.

대상 추적 조정 정책 생성

Auto Scaling 그룹에 대한 대상 추적 조정 정책을 생성하려면 다음 방법 중 하나를 사용하십시오.

시작하기 전에 원하는 지표를 1분 간격으로 사용할 수 있는지 확인하세요(Amazon EC2 지표의 기본 5분 간격과 비교).

Console
새 Auto Scaling 그룹을 위한 대상 추적 조정 정책 생성
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 열고 탐색 창에서 Auto Scaling Groups(Auto Scaling 그룹)를 선택합니다.

  2. Create Auto Scaling group(Auto Scaling 그룹 생성)을 선택합니다.

  3. 1, 2, 3단계에서 원하는 옵션을 선택하고 4단계: 그룹 크기 및 조정 정책 구성으로 진행합니다.

  4. 스케일링 항목에서 specify the range that you want to scale between by updating the 원하는 최소 용량원하는 최대 용량을 업데이트하여 조정할 범위를 지정합니다. 이 두 설정을 사용하면 Auto Scaling 그룹이 크기를 동적으로 조정할 수 있습니다. 자세한 설명은 Auto Scaling 그룹에 대한 스케일링 제한 설정 섹션을 참조하세요.

  5. 자동 조정에서 대상 추적 조정 정책을 선택합니다.

  6. 정책을 정의하려면 다음을 수행하십시오:

    1. 정책의 이름을 지정합니다.

    2. 지표 타입(Metric type)에서 지표를 선택합니다.

      대상당 Application Load Balancer 요청 수(Application Load Balancer request count per target)를 선택한 경우, 대상 그룹(Target group)에서 대상 그룹을 선택합니다.

    3. 지표의 대상 값(Target value)을 지정합니다.

    4. (선택 사항) 인스턴스 웜업의 경우 필요에 따라 인스턴스 웜업 값을 업데이트하십시오.

    5. (옵션) 축소 정책을 비활성화하여 스케일 아웃 정책만 생성(Disable scale in to create only a scale-out policy)을 선택합니다. 이렇게 하면 원할 경우, 타입이 다를 때마다 축소 정책을 별도로 생성할 수 있습니다.

  7. 계속해서 Auto Scaling 그룹을 생성합니다. Auto Scaling 그룹이 생성된 후에 조정 정책이 생성됩니다.

기존 Auto Scaling 그룹을 위한 대상 추적 조정 정책 생성
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 열고 탐색 창에서 Auto Scaling Groups(Auto Scaling 그룹)를 선택합니다.

  2. Auto Scaling 그룹 옆의 확인란을 선택합니다.

    페이지 하단에 분할 창이 열립니다.

  3. 스케일링 제한이 적절하게 설정되었는지 확인합니다. 예컨대, 그룹의 원하는 용량이 이미 최대치에 있는 경우, 스케일 아웃하려면 새로운 최대값을 지정해야 합니다. 자세한 설명은 Auto Scaling 그룹에 대한 스케일링 제한 설정 섹션을 참조하세요.

  4. 자동 크기 조정(Automatic scaling) 탭의 동적 크기 조정 정책(Dynamic scaling policies)에서 동적 크기 조정 정책 생성(Create dynamic scaling policy)을 선택합니다.

  5. 정책을 정의하려면 다음을 수행하십시오:

    1. 정책 타입의 경우, 기본값 대상 추적 조정을 유지합니다.

    2. 정책의 이름을 지정합니다.

    3. 지표 타입(Metric type)에서 지표를 선택합니다. 지표 타입은 하나만 선택할 수 있습니다. 둘 이상의 지표를 사용하려면 여러 정책을 생성합니다.

      대상당 Application Load Balancer 요청 수(Application Load Balancer request count per target)를 선택한 경우, 대상 그룹(Target group)에서 대상 그룹을 선택합니다.

    4. 지표의 대상 값(Target value)을 지정합니다.

    5. (선택 사항) 인스턴스 웜업의 경우 필요에 따라 인스턴스 웜업 값을 업데이트합니다.

    6. (옵션) 축소 정책을 비활성화하여 스케일 아웃 정책만 생성(Disable scale in to create only a scale-out policy)을 선택합니다. 이렇게 하면 원할 경우, 타입이 다를 때마다 축소 정책을 별도로 생성할 수 있습니다.

  6. 생성(Create)을 선택합니다.

AWS CLI

대상 추적 조정 정책을 만들려면 다음 예제를 사용하면 시작하는 데 도움이 됩니다. user input placeholder를 사용자의 정보로 바꿉니다.

참고
대상 추적 조정 정책(AWS CLI)을 생성하려면
  1. 다음 cat 명령을 사용하여 조정 정책의 목표 값과 사전 정의된 지표 사양을 홈 config.json 디렉터리에 이름이 지정된 JSON 파일에 저장합니다. 다음은 평균 CPU 사용률을 50% 로 유지하는 대상 추적 구성의 예입니다.

    $ cat ~/config.json { "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }

    자세한 내용은 Amazon EC2 Auto Scaling API 참조의 PredefinedMetric사양을 참조하십시오.

  2. put-scaling-policy 명령과 이전 단계에서 만든 config.json 파일을 사용하여 조정 정책을 생성합니다.

    aws autoscaling put-scaling-policy --policy-name cpu50-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://config.json

    성공하면 이 명령은 사용자를 대신하여 생성된 두 CloudWatch 경보의 ARN과 이름을 반환합니다.

    { "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/cpu50-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }