Amazon ECS でスケジュールスケーリングをコンソールから作成してみる

AWS

2024.12.3

Topics

はじめに

今までは、AWS CLI からしか設定できなかったスケジュールスケーリングが、コンソールから設定できるようになりました。
これにより、今までより手軽にスケジュールスケーリングを作成や確認することができます。

コンソールで操作できるようになったのは、以下のアップデートの影響かと思いますが、具体的な記述は見つけられませんでした。
AWS、Amazon ECS サービスの予測スケーリングのサポートを発表 – AWS

以下、新しくなった ECS のコンソール画面
新しくなったECSコンソール画面に登場したスケジュールスケーリング

今回は、コンソールからスケジュールスケーリングを設定する手順と、実際にスケジュールスケーリングがどういった動作をするのかを確認してみます。

スケジュールスケーリングとは

まずは、初めにスケジュールスケーリングについて軽く触れます。

スケジュールされたスケーリングを使用すると、特定の時間に容量を増減するスケジュールされたアクションを作成することで、予測可能な負荷の変化に基づいてアプリケーションの自動スケーリングを設定できます。
これにより、予測可能な負荷の変化に合わせてアプリケーションをプロアクティブにスケーリングできます。
アプリケーション自動スケーリングのスケジュールされたスケーリング – アプリケーション自動スケーリング

たとえば、週の半ばに負荷が増加し、週末に向かって負荷が減少するという定期的な週次トラフィックパターンが発生しているとします。
その場合は、Application Auto Scaling で、このパターンに合わせてスケーリングスケジュールを設定できます。

  • 水曜日の朝、スケジュールされたアクションにより、最小タスク数が増加し、必要タスク数が増加
  • 金曜日の夕方には、別のスケジュールされたアクションによって、以前に設定された最小タスク数と同じ数に削減され、必要タスク数が減少

スケーリングで各タスク数を変動させたときに、以下の場合は必要タスク数に合わせるように自動的にスケールが行われます。

  • 最小タスク数 > 必要タスク数
  • 最大タスク数 < 必要タスク数

しかし、「最小タスク数 < 必要タスク数」の場合は、スケールイン自体は行われないため、別途スケールインをするポリシーが必要となりますのでご注意ください。
上記動作から、スケジュールスケーリングは補助的な役割を持つスケーリングポリシーとして考える必要がありそうです。

スケジュールスケーリングの実装

スケジュールスケーリングは「最小タスク数」と「最大タスク数」を変動させます。

まずは、事前に負荷に備えるタスク数にするため、「最小タスク数」を上げるスケジュールスケーリングが必要になります。
その後、負荷が収まったあとは、「最小タスク数」を下げるスケジュールスケーリングが必要になります。

そのため、スケールアウト用とスケールイン用のスケジュールスケーリングの 2 つで 1 セットとお考えください。

今回は、一定期間だけ、タスクを増加させるユースケースとして、以下の内容を実装いたします。

  • 最小タスク数を増加させ、スケールアウトするスケジュールアクション
  • 最小タスク数を減少させ、スケールインするスケジュールアクション
    • ターゲット追跡スケーリングポリシーによりスケールインが行われる

初期のタスクとスケーリングポリシー状態

初期のタスク数は、以下の通りそれぞれ設定しています。

  • 必要タスク数:1
  • 最小タスク数:1
  • 最大タスク数:3

今回のアップデートにより、タスク数の設定とスケーリングポリシーの設定は別々でも設定できるようになったようですね。

最小タスク数と最大タスク数の設定画面

今回は、スケールイン動作を見るために、ターゲット追跡スケーリングポリシーを追加で設定しておきます。

追加したターゲット追跡ポリシー

スケールアウト用のスケジュールスケーリングの作成

それでは、まずはスケールアウトするスケジュールスケーリングを作成します。
タイムゾーンを JST にし、繰り返しはしない設定にします。

スケジュールスケーリングのスケールアウトの設定 スケジュール設定

今回は行いませんが、Cron や Rate で設定することも可能です。
テスト環境や検証環境で、常時稼働する必要のない環境で、平日の 08:00 ~ 20:00 だけ起動するスケジュールを作成する場合に活用できます。
Create scheduled actions for Application Auto Scaling using the AWS CLI – Application Auto Scaling

このアクションでは、スケールアウトをしてほしいため、最小タスク数を「1→2」と増加させます。
最大タスク数は、そのままの「3」にします。
デフォルトの入力値が、「10」になっているため、現在のキャパシティ制限の最大タスク数と同じ値に変更します。

スケジュールスケーリングのスケールアウトの設定 タスク数の設定

設定したものは、「スケジュールされたアクション」として一覧で表示されます。

設定したスケジュールスケーリング

スケールイン用のスケジュールスケーリングの作成

では、続いてはスケールインするスケジュールスケーリングを作成します。
設定内容は先ほどとほぼ同じですが、時刻だけスケールアウトが行われた 5 分後に起動する設定にしています。

スケジュールスケーリングのスケールインの設定 スケジュール設定

最小タスク数は、もとのタスク数の「1」になるように設定しています。

スケジュールスケーリングのスケールインの設定 タスク数の設定

設定が完了しました。

設定したスケジュールスケーリングのスケールイン

スケジュールスケーリングの動作確認

では、スケジュールした時間まで待機し、どういった動作をするのかを確認します。

スケジュールスケーリングのスケールアウト用の動作

スケールアウトの時間になると、タスクが一つ増えてました。

スケールアウトで増加したタスク

タスクの起動時間は、スケジュールで設定した時間になってました。

タスク起動時間

スケジュールスケーリングの影響で「最小タスク数 > 必要タスク数」になったので、必要タスク数も「2」に増えています。

必要タスク数が2に増加

また、イベントにもスケーリングイベントが記録されていました。

スケジュールスケーリングが起動したイベント

「スケジュールされたアクション」の下にある、スケーリングアクティビティにもスケールの結果が記録されていました。
「Setting min capacity to 2 and max capacity to 3」のアクティビティは、必要タスク数が最小タスク数を下回った結果発生したようです。

スケーリングアクティビティの結果

スケジュールスケーリングのスケールイン用の動作

先程のスケールアウトから少し時間が経過して、スケールイン用のスケジュールスケーリングが起動しました。
最小タスク数が「1」になることで、ターゲット追跡ポリシーのスケールインが即走ったようです。

スケーリングアクティビティ結果
スケーリングアクティビティのスケールインの結果

ECS イベント結果
ECSイベントのスケールイベント結果

必要タスク数も減少していました。
ターゲット追跡ポリシーの影響で、必要タスク数も最小タスク数と同じ値になっています。

タスク数

スケールアウト・スケールインの CloudWatch メトリクス

併せて、ECS タスクの CloudWatch メトリクスも見てみます。

  • DesiredTaskCount:Amazon ECS サービスに必要なタスクの数
  • RunningTaskCount:現在、RUNNING 状態にあるタスクの数
  • TaskSetCount:サービス内のタスクセットの数
  • PendingTaskCount:現在、PENDING 状態にあるタスクの数

「Amazon ECS Container Insights メトリクス」 – Amazon CloudWatch

スケールアウト用に設定したスケジュールは 15:05 に起動しました。
メトリクス投稿のタイミング的に、次の収集の 15:06 に必要タスク数は「2」と記録されています。

スケールアウト時のタスク数

スケールイン用のスケジュールは 15:10 に起動しました。
こちらも同じ様に次の記録タイミングから、必要タスク数は「1」と記録されています。

スケールイン時のタスク数

動作確認で気になったところ

最後に新しいコンソールを触っていて気になったところをまとめてみます。

  • 時刻表記が異なる
    • 表示箇所によって、時刻表記が UTC と指定したタイムゾーンが異なる
  • スケジュールアクションの動作後
    • 繰り返しをしない、一度きりのスケジュールスケーリングがスケジュールされたあとでもアクションには残り続ける
  • 最小タスク数と最大タスク数のデフォルト値
    • 「調整後のキャパシティ制限を指定」を設定する箇所の最小タスク数と最大タスク数が現在のキャパシティ制御とは異なること
  • タスク数やスケール設定の変更画面
    • ECS サービス更新からではなくても、スケーリング関連設定については更新できる設定箇所が増えていること

時刻表記が異なる

気をつけないと間違いやすいと思ったポイントです。
「開始時刻」と「作成日」で表示されている時刻のタイムゾーンが異なります。

スケジュールされたアクションの表示

「開始時刻」については、タイムゾーンが指定でき、「Asia/Tokyo」で設定したため JST 表記になります。

開示時刻のJST表記

しかし、「作成日」については、UTC 表記になっています。

作成日はUTC表記

スケーリングアクティビティに表記されている時刻も UTC 表記になっています。
ただし、時刻を選択すると JST も表示されるようになります。

スケジュールアクションの動作後

一度きりで、スケジュールスケーリングを設定したため、設定が削除されるのか気になったので見てみました。
結果としては、EventBridge と同じように、一度きりの場合でも起動したあとは残り続けるようです。

スケジュールスケーリングのアクションが完了したもの

そのため、不要な場合は手動で削除が必要です。

スケジュールスケーリングの設定削除確認画面

ただし、あとから編集することもできるので、今後使うのであれば設定は残しておいても問題なさそうです。

最小タスク数と最大タスク数のデフォルト値

新規にスケジュールスケーリングを作成した場合の最小タスク数と最大タスク数のデフォルト値は以下で固定のようです。

  • 最小タスク数:1
  • 最大タスク数:10

スケジュールスケーリングの初期作成画面

そのため、最小タスク数だけ変更する場合でも、最大タスク数も意図した値になっているかを確認したほうが良さそうです。

タスク数やスケール設定の変更画面

従来であれば、サービスの更新からタスク数やスケーリングポリシーを変更していました。

サービス更新した設定変更画面

今回のアップデートにより、個別の設定箇所から変更することもできるようになったようです。

タスク数を変更する個別の設定画面

ただし、今回追加されたスケジュールスケーリングや予測スケーリングに関しては、個別の設定箇所からしか変更できないようです。

まとめ

今まで AWS CLI からしか設定できず、設定の確認も手間がかかってましたが、今回の ECS コンソールのアップデートにより、より使いやすくなってました。
スケーリングアクティビティは今回のアップデートで追加されたようですが、スケーリングの一覧がまとまって見れるもの結構便利です。

より使いやすくなった ECS コンソールでスケジュールスケーリングを試してみてはいかがでしょうか。

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら