Amazon ECS でスケジュールスケーリングをコンソールから作成してみる
2024.12.3
はじめに
今までは、AWS CLI からしか設定できなかったスケジュールスケーリングが、コンソールから設定できるようになりました。
これにより、今までより手軽にスケジュールスケーリングを作成や確認することができます。
コンソールで操作できるようになったのは、以下のアップデートの影響かと思いますが、具体的な記述は見つけられませんでした。
AWS、Amazon ECS サービスの予測スケーリングのサポートを発表 – AWS
以下、新しくなった 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」に増えています。
また、イベントにもスケーリングイベントが記録されていました。
「スケジュールされたアクション」の下にある、スケーリングアクティビティにもスケールの結果が記録されていました。
「Setting min capacity to 2 and max capacity to 3」のアクティビティは、必要タスク数が最小タスク数を下回った結果発生したようです。
スケジュールスケーリングのスケールイン用の動作
先程のスケールアウトから少し時間が経過して、スケールイン用のスケジュールスケーリングが起動しました。
最小タスク数が「1」になることで、ターゲット追跡ポリシーのスケールインが即走ったようです。
スケーリングアクティビティ結果
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 表記になります。
しかし、「作成日」については、UTC 表記になっています。
スケーリングアクティビティに表記されている時刻も UTC 表記になっています。
ただし、時刻を選択すると JST も表示されるようになります。
スケジュールアクションの動作後
一度きりで、スケジュールスケーリングを設定したため、設定が削除されるのか気になったので見てみました。
結果としては、EventBridge と同じように、一度きりの場合でも起動したあとは残り続けるようです。
そのため、不要な場合は手動で削除が必要です。
ただし、あとから編集することもできるので、今後使うのであれば設定は残しておいても問題なさそうです。
最小タスク数と最大タスク数のデフォルト値
新規にスケジュールスケーリングを作成した場合の最小タスク数と最大タスク数のデフォルト値は以下で固定のようです。
- 最小タスク数:1
- 最大タスク数:10
そのため、最小タスク数だけ変更する場合でも、最大タスク数も意図した値になっているかを確認したほうが良さそうです。
タスク数やスケール設定の変更画面
従来であれば、サービスの更新からタスク数やスケーリングポリシーを変更していました。
今回のアップデートにより、個別の設定箇所から変更することもできるようになったようです。
ただし、今回追加されたスケジュールスケーリングや予測スケーリングに関しては、個別の設定箇所からしか変更できないようです。
まとめ
今まで AWS CLI からしか設定できず、設定の確認も手間がかかってましたが、今回の ECS コンソールのアップデートにより、より使いやすくなってました。
スケーリングアクティビティは今回のアップデートで追加されたようですが、スケーリングの一覧がまとまって見れるもの結構便利です。
より使いやすくなった ECS コンソールでスケジュールスケーリングを試してみてはいかがでしょうか。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。
Recommends
こちらもおすすめ
-
【やってみた】Amazon ECS(Fargate)を使ってみた
2022.12.15
-
Amazon ECSコンテナ #SaaS :イメージをpush!
2023.10.17
-
Amazon ECSコンテナ #SaaS化 :クラスター生成、タスク定義
2023.11.8
-
2024 Japan AWS Top Engineers に選ばれました!
2024.9.12
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16