AWS Fargate에서 Amazon Elastic Container Service(Amazon ECS) 서비스 오토 스케일링을 구성하고 싶습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
Amazon CloudWatch 경보가 오토 스케일링을 시작하면 Application Auto Scaling은 크기 조정 정책을 사용하여 원하는 새 개수를 결정합니다. 그런 다음, Application Auto Scaling에서 desiredCount 파라미터의 새 값을 사용하여 Amazon ECS에 대한 UpdateService API 직접 호출을 시작합니다. Amazon ECS 서비스 스케줄러는 원하는 새 개수에 맞춰 작업을 시작하거나 중지합니다. 스케일링 활동은 원하는 새 개수가 실행 중인 개수와 일치할 때까지 InProgress 상태로 유지됩니다.
Amazon ECS 콘솔 또는 AWS CLI를 사용하여 Fargate에서 Amazon ECS 오토 스케일링을 구성할 수 있습니다. 서비스 오토 스케일링 설정을 구성하는 AWS Identity and Access Management(IAM) 사용자는 동적 스케일링을 지원하는 서비스에 대한 권한이 있어야 합니다. 자세한 내용은 Amazon ECS 서비스 오토 스케일링에 필요한 IAM 권한을 참조하십시오.
Amazon ECS 콘솔 사용
다음 단계를 완료하십시오.
- Amazon ECS 콘솔을 엽니다.
- 서비스 오토 스케일링을 선택한 다음, 서비스 자동 크기 조정 사용 옵션을 선택합니다.
- 서비스 오토 스케일링에 다음 값을 입력합니다.
최소 작업 개수에 가장 적은 작업 수를 입력합니다.
최대 작업 개수에 가장 많은 작업 수를 입력합니다.
참고: 원하는 개수는 최소 수보다 작거나 최대 수보다 크지 않습니다.
- 대상 추적 조정 정책을 생성하거나 Amazon ECS에 추가할 단계 조정 정책을 생성합니다.
AWS CLI 사용
다음 register-scalable-target 명령을 실행하여 Application Auto Scaling에 Fargate를 확장 가능 대상으로 등록합니다.
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--min-capacity 1 --max-capacity 10 --region REGION
참고: CLUSTER_NAME을 클러스터로, SERVICE_NAME을 서비스로, REGION을 AWS 리전으로 바꾸십시오.
그런 다음, put-scaling-policy를 실행하여 Fargate를 확장 가능 대상으로 사용할 대상 추적 조정 정책 또는 단계 조정 정책을 생성합니다. 명령에 생성한 JSON 파일을 포함합니다.
대상 추적 조정 정책에 대한 명령 예시:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--policy-name Test-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{ "TargetValue": 75.0, "PredefinedMetricSpecification": {"PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60,"ScaleInCooldown": 60}'
참고: CLUSTER_NAME을 클러스터로, SERVICE_NAME을 서비스로, REGION을 리전으로 바꾸십시오. Application Auto Scaling은 대상 값을 기반으로 크기 조정을 위한 CloudWatch 경보를 생성합니다.
단계 조정 정책에 대한 명령 예시:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id service/CLUSTER_NAME/SERVICE_NAME \
--policy-name Test-Step-scaling-policy-ScaleOut --policy-type StepScaling \
--step-scaling-policy-configuration '{"AdjustmentType": "ExactCapacity","StepAdjustments": [ { "MetricIntervalLowerBound": 20, "ScalingAdjustment": 10}, { "MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 20,"ScalingAdjustment": 5}],"Cooldown": 60, "MetricAggregationType": "Average"}'
참고: CLUSTER_NAME을 클러스터로, SERVICE_NAME을 서비스로, REGION을 리전으로 바꾸십시오.
단계 조정 정책을 생성한 경우 다음 put-metric-alarm 명령을 실행하여 CloudWatch 경보에 크기 조정 정책을 추가합니다. 그런 다음, 위 단계를 반복하여 스케일링 활동에 대한 두 번째 단계 조정 정책과 CloudWatch 경보를 생성합니다.
aws cloudwatch put-metric-alarm \
--alarm-name Test-ScaleOut --metric-name MemoryUtilization \
--namespace AWS/ECS \
--statistic Average --period 60 --threshold 60 \
--comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --datapoints-to-alarm 1 \
--dimensions Name=ClusterName,Value=CLUSTER_NAME Name=ServiceName,Value=SERVICE_NAME --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"
참고: CLUSTER_NAME을 클러스터로, SERVICE_NAME을 서비스로, REGION을 리전으로 바꾸십시오.
Application Auto Scaling은 스케일 아웃이 완료될 때까지 스케일 아웃 활동 중에 모든 스케일링 활동을 차단합니다. 구성한 개수를 충족하지 못하면 Amazon ECS는 InProgress 스케일 아웃 활동의 시간을 초과합니다. 시간 초과의 원인에는 이미지 또는 네트워킹 문제가 있습니다. CloudWatch 지표가 스케일 아웃 휴지 기간 중에 축소되고 확장 활동이 완료되면 Application Auto Scaling이 스케일링 활동을 실행합니다.
관련 정보
Amazon ECS의 서비스 오토 스케일링 문제 해결
Amazon ECS 서비스 자동 규모 조정
DescribeScalingActivities
application-autoscaling