ターゲット追跡スケーリングとスケジュールスケーリングを併用できるのか確認したメモ。
参考リンク
準備
前回の続きとして実施する。サービスが作成され、ターゲット追跡スケーリングが設定された状態。
すなわち、register-scalable-target
とput-scaling-policy
は実施済みの状態。
$ aws application-autoscaling describe-scalable-targets --service-namespace ecs --resource-ids service/fargate-cluster/echoserver { "ScalableTargets": [ { "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "MinCapacity": 1, "MaxCapacity": 10, "RoleARN": "arn:aws:iam::XXXXXXXXXXXX:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService", "CreationTime": "2020-11-06T10:06:09.967000+09:00", "SuspendedState": { "DynamicScalingInSuspended": false, "DynamicScalingOutSuspended": false, "ScheduledScalingSuspended": false } } ] } $ aws application-autoscaling describe-scaling-policies --service-namespace ecs --resource-id service/fargate-cluster/echoserver { "ScalingPolicies": [ { "PolicyARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scalingPolicy:5bb4a23d-5417-4cda-b63f-6d5c439d50da:resource/ecs/service/fargate-cluster/echoserver:policyName/MyMetricTargetTrackingPolicy", "PolicyName": "MyMetricTargetTrackingPolicy", "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 10.0, "CustomizedMetricSpecification": { "MetricName": "MyMetricName", "Namespace": "MyNamespace", "Dimensions": [ { "Name": "MyMetricDimensionName", "Value": "MyMetricDimensionValue" } ], "Statistic": "Average" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "DisableScaleIn": false }, "Alarms": [ { "AlarmName": "TargetTracking-service/fargate-cluster/echoserver-AlarmHigh-d945ea9e-3722-4428-8633-758ee31546e4", "AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:XXXXXXXXXXXX:alarm:TargetTracking-service/fargate-cluster/echoserver-AlarmHigh-d945ea9e-3722-4428-8633-758ee31546e4" }, { "AlarmName": "TargetTracking-service/fargate-cluster/echoserver-AlarmLow-f864b106-a656-4b20-aebe-01042354cb37", "AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:XXXXXXXXXXXX:alarm:TargetTracking-service/fargate-cluster/echoserver-AlarmLow-f864b106-a656-4b20-aebe-01042354cb37" } ], "CreationTime": "2020-11-06T10:07:59.650000+09:00" } ] }
スケジュールスケーリングの設定
スケジュールスケーリングは、スケーリングポリシーとは別に、スケジュールアクションとして作成する。
1回のみのアクションを登録することも、rate式またはcron式を使って定期的なアクションを作成することも可能。
1回のみのアクションとして登録
1回のみのアクションを登録する。
aws application-autoscaling put-scheduled-action \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/fargate-cluster/echoserver \ --scheduled-action-name scale-out \ --schedule "at(2020-11-06T01:30:00)" \ --scalable-target-action MinCapacity=3
登録したアクションを確認する。
$ aws application-autoscaling describe-scheduled-actions --service-namespace ecs --resource-id service/fargate-cluster/echoserver { "ScheduledActions": [ { "ScheduledActionName": "scale-out", "ScheduledActionARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scheduledAction:5bb4a23d-5417-4cda-b63f-6d5c439d50da:resource/ecs/service/fargate-cluster/echoserver:scheduledActionName/scale-out", "ServiceNamespace": "ecs", "Schedule": "at(2020-11-06T01:30:00)", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "ScalableTargetAction": { "MinCapacity": 3 }, "CreationTime": "2020-11-06T10:27:13.180000+09:00" } ] }
時間になると最小数が変更されスケールする。
スケーリングアクティビティを確認できる。最小数が変更される。この場合タスク数が最小数を下回っていたので、その後少し後にDesiredが変更されている。
$ aws application-autoscaling describe-scaling-activities --service-namespace ecs --resource-id service/fargate-cluster/echoserver --max-items 2 { "ActivityId": "e6796600-390a-4307-b8b4-43ca6c274463", "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "Description": "Setting desired count to 3.", "Cause": "minimum capacity was set to 3", "StartTime": "2020-11-06T10:30:40.076000+09:00", "EndTime": "2020-11-06T10:31:46.790000+09:00", "StatusCode": "Successful", "StatusMessage": "Successfully set desired count to 3. Change successfully fulfilled by ecs." }, { "ActivityId": "2689954f-cd75-48cf-af1f-9ad877e3413c", "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "Description": "Setting min capacity to 3", "Cause": "scheduled action name scale-out was triggered", "StartTime": "2020-11-06T10:30:39.582000+09:00", "EndTime": "2020-11-06T10:30:39.602000+09:00", "StatusCode": "Successful", "StatusMessage": "Successfully set min capacity to 3" }
定期的なアクションとして登録
定期的なアクションを2つcron式で登録する。毎40分と毎44分にアクションを登録。
aws application-autoscaling put-scheduled-action \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/fargate-cluster/echoserver \ --scheduled-action-name my-recurring-action1 \ --schedule "cron(40 * * * ? *)" \ --scalable-target-action MinCapacity=5,MaxCapacity=20 aws application-autoscaling put-scheduled-action \ --service-namespace ecs \ --scalable-dimension ecs:service:DesiredCount \ --resource-id service/fargate-cluster/echoserver \ --scheduled-action-name my-recurring-action2 \ --schedule "cron(44 * * * ? *)" \ --scalable-target-action MinCapacity=1,MaxCapacity=10
確認する。
$ aws application-autoscaling describe-scheduled-actions --service-namespace ecs --resource-id service/fargate-cluster/echoserver { "ScheduledActions": [ { "ScheduledActionName": "my-recurring-action1", "ScheduledActionARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scheduledAction:5bb4a23d-5417-4cda-b63f-6d5c439d50da:resource/ecs/service/fargate-cluster/echoserver:scheduledActionName/my-recurring-action1", "ServiceNamespace": "ecs", "Schedule": "cron(40 * * * ? *)", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "ScalableTargetAction": { "MinCapacity": 5, "MaxCapacity": 20 }, "CreationTime": "2020-11-06T10:39:44.322000+09:00" }, { "ScheduledActionName": "scale-out", "ScheduledActionARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scheduledAction:5bb4a23d-5417-4cda-b63f-6d5c439d50da:resource/ecs/service/fargate-cluster/echoserver:scheduledActionName/scale-out", "ServiceNamespace": "ecs", "Schedule": "at(2020-11-06T01:30:00)", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "ScalableTargetAction": { "MinCapacity": 3 }, "CreationTime": "2020-11-06T10:27:13.180000+09:00" }, { "ScheduledActionName": "my-recurring-action2", "ScheduledActionARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:scheduledAction:5bb4a23d-5417-4cda-b63f-6d5c439d50da:resource/ecs/service/fargate-cluster/echoserver:scheduledActionName/my-recurring-action2", "ServiceNamespace": "ecs", "Schedule": "cron(44 * * * ? *)", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "ScalableTargetAction": { "MinCapacity": 1, "MaxCapacity": 10 }, "CreationTime": "2020-11-06T10:39:45.154000+09:00" } ] }
40分に変更される。
44分にまた変更される。
$ aws application-autoscaling describe-scaling-activities --service-namespace ecs --resource-id service/fargate-cluster/echoserver --max-items 3 { "ScalingActivities": [ { "ActivityId": "54bf35c4-c4fa-43a8-9f8b-b87dae42c230", "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "Description": "Setting min capacity to 1 and max capacity to 10", "Cause": "scheduled action name my-recurring-action2 was triggered", "StartTime": "2020-11-06T10:44:03.493000+09:00", "EndTime": "2020-11-06T10:44:03.534000+09:00", "StatusCode": "Successful", "StatusMessage": "Successfully set min capacity to 1 and max capacity to 10" }, { "ActivityId": "bee13543-c633-48f4-b683-8a5fd5780ed2", "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "Description": "Setting desired count to 5.", "Cause": "minimum capacity was set to 5", "StartTime": "2020-11-06T10:40:49.312000+09:00", "EndTime": "2020-11-06T10:41:59.274000+09:00", "StatusCode": "Successful", "StatusMessage": "Successfully set desired count to 5. Change successfully fulfilled by ecs." }, { "ActivityId": "59fc0ec8-1d66-4c5c-9d45-ab0ed36bcf5e", "ServiceNamespace": "ecs", "ResourceId": "service/fargate-cluster/echoserver", "ScalableDimension": "ecs:service:DesiredCount", "Description": "Setting min capacity to 5 and max capacity to 20", "Cause": "scheduled action name my-recurring-action1 was triggered", "StartTime": "2020-11-06T10:40:48.815000+09:00", "EndTime": "2020-11-06T10:40:48.840000+09:00", "StatusCode": "Successful", "StatusMessage": "Successfully set min capacity to 5 and max capacity to 20" } ], "NextToken": "eyJOZXh0VG9rZW4iOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAzfQ==" }