このチュートリアルでは、Auto Scaling を使用して、サブスクリプション、従量課金、およびスポットの Elastic Compute Service (ECS) インスタンスを組み合わせ、アプリケーションがビジネスの周期的な変動に低コストで対応できるようにする方法について説明します。
ビジネスシナリオ
あるオンライン教育プラットフォームでは、毎日 17:00 から 22:00 までが授業のピーク時間です。それ以外の時間帯はトラフィックが少なくなります。授業のピーク時間帯のトラフィックに対応するため、O&M エンジニアはピーク期間用のコンピューティングリソースを長期間保持する必要があります。これらのリソースは他の時間帯にはアイドル状態となり、リソースの無駄やコストの増加につながります。ピーク時間帯のトラフィックが想定を上回った場合、O&M エンジニアは一時的に手動で ECS インスタンスを作成する必要もあります。
お使いのアプリケーションに以下の特徴がある場合、同様のソリューションを利用できます。
複数のサーバーを持つクラスターとしてデプロイされている。
耐障害性が高く、いつでも中断されるリスクを許容できる。たとえば、スポットインスタンスを使用するテストワークロードなど。
毎日 17:00 から 22:00 にかけてサービスのピークが発生し、それ以外の時間帯はリソースがアイドル状態になるなど、周期的なピークと谷が明確である。
ソリューション
Auto Scaling は、従量課金インスタンスとスポットインスタンスの併用をサポートしており、ビジネスの周期的な変動に対応しつつ、より低コストでトラフィック要件を満たすことができます。
以下のソリューションを使用できます。
通常時: (推奨) ワークロード用にサブスクリプションの ECS インスタンスを購入します。
ピーク時と閑散時:以下で説明するように、スケジュールされたタスクを使用して、必要な ECS インスタンスを追加およびリリースします。
サービスピーク時:スケーリンググループは、スケジュールされたタスクを使用して、必要な ECS インスタンスを一時的に自動で追加します。複数のインスタンスタイプを指定して従量課金インスタンスとスポットインスタンスを組み合わせることで、コストをさらに削減できます。スケーリンググループは、vCPU 単価の低い順にインスタンスタイプを並べ替え、vCPU 単価の低いインスタンスタイプを優先的に選択します。
サービスの閑散時:スケーリンググループは、スケジュールされたタスクを使用して、不要な ECS インスタンスを自動的にリリースします。
ビジネス上のメリット
Auto Scaling を使用してコストを削減すると、以下のメリットが得られます。
スタンバイインスタンスのコストがゼロ:Auto Scaling は、オンデマンドでの ECS インスタンスの自動作成と自動リリースをサポートしているため、スタンバイインスタンスは不要です。ピーク時と閑散時以外のトラフィックに対応するためのコンピューティングリソースのみを保持すればよくなります。
O&M コストがゼロ:事前にスケールアウトポリシーを設定するだけで済みます。負荷が増加すると、Auto Scaling は自動的に ECS インスタンスを作成し、RDS インスタンスのホワイトリストと SLB インスタンスのロードバランシングバックエンドサーバーグループに追加します。プロセス全体が手動介入なしで自動的に実行され、完了します。
卓越したコストパフォーマンス:Auto Scaling は、従量課金インスタンスとスポットインスタンスの併用をサポートしています。スポットインスタンスは、ECS インスタンス価格のわずか 10% で購入できます。スポットインスタンスの在庫が不足している場合は、代わりに従量課金インスタンスが提供され、確実なプロビジョニングが保証されます。コスト最適化ポリシーは、スポットインスタンスの補償もサポートしています。既存のスポットインスタンスがリリースされる 5 分前に、Auto Scaling は現在のより低い価格で新しいスポットインスタンスの作成を自動的に試み、卓越したコストパフォーマンスを提供します。
操作手順
ビジネスアーキテクチャに基づいてビジネスモジュールを評価し、以下の操作を実行して、対象ビジネスモジュールのコストを削減します。
開始する前に、お使いのアプリケーションの ECS インスタンス用のカスタムイメージを作成してください。詳細については、「インスタンスからカスタムイメージを作成」をご参照ください。
ステップ 1:カスタムイメージからのサブスクリプション ECS インスタンスの作成
スケーリンググループに追加し、通常時のワークロードを処理するために、必要な数のサブスクリプションの ECS インスタンスを作成します。
ステップ 2:スケーリンググループの作成と有効化
コストを削減したいビジネスモジュール用にスケーリンググループを作成します。スケーリング設定で、アプリケーションインスタンスのカスタムイメージを選択し、自動的に作成される ECS インスタンスがアプリケーションの要件を満たすようにします。
Auto Scaling コンソールにログインします。
左側メニューで、スケーリンググループ をクリックします。
上部メニューで、リージョンを選択します。
スケーリンググループの作成 をクリックし、パラメーターを設定してスケーリンググループを作成します。
スケーリンググループ名 を
testnameなどのカスタム名に設定します。インスタンス設定ソース を 新規作成 に設定します。
最小インスタンス数 を 0 に設定します。
最大インスタンス数 を 10 に設定します。
デフォルトのクールダウン時間 (秒) のデフォルト値は 300 です。
ネットワークタイプ を VPC に設定します。
拡張および縮小戦略 を コスト最適化ポリシー に設定します。
最小の従量課金インスタンス数 を 0 に設定します。
従量課金インスタンス比率 (%) を 30 に設定します。
インスタンスタイプ低価格順位数 を 3 に設定します。
インスタンス再利用モード を リリースモード に設定します。
作成した Virtual Private Cloud と対応する vSwitch を選択します。
現在のビジネスモジュールが使用する RDS インスタンスと、Classic Load Balancer (CLB、旧 SLB)、Application Load Balancer (ALB)、および Network Load Balancer (NLB) のサーバーグループを関連付けます。
必要に応じて他の情報を設定します。詳細については、「ECS スケーリンググループの作成」をご参照ください。
作成したスケーリンググループを見つけ、対応する 操作 列の 詳細の表示 をクリックします。
基本情報 タブの左側で、プリエンプティブインスタンス補償ポリシー を見つけ、以下の操作を行います。
プリエンプティブルインスタンス補完の有効化 を有効にします。
従量課金インスタンスを使用してプリエンプティブル容量を補完 を有効にします。
左側メニューで、スケーリンググループ をクリックします。
スケーリング設定の作成 をクリックし、パラメーターを設定してスケーリング設定を作成します。
支払いモード を プリエンプティブルインスタンス に設定します。
インスタンス設定に 3 つ以上のインスタンスタイプを選択します。
イメージの選択 をカスタムイメージに設定します。
必要に応じて他の情報を設定します。詳細については、「スケーリング設定の作成 (ECS インスタンス)」をご参照ください。
スケーリング設定とスケーリンググループを有効にします。
ステップ 3:サブスクリプションの ECS インスタンスの追加と自動スケーリングポリシーの設定
サブスクリプションの ECS インスタンスをスケーリンググループに追加し、スケジュールされたタスクを作成して、ビジネスのピークと谷に応じてスムーズにスケーリングします。このアプローチでは、スポットインスタンスを使用することでコスト削減を最大化します。
インスタンス管理 タブに移動し、作成したサブスクリプションの ECS インスタンスをスケーリンググループに追加します。
閑散時にもビジネスが正常に稼働するように、サブスクリプションの ECS インスタンスを保護ステータスに設定します。
スケーリンググループ ページに移動し、ビジネス要件に基づいてスケーリンググループの最小インスタンス数と最大インスタンス数を変更します。
スケーリンググループの最大インスタンス数と最小インスタンス数の変更に関する詳細については、「スケーリンググループの設定」をご参照ください。
「スケーリンググループ詳細」ページで、 を選択し、2 つのシンプルスケーリングルールを作成します。
設定する主なパラメーターは次のとおりです。
各スケーリングルールについて、ルールタイプ を シンプルスケーリングルール に設定します。
操作 には、次のルールを設定します。
必要に応じて他の情報を設定します。詳細については、「スケーリングルールの設定」をご参照ください。
簡易スケーリングルール 1:スケールアウトが必要な場合、5 つのインスタンスを追加します。
簡易スケーリングルール 2:スケールインが必要な場合、5 つのインスタンスをリリースします。
スケーリンググループ詳細ページで、 を選択し、2 つの予約タスクを作成します。
実行時刻 には、次のルールを設定します。
スケジュールされたタスク 1:サービスのピーク前 (17:00 など) にスケールアウトが必要な場合、実行時刻を 2021年11月20日 16:59 に設定します。
スケジュールされたタスク 2:サービスの閑散期前 (22:00 など) にスケールインが必要な場合、実行時刻を 2021年11月20日 21:59 に設定します。
スケーリンググループ を、サブスクリプションの ECS インスタンスが追加されたスケーリンググループに設定します。
繰り返し をビジネス要件に応じて設定します。
スケーリング方法 を 既存のスケーリングルールを選択 に設定します。
シンプルスケーリングルール には、次のルールを設定します。
スケジュールされたタスク 1:17:00 のサービスピーク前にスケールアウトするには、簡易スケーリングルール 1 を選択します。
スケジュールされたタスク 2:22:00 のサービスの閑散期前にスケールインするには、簡易スケーリングルール 2 を選択します。
必要に応じて他の情報を設定します。詳細については、「スケジュールされたタスクの設定」をご参照ください。
結果
スケーリングアクティビティ ページで、スケーリングアクティビティの詳細を表示して、スケーリンググループ内のインスタンスがスケールアウトおよびスケールイン操作を正常に実行したかを確認できます。詳細については、「スケーリングアクティビティの詳細」をご参照ください。
サブスクリプションの ECS インスタンスは、閑散時のワークロードを処理するために保護ステータスに設定されます。保護ステータスの ECS インスタンスはスケーリンググループから削除されず、SLB バックエンドサーバーの重みも影響を受けません。
サービスピーク時には、スケーリンググループはスケジュールされたタスクを使用して、必要な数の ECS インスタンスをよりスムーズに自動作成します。コスト最適化ポリシーが使用され、スポットインスタンスの補償が有効になっているため、ECS インスタンスはより低い価格で、より優れたコストパフォーマンスで購入できます。
サービスの閑散時には、スケーリンググループはスケジュールされたタスクを使用して、不要な ECS インスタンスを自動的にリリースします。