このチュートリアルでは、従量課金インスタンスとスポットインスタンスを組み合わせて Auto Scaling を使用し、周期的なトラフィックの変動に対応しながらコストを削減する方法を説明します。
ユースケース
毎日 17:00 ~ 22:00 にピークトラフィックが発生するオンライン教育プラットフォームを想定します。その他の時間帯はトラフィックが少ないため、運用チームはピーク時の負荷に対応するために十分な計算リソースを常時維持する必要があります。しかし、これらのリソースはオフピーク時にアイドル状態となり、無駄が生じます。また、予期せぬトラフィックの急増が発生した場合でも、エンジニアが手動で ECS インスタンスを追加する必要があります。
このソリューションは、以下の特徴を持つアプリケーションにも適しています。
-
アプリケーションが複数サーバーのクラスター上にデプロイされている。
-
アプリケーションが高耐障害性を持ち、中断に耐えられる。たとえば、スポットインスタンスを使用するテストワークロードなど。
-
アプリケーションのトラフィックに予測可能なピークとトロフがある。たとえば、毎日 17:00 ~ 22:00 に需要が高く、その他の時間帯はリソースがアイドル状態になるなど。
ソリューション
Auto Scaling を使用すると、従量課金インスタンスとスポットインスタンスを組み合わせて、周期的なトラフィックの変動をより低コストで管理できます。
以下のアプローチを採用できます。
-
オフピーク期間には、サブスクリプション ECS インスタンスを使用してベースライントラフィックを処理します。
-
ピークおよびオフピーク期間には、定期タスクを使用して ECS インスタンスを追加およびリリースします。詳細は以下のとおりです。
-
ピーク時間帯には、スケーリンググループが定期タスクを使用して必要な ECS インスタンスを自動的に追加します。複数のインスタンスタイプを指定し、従量課金インスタンスとスポットインスタンスを組み合わせることで、さらにコストを削減できます。スケーリンググループは、vCPU の単位価格が安い順にインスタンスタイプをソートし、最も安価なものを優先的に使用します。
-
オフピーク時間帯には、スケーリンググループが定期タスクを使用して不要な ECS インスタンスを自動的にリリースします。
-
メリット
Auto Scaling を使用してコストを削減するメリットは以下のとおりです。
-
スタンバイコストゼロ
Auto Scaling はオンデマンドで ECS インスタンスを自動的に作成およびリリースするため、スタンバイサーバーが不要になります。オフピーク期間中は、ベースライントラフィックに対応する計算リソースのみを維持すれば十分です。
-
運用オーバーヘッドゼロ
事前にスケーリングポリシーを設定するだけで済みます。負荷が増加すると、Auto Scaling が自動的に ECS インスタンスを作成し、それらを ApsaraDB RDS インスタンスの IP アドレスホワイトリストおよび関連付けられたロードバランサー(例:クラシックロードバランサー (CLB) インスタンス)のバックエンドサーバーグループに追加します。この一連のプロセスは完全に自動化されており、手動での介入は不要です。
-
高い費用対効果
Auto Scaling は、従量課金インスタンスとスポットインスタンスの組み合わせをサポートしています。スポットインスタンスは、従量課金インスタンスと比較して最大 90 % の割引で購入できます。スポットインスタンスの在庫が不足した場合は、従量課金インスタンスがプロビジョニングされ、容量の確保が保証されます。「コスト最適化ポリシー」はスポットインスタンスの補填もサポートしています。スポットインスタンスが再利用される 5 分前に、Auto Scaling が自動的に新しい低価格のスポットインスタンスの作成を試みるため、高い費用対効果を実現できます。
操作手順
アプリケーションモジュールのコストを削減するには、ビジネスアーキテクチャを評価し、以下の手順を実行してください。
開始前に、アプリケーションを実行している ECS インスタンスからカスタムイメージを作成してください。詳細については、「インスタンスからカスタムイメージを作成する」をご参照ください。
ステップ 1:サブスクリプション ECS インスタンスの作成
オフピーク期間中にアプリケーションモジュールのベースライントラフィックを処理するために、必要な数のサブスクリプション ECS インスタンスを作成します。
ECS コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
ページ左上隅で、リージョンとリソースグループを選択します。
-
アプリケーションのカスタムイメージを見つけ、操作列のECI の作成をクリックします。
-
インスタンス情報を設定して、インスタンスを作成します。
-
課金方法をサブスクリプションに設定します。
-
リージョンおよびイメージ情報は自動的に入力されます。
必要に応じて他のパラメーターを設定します。詳細については、「ウィザードを使用してインスタンスを作成する」をご参照ください。
-
ステップ 2:スケーリンググループの作成と有効化
最適化対象のアプリケーションモジュールのスケーリンググループを作成します。スケーリング設定では、アプリケーションのカスタムイメージを選択して、新しいインスタンスが正しく構成されるようにします。
Auto Scaling コンソールにサインインします。
左側のナビゲーションウィンドウで、スケーリンググループをクリックします。
上部のナビゲーションバーで、リージョンを選択します。
-
スケーリンググループの作成をクリックし、パラメーターを設定してスケーリンググループを作成します。
-
スケーリンググループ名を
testnameなどの任意の名前に設定します。 -
インスタンス設定ソースを新規作成に設定します。
-
最小インスタンス数を0に設定します。
-
最大インスタンス数を10に設定します。
-
デフォルトのクールダウン時間 (秒)は、デフォルトで300です。
-
ネットワークタイプをVPCに設定します。
-
拡張および縮小戦略をコスト最適化ポリシーに設定します。
-
最小の従量課金インスタンス数を0に設定します。
-
従量課金インスタンス比率 (%)を30に設定します。
-
インスタンスタイプ低価格順位数を3に設定します。
-
[プリエンプティブルインスタンス補完の有効化]を有効にします。
-
従量課金インスタンスを使用してプリエンプティブル容量を補完は、デフォルトで有効になっています。
-
-
インスタンス再利用モードをリリースモードに設定します。
-
作成済みの VPC および対応する vSwitch を選択します。
-
アプリケーションモジュールで使用するクラシックロードバランサー (CLB)、アプリケーションロードバランサー (ALB)、ネットワークロードバランサー (NLB) のサーバーグループおよび ApsaraDB RDS インスタンスを関連付けます。
必要に応じて他のパラメーターを設定します。詳細については、「ECS インスタンスのスケーリンググループを作成する」をご参照ください。
-
-
作成したスケーリンググループを見つけ、操作列の詳細の表示をクリックします。
ページ上部で、スケーリング設定タブをクリックします。
-
スケーリング設定の作成をクリックし、パラメーターを設定してスケーリング設定を作成します。
-
支払いモードをプリエンプティブルインスタンスに設定します。
-
インスタンス構成については、3 つ以上のインスタンスタイプを選択します。
-
イメージの選択:カスタムイメージを選択します。
必要に応じて他のパラメーターを設定します。詳細については、「ECS インスタンスのスケーリング設定を作成する」をご参照ください。
-
-
スケーリング設定およびスケーリンググループを有効にします。
ステップ 3:auto scaling の設定
サブスクリプション 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 インスタンスはスケーリンググループから削除されず、ロードバランサーの重みにも影響しません。
-
ピーク時間帯には、スケーリンググループが定期タスクを使用して必要な数の ECS インスタンスを自動的に作成します。「コスト最適化ポリシー」が使用され、スポットインスタンスの補填が有効になっているため、新しい ECS インスタンスは可能な限り低価格で購入され、費用対効果が最大化されます。
-
オフピーク時間帯には、スケーリンググループが定期タスクを使用して余剰な ECS インスタンスを自動的にリリースします。