고해상도 메트릭으로 더 빠른 자동 확장
고해상도 메트릭으로 더 빠른 자동 확장
기본적으로 Amazon ECS는 CPUUtilization과 MemoryUtilization 메트릭을 60초 해상도로 게시해요. 20초 해상도를 구성하면 서비스 자동 확장을 더 빠르게 구동할 수 있어요.
출처: 문서
본문
기본적으로 Amazon ECS는 CPUUtilization과 MemoryUtilization 메트릭을 60초 해상도로 게시합니다. 더 빠른 서비스 자동 확장을 구동하려면 20초 해상도를 구성할 수 있습니다. 대상 추적 확장 정책에 대해 다음 고해상도 사전 정의 메트릭을 사용할 수 있습니다.
| PredefinedMetricType | 설명 |
|---|---|
ECSServiceAverageCPUUtilizationHighResolution |
20초 해상도의 평균 CPU 사용률 |
ECSServiceAverageMemoryUtilizationHighResolution |
20초 해상도의 평균 메모리 사용률 |
더 빠른 자동 확장을 위해 고해상도 메트릭으로 새 서비스 만들기
- Clusters 페이지에서 서비스를 만들 클러스터를 선택합니다.
- Services 섹션에서 Create를 선택합니다.
- Create Service 양식의 Monitoring configuration 섹션에서 Add metric configuration을 선택합니다.
- Metric name에서 고해상도로 수집하려는 메트릭을 선택합니다.
CPUUtilization또는MemoryUtilization을 선택합니다. - **Resolution (seconds)**에서
20을 선택합니다. - (선택 사항) 두 메트릭을 모두 고해상도로 추가하려면 Add metric configuration을 다시 선택하고 다른 메트릭에 대해 앞의 두 단계를 반복합니다.
- Service auto scaling 섹션에서 Use service auto scaling을 선택합니다.
- Minimum number of tasks에 서비스 자동 확장이 사용할 작업 수의 하한을 입력합니다. desired count는 이 수보다 아래로 내려가지 않습니다.
- Maximum number of tasks에 서비스 자동 확장이 사용할 작업 수의 상한을 입력합니다. desired count는 이 수보다 위로 올라가지 않습니다.
- Scaling policy type에서 Target tracking을 선택합니다.
- Metric type에서 해당 고해상도 메트릭을 선택합니다. 예를 들어
CPUUtilization을 20초 해상도로 구성했다면ECSServiceAverageCPUUtilizationHighResolution을,MemoryUtilization을 20초 해상도로 구성했다면ECSServiceAverageMemoryUtilizationHighResolution을 선택합니다. - Target value에 대상 사용률 백분율을 입력합니다. 서비스 자동 확장은 평균 사용률이 대상 값이 되거나 지정한 최대 작업 수에 도달할 때까지 용량을 확장합니다.
- Additional Settings 아래에서 다음을 구성합니다.
- Scale-out cooldown period에 이전 확장 활동이 적용되기를 기다리는 시간(초)을 입력합니다.
- Scale-in cooldown period에 축소 활동이 완료된 후 다른 축소 활동이 시작될 수 있기까지 기다리는 시간(초)을 입력합니다.
- Create를 선택해 서비스를 만듭니다.
create-service 명령으로 모니터링 구성이 있는 서비스를 만드세요.
aws ecs create-service --region us-east-1 \
--cluster my-cluster \
--service-name my-service \
--task-definition my-app:1 \
--desired-count 2 \
--monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
register-scalable-target 명령으로 서비스를 확장 가능한 대상으로 등록하세요.
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--min-capacity 1 \
--max-capacity 10 \
--region us-east-1
고해상도 사전 정의 메트릭으로 대상 추적 확장 정책을 put-scaling-policy 명령으로 만드세요.
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--policy-name my-highres-cpu-policy \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution"
}
}' \
--region us-east-1
describe-scaling-policies 명령으로 정책이 생성되었는지 확인하세요.
aws application-autoscaling describe-scaling-policies \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--region us-east-1
더 빠른 자동 확장을 위해 고해상도 메트릭을 사용하도록 기존 서비스 업데이트
기존 서비스를 더 빠른 서비스 자동 확장을 위해 고해상도 메트릭을 사용하도록 업데이트하는 것은 두 단계 과정입니다. 먼저 모니터링 해상도를 업데이트해야 하며, 이는 서비스 배포를 트리거합니다. 배포가 성공적으로 완료되고 모든 작업이 20초 해상도로 메트릭을 방출한 후에 고해상도 확장 정책을 구성할 수 있습니다.
중요: 서비스가 이전에 60초 메트릭 해상도를 사용했다면, 서비스를 20초 메트릭 해상도로 업데이트하고 서비스 배포가 완료된 후에만 Amazon ECS 콘솔에서 확장 정책용 고해상도 메트릭을 사용할 수 있습니다.
1단계: 모니터링 해상도 업데이트
- Clusters 페이지에서 업데이트할 서비스가 있는 클러스터를 선택합니다.
- Services 섹션에서 서비스를 선택하고 Update를 선택합니다.
- Update Service 양식의 Monitoring configuration 섹션에서 Add metric configuration을 선택합니다.
- Metric name에서 고해상도로 수집하려는 메트릭을 선택합니다.
CPUUtilization또는MemoryUtilization을 선택합니다. - **Resolution (seconds)**에서
20을 선택합니다. - (선택 사항) 두 메트릭을 모두 고해상도로 추가하려면 Add metric configuration을 다시 선택하고 다른 메트릭에 대해 앞의 두 단계를 반복합니다.
- Update를 선택해 변경을 제출합니다. 이는 서비스 배포를 트리거합니다.
- 배포가 완료될 때까지 기다립니다. 서비스 세부 정보 페이지의 Deployments 탭에서 진행 상황을 모니터링할 수 있습니다.
- 참고: 배포가 성공하고 모든 작업이 20초 해상도로 방출할 때까지 서비스 자동 확장 섹션에서 고해상도 확장 메트릭 옵션이 회색으로 표시됩니다.
2단계: 고해상도 확장 정책 구성
배포가 완료된 후 다음 방법 중 하나로 확장 정책을 구성하세요.
옵션 A: 서비스 세부 정보 페이지
- 서비스 세부 정보 페이지에서 Service auto scaling 탭을 선택합니다.
- Create scaling policy를 선택합니다(또는 기존 정책 편집).
- Scaling policy type에서 Target tracking을 선택합니다.
- Metric type에서 고해상도 메트릭을 선택합니다. 예:
ECSServiceAverageCPUUtilizationHighResolution또는ECSServiceAverageMemoryUtilizationHighResolution. - Target value에 대상 사용률 백분율을 입력합니다.
- Additional Settings 아래에서 다음을 구성합니다.
- Scale-out cooldown period에 이전 확장 활동이 적용되기를 기다리는 시간(초)을 입력합니다.
- Scale-in cooldown period에 축소 활동이 완료된 후 다른 축소 활동이 시작될 수 있기까지 기다리는 시간(초)을 입력합니다.
- Create scaling policy를 선택합니다.
옵션 B: Update Service 양식
- 서비스 세부 정보 페이지에서 Update를 선택합니다.
- Service auto scaling 섹션에서 Use service auto scaling을 선택합니다(아직 활성화되지 않은 경우).
- Minimum number of tasks에 하한을 입력합니다.
- Maximum number of tasks에 상한을 입력합니다.
- Scaling policy type에서 Target tracking을 선택합니다.
- Metric type에서 고해상도 메트릭(배포 완료 후 활성화됨)을 선택합니다.
- Target value에 대상 사용률 백분율을 입력합니다.
- Additional Settings 아래에서 Scale-out cooldown period와 Scale-in cooldown period를 설정합니다.
- Update를 선택해 변경을 제출합니다.
1단계: 모니터링 해상도 업데이트(AWS CLI)
update-service 명령으로 모니터링 구성이 있는 서비스를 업데이트하세요.
aws ecs update-service --region us-east-1 \
--cluster my-cluster \
--service my-service \
--monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
배포가 완료될 때까지 기다립니다. describe-services 명령으로 진행 상황을 모니터링하고 배포 상태를 확인할 수 있습니다.
aws ecs describe-services --region us-east-1 \
--cluster my-cluster \
--services my-service
배포가 완료된 후 서비스 개정판을 설명해 모니터링 구성이 활성인지 확인하세요. describe-services 출력에서 활성 서비스 개정판 ARN을 가져온 다음 다음을 실행합니다.
aws ecs describe-service-revisions --region us-east-1 \
--service-revision-arns arn:aws:ecs:us-east-1:012345678910:service-revision/my-cluster/my-service/1234567890123456789
응답에 모니터링 구성이 나타나는지 확인하세요.
{
"serviceRevisions": [
{
...
"monitoring": {
"metricConfigurations": [
{
"metricNames": ["CPUUtilization", "MemoryUtilization"],
"resolutionSeconds": 20
}
]
}
}
]
}
2단계: 고해상도 확장 정책 구성(AWS CLI)
아직 등록되지 않았다면 register-scalable-target 명령으로 서비스를 확장 가능한 대상으로 등록하세요.
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--min-capacity 1 \
--max-capacity 10 \
--region us-east-1
고해상도 사전 정의 메트릭으로 대상 추적 확장 정책을 put-scaling-policy 명령으로 만드세요. 다음 예시는 50% CPU 사용률을 목표로 합니다.
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--policy-name my-highres-cpu-policy \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution"
}
}' \
--region us-east-1
정책이 생성되었는지 확인하세요.
aws application-autoscaling describe-scaling-policies \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--region us-east-1
더 빠른 서비스 자동 확장 검증
1부: 고해상도 메트릭이 게시되는지 확인
- CloudWatch 콘솔로 이동합니다.
- 탐색 창에서 Metrics를 선택한 다음 All metrics를 선택합니다.
AWS/ECS네임스페이스를 선택합니다.ClusterName, ServiceName을 선택합니다.- 서비스의
CPUUtilization과MemoryUtilization메트릭을 찾습니다. - 기간을 20초로 설정합니다. 20초 간격의 데이터 포인트가 보이면 고해상도 메트릭이 활성임을 확인할 수 있습니다.
2부: 확장 정책이 고해상도 메트릭을 사용하는지 확인
- 서비스 세부 정보 페이지에서 Service auto scaling 탭을 선택합니다.
- 기존 확장 정책을 보고 메트릭이 고해상도 변형(
ECSServiceAverageCPUUtilizationHighResolution또는ECSServiceAverageMemoryUtilizationHighResolution)으로 설정되어 있는지 확인합니다. - 또는 CLI로 확인합니다.
aws application-autoscaling describe-scaling-policies \
--service-namespace ecs \
--resource-id service/my-cluster/my-service \
--scalable-dimension ecs:service:DesiredCount \
--region us-east-1
응답의 PredefinedMetricType이 고해상도 메트릭으로 설정되어 있는지 확인합니다.
고려 사항
- 모니터링 구성 변경은 새 서비스 개정판을 만들고 서비스 배포가 필요합니다. 배포가 완료되고 모든 작업이 20초 해상도로 방출할 때까지 고해상도 확장 메트릭을 사용할 수 없습니다.
- 고해상도 메트릭은 Application Load Balancer와 Network Load Balancer를 사용하는 서비스에 지원됩니다. 대상 그룹이 없는 Classic Load Balancer를 사용하는 서비스는 지원되지 않습니다.
- 고해상도 메트릭은
CODE_DEPLOY또는EXTERNAL배포 컨트롤러 유형을 사용하는 서비스에는 지원되지 않습니다. - 서비스의 모니터링 구성은
DescribeServiceRevisions로 볼 수 있습니다. 모니터링 구성은CreateService또는UpdateService응답에서는 반환되지 않습니다.