기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: 과중한 워크로드를 처리하도록 Auto Scaling 구성
이 자습서에서는 애플리케이션이 보통의 워크로드보다 과부하 상황일 때 시간 범위를 기준으로 확장 및 축소하는 방법에 대해 알아봅니다. 이 기능은 정기적으로 또는 계절에 따라 갑자기 많은 수의 방문자가 발생할 수있는 애플리케이션이 있는 경우에 유용합니다.
예약된 조정과 함께 대상 추적 조정 정책을 사용하여 추가 로드를 처리할 수 있습니다. 예약된 조정은 지정한 일정에 따라 사용자를 대신하여 자동으로 MinCapacity
및 MaxCapacity
를 변경합니다. 대상 추적 조정 정책이 리소스에서 활성화되면 새로운 최소 및 최대 용량 범위 내에서 현재 리소스 사용률에 따라 동적으로 확장될 수 있습니다.
이 자습서를 완료하면 다음을 수행하는 방법을 알 수 있습니다.
-
예약된 조정을 사용하여 과부하가 발생하기 전에 용량을 추가한 다음 더 이상 필요하지 않을 때 추가 용량을 제거합니다.
-
대상 추적 조정 정책을 사용하여 현재 리소스 사용률에 따라 애플리케이션을 조정합니다.
사전 조건
이 자습서에서는 다음을 이미 완료했다고 가정합니다.
-
를 생성했습니다 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-dimensiondimension
\ --resource-ididentifier
\ --min-capacity 0 --max-capacity 0Windows
aws application-autoscaling register-scalable-target --service-namespace
namespace
--scalable-dimensiondimension
--resource-ididentifier
--min-capacity 0 --max-capacity 0이 명령이 성공하면 확장 가능 대상의 ARN이 반환됩니다.
{ "ScalableTargetARN": "arn:aws:application-autoscaling:
region
:account-id
:scalable-target/1234abcd56ab78cd901ef1234567890ab123" }
2단계: 요구 사항에 따라 예약된 작업 설정
put-scheduled-action
아침에 확장하는 예약된 작업을 만들려면
-
확장 가능한 대상을 확장하려면 다음 put-scheduled-action
명령을 사용합니다. cron 표현식을 사용한 반복되는 일정(UTC 기준)의 --schedule
파라미터를 포함합니다.지정된 일정(매일 오전 9시(UTC 기준))에 따라 Application Auto Scaling은
MinCapacity
및MaxCapacity
값을 1~5 용량 단위의 원하는 범위로 업데이트합니다.Linux, macOS 또는 Unix
aws application-autoscaling put-scheduled-action \ --service-namespace
namespace
\ --scalable-dimensiondimension
\ --resource-ididentifier
\ --scheduled-action-namemy-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-dimensiondimension
--resource-ididentifier
--scheduled-action-namemy-first-scheduled-action
--schedule "cron(0 9 * * ? *
)" --scalable-target-action MinCapacity=1
,MaxCapacity=5
이 명령이 제대로 실행되면 어떤 출력도 반환하지 않습니다.
-
예약된 작업이 있는지 확인하려면 다음 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 }, ... } ]
밤에 축소하는 예약된 작업을 만들려면
-
앞의 절차를 반복하여 하루가 끝날 때 Application Auto Scaling에서 축소하는 데 사용하는 또 다른 예약된 작업을 생성합니다.
다음 put-scheduled-action
명령에서 지시한 바와 같이, 지정된 스케줄에 따라(매일 오후 8:00(UTC 기준)) Application Auto Scaling이 대상의 MinCapacity
및MaxCapacity
를 0으로 업데이트합니다.Linux, macOS 또는 Unix
aws application-autoscaling put-scheduled-action \ --service-namespace
namespace
\ --scalable-dimensiondimension
\ --resource-ididentifier
\ --scheduled-action-namemy-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-dimensiondimension
--resource-ididentifier
--scheduled-action-namemy-second-scheduled-action
--schedule "cron(0 20 * * ? *
)" --scalable-target-action MinCapacity=0
,MaxCapacity=0
-
예약된 작업이 있는지 확인하려면 다음 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에 다시 확장하도록 지시할 수 있습니다.
대상 추적 조정 정책을 생성하려면
-
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-dimensiondimension
\ --resource-ididentifier
\ --policy-namemy-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-dimensiondimension
--resource-ididentifier
--policy-namemy-scaling-policy
--policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration "{ \"TargetValue\":50.0
, \"PredefinedMetricSpecification\": { \"PredefinedMetricType\": \"predefinedmetric
\" }}"이 명령이 성공하면 사용자를 위해 생성된 두 CloudWatch 경보의 ARN과 이름이 반환됩니다.
-
예약된 작업이 있는지 확인하려면 다음 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-dimensiondimension
\ --resource-ididentifier
Windows
aws application-autoscaling describe-scaling-activities --service-namespace
namespace
--scalable-dimensiondimension
--resource-ididentifier
5단계: 정리
적극적으로 조정하는 동안 생성된 자원에 대한 요금이 계정에서 발생하지 않도록 하려면 다음과 같이 연결된 조정 구성을 정리할 수 있습니다.
조정 구성을 삭제해도 기본 AWS 리소스는 삭제되지 않습니다. 또한 원래 용량으로 반환하지 않습니다. 리소스를 생성한 서비스 콘솔을 사용하여 리소스를 삭제하거나 리소스 용량을 조정할 수 있습니다.
예약된 작업을 삭제하려면
다음 delete-scheduled-action
Linux, macOS 또는 Unix
aws application-autoscaling delete-scheduled-action \ --service-namespace
namespace
\ --scalable-dimensiondimension
\ --resource-ididentifier
\ --scheduled-action-namemy-second-scheduled-action
Windows
aws application-autoscaling delete-scheduled-action --service-namespace
namespace
--scalable-dimensiondimension
--resource-ididentifier
--scheduled-action-namemy-second-scheduled-action
조정 정책을 삭제하려면
다음 delete-scaling-policy
Linux, macOS 또는 Unix
aws application-autoscaling delete-scaling-policy \ --service-namespace
namespace
\ --scalable-dimensiondimension
\ --resource-ididentifier
\ --policy-namemy-scaling-policy
Windows
aws application-autoscaling delete-scaling-policy --service-namespace
namespace
--scalable-dimensiondimension
--resource-ididentifier
--policy-namemy-scaling-policy
확장 가능 대상의 등록을 취소하려면
다음 deregister-scalable-target
Linux, macOS 또는 Unix
aws application-autoscaling deregister-scalable-target \ --service-namespace
namespace
\ --scalable-dimensiondimension
\ --resource-ididentifier
Windows
aws application-autoscaling deregister-scalable-target --service-namespace
namespace
--scalable-dimensiondimension
--resource-ididentifier