자습서: 과중한 워크로드를 처리하도록 Auto Scaling 구성 - Application Auto Scaling

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

자습서: 과중한 워크로드를 처리하도록 Auto Scaling 구성

이 자습서에서는 애플리케이션이 보통의 워크로드보다 과부하 상황일 때 시간 범위를 기준으로 확장 및 축소하는 방법에 대해 알아봅니다. 이 기능은 정기적으로 또는 계절에 따라 갑자기 많은 수의 방문자가 발생할 수있는 애플리케이션이 있는 경우에 유용합니다.

예약된 조정과 함께 대상 추적 조정 정책을 사용하여 추가 로드를 처리할 수 있습니다. 예약된 조정은 지정한 일정에 따라 사용자를 대신하여 자동으로 MinCapacityMaxCapacity를 변경합니다. 대상 추적 조정 정책이 리소스에서 활성화되면 새로운 최소 및 최대 용량 범위 내에서 현재 리소스 사용률에 따라 동적으로 확장될 수 있습니다.

이 자습서를 완료하면 다음을 수행하는 방법을 알 수 있습니다.

  • 예약된 조정을 사용하여 과부하가 발생하기 전에 용량을 추가한 다음 더 이상 필요하지 않을 때 추가 용량을 제거합니다.

  • 대상 추적 조정 정책을 사용하여 현재 리소스 사용률에 따라 애플리케이션을 조정합니다.

사전 조건

이 자습서에서는 다음을 이미 완료했다고 가정합니다.

  • 를 생성했습니다 AWS 계정.

  • 를 설치 및 구성했습니다 AWS CLI.

  • Application Auto Scaling을 사용하여 규모 조정 가능 대상으로 리소스를 등록하고 등록 취소하는 데 필요한 권한이 부여되었습니다. 또한 조정 정책 및 예약된 작업을 만드는 데 필요한 권한이 부여되었습니다. 자세한 내용은 Application Auto Scaling에 사용되는 Identity and Access Management 단원을 참조하십시오.

  • 이 자습서에 사용할 수 있는 비프로덕션 환경에서 지원되는 리소스를 생성했습니다. 아직 없는 경우 지금 하나 만듭니다. Application Auto Scaling과 함께 작동하는 AWS 서비스 및 리소스에 대한 자세한 내용은 AWS 서비스 Application Auto Scaling과 함께 사용할 수 있는 섹션을 참조하세요.

참고

이 자습서를 완료하는 동안 리소스의 최소 및 최대 용량 값을 0으로 설정하여 현재 용량을 0으로 재설정하는 두 가지 단계가 있습니다. Application Auto Scaling과 함께 사용 중인 리소스에 따라 이 단계에서 현재 용량을 0으로 재설정하지 못할 수 있습니다. 문제를 해결하는 데 도움이 되도록 출력의 메시지는 최소 용량이 지정된 값보다 작을 수 없음을 나타내며 AWS 리소스가 수락할 수 있는 최소 용량 값을 제공합니다.

1단계: 확장 가능 대상 등록

Application Auto Scaling에서 확장 가능 대상으로서 리소스를 등록하는 것부터 시작합니다. 규모 조정 가능 대상은 Application Auto Scaling에서 스케일 아웃 및 스케일 인할 수 있는 리소스입니다.

Application Auto Scaling을 통해 확장 가능 대상을 등록하려면
  • 다음 register-scalable-target 명령을 사용하여 새로운 확장 가능 대상을 등록합니다. --min-capacity--max-capacity 값을 0으로 설정하여 현재 용량을 0으로 재설정합니다.

    --service-namespace의 샘플 텍스트를 Application Auto Scaling과 함께 사용 중인 AWS 서비스의 네임스페이스로, --scalable-dimension을 등록하려는 리소스와 연결된 확장 가능한 차원으로, --resource-id를 리소스의 식별자로 바꿉니다. 이러한 값은 사용되는 리소스와 리소스 ID가 구성되는 방식에 따라 다릅니다. 자세한 내용은 AWS 서비스 Application Auto Scaling과 함께 사용할 수 있는 섹션의 주제를 참조하세요. 이러한 주제에는 Application Auto Scaling에 확장 가능 대상을 등록하는 방법을 보여주는 예제 명령이 포함되어 있습니다.

    Linux, macOS 또는 Unix

    aws application-autoscaling register-scalable-target \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --min-capacity 0 --max-capacity 0

    Windows

    aws application-autoscaling register-scalable-target --service-namespace namespace --scalable-dimension dimension --resource-id identifier --min-capacity 0 --max-capacity 0

    이 명령이 성공하면 확장 가능 대상의 ARN이 반환됩니다.

    { "ScalableTargetARN": "arn:aws:application-autoscaling:region:account-id:scalable-target/1234abcd56ab78cd901ef1234567890ab123" }

2단계: 요구 사항에 따라 예약된 작업 설정

put-scheduled-action 명령을 사용하여 비즈니스 요구에 맞게 구성된 예약된 작업을 만들 수 있습니다. 이 자습서에서는 용량을 0으로 줄임으로써 근무 시간 외에 리소스 소비를 중지하는 구성에 중점을 둡니다.

아침에 확장하는 예약된 작업을 만들려면
  1. 확장 가능한 대상을 확장하려면 다음 put-scheduled-action 명령을 사용합니다. cron 표현식을 사용한 반복되는 일정(UTC 기준)의 --schedule 파라미터를 포함합니다.

    지정된 일정(매일 오전 9시(UTC 기준))에 따라 Application Auto Scaling은 MinCapacityMaxCapacity 값을 1~5 용량 단위의 원하는 범위로 업데이트합니다.

    Linux, macOS 또는 Unix

    aws application-autoscaling put-scheduled-action \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --scheduled-action-name my-first-scheduled-action \ --schedule "cron(0 9 * * ? *)" \ --scalable-target-action MinCapacity=1,MaxCapacity=5

    Windows

    aws application-autoscaling put-scheduled-action --service-namespace namespace --scalable-dimension dimension --resource-id identifier --scheduled-action-name my-first-scheduled-action --schedule "cron(0 9 * * ? *)" --scalable-target-action MinCapacity=1,MaxCapacity=5

    이 명령이 제대로 실행되면 어떤 출력도 반환하지 않습니다.

  2. 예약된 작업이 있는지 확인하려면 다음 describe-scheduled-actions을 사용합니다.

    Linux, macOS 또는 Unix

    aws application-autoscaling describe-scheduled-actions \ --service-namespace namespace \ --query 'ScheduledActions[?ResourceId==`identifier`]'

    Windows

    aws application-autoscaling describe-scheduled-actions --service-namespace namespace --query "ScheduledActions[?ResourceId==`identifier`]"

    출력의 예시는 다음과 같습니다.

    [ { "ScheduledActionName": "my-first-scheduled-action", "ScheduledActionARN": "arn", "Schedule": "cron(0 9 * * ? *)", "ScalableTargetAction": { "MinCapacity": 1, "MaxCapacity": 5 }, ... } ]
밤에 축소하는 예약된 작업을 만들려면
  1. 앞의 절차를 반복하여 하루가 끝날 때 Application Auto Scaling에서 축소하는 데 사용하는 또 다른 예약된 작업을 생성합니다.

    다음 put-scheduled-action 명령에서 지시한 바와 같이, 지정된 스케줄에 따라(매일 오후 8:00(UTC 기준)) Application Auto Scaling이 대상의 MinCapacityMaxCapacity를 0으로 업데이트합니다.

    Linux, macOS 또는 Unix

    aws application-autoscaling put-scheduled-action \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --scheduled-action-name my-second-scheduled-action \ --schedule "cron(0 20 * * ? *)" \ --scalable-target-action MinCapacity=0,MaxCapacity=0

    Windows

    aws application-autoscaling put-scheduled-action --service-namespace namespace --scalable-dimension dimension --resource-id identifier --scheduled-action-name my-second-scheduled-action --schedule "cron(0 20 * * ? *)" --scalable-target-action MinCapacity=0,MaxCapacity=0
  2. 예약된 작업이 있는지 확인하려면 다음 describe-scheduled-actions을 사용합니다.

    Linux, macOS 또는 Unix

    aws application-autoscaling describe-scheduled-actions \ --service-namespace namespace \ --query 'ScheduledActions[?ResourceId==`identifier`]'

    Windows

    aws application-autoscaling describe-scheduled-actions --service-namespace namespace --query "ScheduledActions[?ResourceId==`identifier`]"

    출력의 예시는 다음과 같습니다.

    [ { "ScheduledActionName": "my-first-scheduled-action", "ScheduledActionARN": "arn", "Schedule": "cron(0 9 * * ? *)", "ScalableTargetAction": { "MinCapacity": 1, "MaxCapacity": 5 }, ... }, { "ScheduledActionName": "my-second-scheduled-action", "ScheduledActionARN": "arn", "Schedule": "cron(0 20 * * ? *)", "ScalableTargetAction": { "MinCapacity": 0, "MaxCapacity": 0 }, ... } ]

2단계: 대상 추적 조정 정책 추가

기본 일정을 준비했으므로 현재 리소스 사용률에 따라 확장할 대상 추적 조정 정책을 추가합니다.

대상 추적을 사용하면 Application Auto Scaling이 정책의 대상 값을 지정된 지표의 현재 값과 비교합니다. 값이 일정 기간에 동일하지 않은 경우 Application Auto Scaling은 안정적인 성능을 유지하기 위해 용량을 추가하거나 제거합니다. 애플리케이션의 로드와 지표 값이 증가함에 따라 Application Auto Scaling은 MaxCapacity를 초과하지 않고 가능한 한 빨리 용량을 추가합니다. 로드가 최소이기 때문에 Application Auto Scaling이 용량을 제거하는 경우 MinCapacity 이하로 떨어지지 않고 용량을 제거할 수 있습니다. 사용량에 따라 용량을 조정하여 애플리케이션에 필요한 만큼만 요금을 지불합니다.

애플리케이션에 로드가 없기 때문에 지표에 데이터가 충분하지 않은 경우 Application Auto Scaling은 용량을 추가하거나 제거하지 않습니다. 즉, Application Auto Scaling은 정보가 충분하지 않은 상황에서 가용성을 우선시합니다.

여러 조정 정책을 추가할 수 있지만 충돌하는 단계 조정 정책을 추가하지 않아야 합니다. 이로 인해 바람직하지 않은 동작이 발생할 수 있습니다. 예컨대, 대상 추적 정책이 축소 준비되기 전에 단계별 조정 정책이 축소 활동을 시작하는 경우, 축소 활동이 차단되지 않습니다. 축소 작업이 완료된 후 대상 추적 정책이 Application Auto Scaling에 다시 확장하도록 지시할 수 있습니다.

대상 추적 조정 정책을 생성하려면
  1. put-scaling-policy 명령을 사용하여 정책을 생성합니다.

    대상 추적에 가장 자주 사용되는 지표는 미리 정의되어 있으며 CloudWatch에서 전체 지표 사양을 제공하지 않고도 사용할 수 있습니다. 사용 가능한 미리 정의된 지표에 대한 자세한 내용은 Application Auto Scaling의 대상 추적 조정 정책 섹션을 참조하세요.

    이 명령을 실행하기 전에 미리 정의된 지표가 대상 값을 기대하는지 확인합니다. 예를 들어 CPU 사용률이 50%에 도달하면 확장하도록 대상 값을 50.0으로 지정합니다. 또는 사용률이 70%에 도달했을 때 Lambda 프로비저닝된 동시성을 확장하려면 대상 값을 0.7로 지정합니다. 특정 리소스의 대상 값에 대한 자세한 내용은 대상 추적을 구성하는 방법에 대해 서비스에서 제공하는 설명서를 참조하세요. 자세한 내용은 AWS 서비스 Application Auto Scaling과 함께 사용할 수 있는 섹션을 참조하세요.

    Linux, macOS 또는 Unix

    aws application-autoscaling put-scaling-policy \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --policy-name my-scaling-policy --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "predefinedmetric" }}'

    Windows

    aws application-autoscaling put-scaling-policy --service-namespace namespace --scalable-dimension dimension --resource-id identifier --policy-name my-scaling-policy --policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration "{ \"TargetValue\": 50.0, \"PredefinedMetricSpecification\": { \"PredefinedMetricType\": \"predefinedmetric\" }}"

    이 명령이 성공하면 사용자를 위해 생성된 두 CloudWatch 경보의 ARN과 이름이 반환됩니다.

  2. 예약된 작업이 있는지 확인하려면 다음 describe-scaling-policies 명령을 사용합니다.

    Linux, macOS 또는 Unix

    aws application-autoscaling describe-scaling-policies --service-namespace namespace \ --query 'ScalingPolicies[?ResourceId==`identifier`]'

    Windows

    aws application-autoscaling describe-scaling-policies --service-namespace namespace --query "ScalingPolicies[?ResourceId==`identifier`]"

    출력의 예시는 다음과 같습니다.

    [ { "PolicyARN": "arn", "TargetTrackingScalingPolicyConfiguration": { "PredefinedMetricSpecification": { "PredefinedMetricType": "predefinedmetric" }, "TargetValue": 50.0 }, "PolicyName": "my-scaling-policy", "PolicyType": "TargetTrackingScaling", "Alarms": [], ... } ]

4단계: 다음 단계

크기 조정 활동이 발생하면 확장 가능 대상에 대한 조정 활동의 출력에서 이에 대한 레코드를 볼 수 있습니다. 예를 들면 다음과 같습니다.

Successfully set desired count to 1. Change successfully fulfilled by ecs.

Application Auto Scaling을 사용하여 크기 조정 활동을 모니터링하려면 다음 describe-scaling-activities 명령을 사용합니다.

Linux, macOS 또는 Unix

aws application-autoscaling describe-scaling-activities --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier

Windows

aws application-autoscaling describe-scaling-activities --service-namespace namespace --scalable-dimension dimension --resource-id identifier

5단계: 정리

적극적으로 조정하는 동안 생성된 자원에 대한 요금이 계정에서 발생하지 않도록 하려면 다음과 같이 연결된 조정 구성을 정리할 수 있습니다.

조정 구성을 삭제해도 기본 AWS 리소스는 삭제되지 않습니다. 또한 원래 용량으로 반환하지 않습니다. 리소스를 생성한 서비스 콘솔을 사용하여 리소스를 삭제하거나 리소스 용량을 조정할 수 있습니다.

예약된 작업을 삭제하려면

다음 delete-scheduled-action 명령은 지정된 예약된 작업을 삭제합니다. 생성한 예약된 작업을 나중에도 계속 사용하고 싶은 경우에는 이 단계를 건너뛸 수 있습니다.

Linux, macOS 또는 Unix

aws application-autoscaling delete-scheduled-action \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --scheduled-action-name my-second-scheduled-action

Windows

aws application-autoscaling delete-scheduled-action --service-namespace namespace --scalable-dimension dimension --resource-id identifier --scheduled-action-name my-second-scheduled-action
조정 정책을 삭제하려면

다음 delete-scaling-policy 명령은 지정된 대상 추적 조정 정책을 삭제합니다. 생성한 조정 정책을 나중에도 계속 사용하고 싶은 경우에는 이 단계를 건너뛸 수 있습니다.

Linux, macOS 또는 Unix

aws application-autoscaling delete-scaling-policy \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier \ --policy-name my-scaling-policy

Windows

aws application-autoscaling delete-scaling-policy --service-namespace namespace --scalable-dimension dimension --resource-id identifier --policy-name my-scaling-policy
확장 가능 대상의 등록을 취소하려면

다음 deregister-scalable-target 명령을 사용하여 확장 가능 대상의 등록을 취소합니다. 이미 생성한 조정 정책이 있거나 아직 삭제되지 않은 예약된 작업이 있는 경우에는 이 명령을 통해 삭제됩니다. 확장 가능 대상을 나중에도 사용할 수 있도록 등록 상태로 유지하고 싶은 경우에는 이 단계를 건너뛸 수 있습니다.

Linux, macOS 또는 Unix

aws application-autoscaling deregister-scalable-target \ --service-namespace namespace \ --scalable-dimension dimension \ --resource-id identifier

Windows

aws application-autoscaling deregister-scalable-target --service-namespace namespace --scalable-dimension dimension --resource-id identifier