ECSをスケジュールベースでスケールさせる
はい、どーも!モバイルアプリケーションサービス部、改め、CX事業本部の吉田です。
今回はECSのサービスをスケジュールベースでオートスケーリングさせる方法を調べたので、これを紹介します。
ECSのサービスをオートスケーリングするには?
ECSのサービスをオートスケーリングする機能は、コンソールからかんたんに設定可能です。
ただしその場合は
- CPU利用率
- メモリ利用率
- (あれば)ALBへのリクエスト数
といった項目のみです。つまりコンソールからはスケジュールベースでオートスケーリングをすることはできません。
Application Auto Scalingでオートスケーリングさせよう
ただしApplication Auto Scalingをaws cliを使って設定することで、ECSのサービスもスケジュールベースでオートスケーリングさせることができます。
- https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/index.html#cli-aws-application-autoscaling
- https://docs.aws.amazon.com/ja_jp/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html
スケジュールを登録するには、以下のようにします。
aws application-autoscaling put-scheduled-action \ --service-namespace ecs \ --resource-id service/nginx-cluster/nginx \ --scheduled-action-name nginx-scale-in \ --schedule "at(2019-08-13T08:20:00)" \ --scalable-dimension ecs:service:DesiredCount \ --scalable-target-action MinCapacity=3,MaxCapacity=3
- service-namespace - 今回はECSに対してオートスケーリングをしたいのでecsを設定します。
- resource-id - 対象のリソースを指定します。ECSのサービスであれば
service/[クラスタ名]/[サービス名]
です。 - scheduled-action-name - 自分がわかりやすいスケジュール名を指定します。
- schedule - スケジュールの実行時間です。UTCであることに注意しましょう。
- scalable-dimension - 今回はサービスのDesired Countを変更したいので
ecs:service:DesiredCount
を指定します。 - scalable-target-action - タスクの数を指定します。今回の例であればタスクを3つにしたいので
MinCapacity=3,MaxCapacity=3
と指定しています。
登録できたか確認するには、以下のように describe-scheduled-actions
コマンドを実行します。
aws application-autoscaling describe-scheduled-actions \ --service-namespace ecs
ここで登録したスケジュールの一覧を確認することができます。
次に、実際にスケジュールが実行されたかどうかを確認します。確認するには以下のように describe-scaling-activities
コマンドを実行します。
aws application-autoscaling describe-scaling-activities \ --service-namespace ecs
また、実行されたスケジュールは、ECSサービスのイベントタグからも確認することができます。
まとめ
上記のようにApplication Auto Scalingを利用することで、ECSのサービスもかんたんにスケジュール ベースでオートスケールさせることができます。
もちろん、Fargateであってもオートスケーリングできます!
ちなみに put-scheduled-action
には --start-time
と --end-time
といったオプションがあります。
例えば、特定の日のある一定の時間帯のみ、インスタンス数を増やすといったことができるのかな?と思い設定しましたが、こちらはうまく動作してくれませんでした・・・
このような場合はスケールアウトとスケールインの2つのスケジュールを登録することで、上記のようなケースにも対応できると思います。