スケーラビリティの高いアプリケーションでの自動スケーリングの使用


このチュートリアルでは、自動スケーリングを使用して、アプリケーションをホストしている VM インスタンスの数を自動的に調整し、アプリケーションがさまざまな量のトラフィックに適応できるようにする方法について説明します。

自動スケーリングを使用するには、マネージド インスタンス グループでアプリケーションをホストします。マネージド インスタンス グループとは、すべてが同じアプリケーションを実行し、単一のエンティティとして管理できる、インスタンスの集まりです。マネージド インスタンス グループで自動スケーリングが有効になっている場合、インスタンス グループ内の VM の数は、自動スケーリング ポリシーに指定したターゲット値に従って自動的に増加(スケールアウト)または減少(スケールイン)します。

このチュートリアルでは、マネージド インスタンス グループでウェブ アプリケーションを起動する手順、自動スケーリングを設定する手順、ネットワーク アクセスを構成する手順、負荷の急激な上昇や下落をシミュレートして自動スケーリングを観察する手順の詳細を示します。このような機能の使用経験にもよりますが、このチュートリアルは約 20 分で完了します。

目標

  • マネージド インスタンス グループでデモのウェブ アプリケーションを起動する。
  • トラフィックの急激な上昇や下落をシミュレートすることで、自動スケーリングの効果を観察する。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

  • Compute Engine

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

アプリケーション アーキテクチャ

アプリケーションには、次の Compute Engine コンポーネントが含まれています。

ウェブ アプリケーションの起動

このチュートリアルでは、GitHub に保存されているウェブ アプリケーションを使用します。アプリケーションの実装方法の詳細については、GoogleCloudPlatform/python-docs-samples GitHub リポジトリをご覧ください。

インスタンス テンプレートに起動スクリプトを含めることで、マネージド インスタンス グループ内のすべての VM でウェブ アプリケーションを起動します。ウェブ アプリケーションへの HTTP トラフィックを許可するには、ファイアウォール ルールを作成します。

ファイアウォール ルールを作成する

ウェブ アプリケーションへの HTTP トラフィックを許可するファイアウォール ルールを作成します。

  1. Google Cloud Console で、[ファイアウォール] ページに移動します。

    [ファイアウォール] に移動

  2. [ファイアウォール ルールを作成] をクリックします。

  3. [名前] に「default-allow-http」と入力します。

  4. [ネットワーク] を default に設定します。

  5. [ターゲット] を Specified target tags に設定します。

  6. [ターゲットタグ] に「http-server」と入力します。

  7. [ソースフィルタ] を IP ranges に設定します。

  8. [ソース IP の範囲] に「0.0.0.0/0」と入力して、

    すべての IP アドレスに対しアクセスを許可します。

  9. [ポートとプロトコル] で、[指定したプロトコルとポート] を選択します。次に、[tcp] を選択し、「80」と入力して HTTP トラフィックのアクセスを許可します。

  10. [作成] をクリックします。

インスタンス テンプレートの作成

起動時にデモのウェブ アプリケーションを起動するインスタンス テンプレートを作成します。

  1. Google Cloud Console で、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] に「autoscaling-web-app-template」と入力します。

  4. [マシンの構成] で、[マシンタイプ] を e2-standard-2 に設定します。

  5. [ファイアウォール] で、[HTTP トラフィックを許可する] チェックボックスをオンにします。これにより、このテンプレートから作成された各インスタンスに http-server ネットワーキング タグが適用されます。

  6. [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] をクリックして、詳細設定を表示します。

  7. [管理] タブで、[自動化] を見つけて、[起動スクリプト] に次の内容を入力します。

    sudo apt update && sudo apt -y install git gunicorn3 python3-pip
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/compute/managed-instances/demo
    sudo pip3 install -r requirements.txt
    sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
    

    このスクリプトにより、起動時に各インスタンスでウェブ アプリケーションが実行されます。

  8. [作成] をクリックします。

マネージド インスタンス グループの作成

リージョン インスタンス グループを作成して、ウェブ アプリケーションの実行を開始します。

  1. Google Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. [インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。

  3. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。

  4. [名前] に「autoscaling-web-app-group」と入力します。

  5. [インスタンス テンプレート] で [autoscaling-web-app-template] を選択します。

  6. [ロケーション] で [複数のゾーン] を選択します。

  7. [リージョン] で、[us-central1] を選択します。

  8. [ゾーン] で、プルダウン リストから次のゾーンを選択します。

    • us-central1-b
    • us-central1-c
    • us-central1-f
  9. インスタンス グループの自動スケーリングを構成します。

    1. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。
    2. [インスタンスの最小数] を 3 に設定します。

    3. [インスタンスの最大数] を 6 に設定します。

    4. [初期化期間] を 120 秒に設定します。

    5. [自動スケーリング指標] で、指標タイプとして [CPU 使用率] を選択します。自動スケーリング指標の詳細については、自動スケーリング ポリシーをご覧ください。

    6. [CPU 使用率の目標値] を 60 に設定します。

    7. [完了] をクリックします。

  10. [自動修復] で、[ヘルスチェック] プルダウン リストから [ヘルスチェックをしない] を選択します。

  11. [作成] をクリックします。[インスタンス グループ] ページにリダイレクトされます。

  12. インスタンスが実行されていることを確認します。

    1. Google Cloud コンソールの [インスタンス グループ] ページで、autoscaling-web-app-group をクリックしてグループ内のインスタンスを表示します。
    2. [外部 IP] で IP アドレスをクリックして、そのインスタンスを接続します。新しいブラウザタブが開き、デモウェブ アプリケーションが表示されます。

      インスタンスに関する情報の一覧とアクション ボタンが表示されているデモウェブ アプリケーション。

      確認が終わったら、デモウェブ アプリケーションのブラウザタブを閉じます。

自動スケーリングの観察

自動スケーリングの動作の詳細については、自動スケーリングの判断についてをご覧ください。

自動スケーリングのモニタリング

作成したインスタンス グループは、CPU 使用率に基づいた自動スケーリング ポリシーを使用します。つまり、オートスケーラーが必要に応じてグループを拡大または縮小して、CPU 使用率の目標値を 60% に維持します。

インスタンス グループのサイズと CPU 使用率をモニタリングするには、Google Cloud コンソールの自動スケーリング グラフを使用します。

  1. autoscaling-web-app-group インスタンス グループの [インスタンス グループ] ページで、[モニタリング] タブをクリックします。
  2. [グループサイズ] のグラフで自動スケーリングをモニタリングできます。グラフの [インスタンス] に、グループ内の VM インスタンスの数の推移が表示されます。
  3. 省略可: 自動スケーリングされた容量と使用率をモニタリングするには、[オートスケーラーの使用率(CPU)] のグラフを確認します。グラフには、グループ内の VM インスタンスの合計 CPU 使用率である使用率と、累積ターゲット CPU 使用率(ターゲット CPU 使用率に VM インスタンス数を掛けた値)を表す容量が表示されます。

    自動スケーリングは、可能な場合にインスタンスの数を変更することで、容量使用率に一致させようとします。

このウィンドウは閉じないでください。

スケールアウトのシミュレーション

スケールアウトは、インスタンス グループの平均 CPU 使用率がターゲット値より大幅に高い場合に発生します。スケールアウトの際、オートスケーラーは、CPU 使用率がターゲット CPU 使用率の値まで減少するか、インスタンス グループ サイズがインスタンスの最大数6 に設定しました)に等しくなるまで、インスタンス グループのサイズを徐々に増やします。

スケールアウトをトリガーするには、インスタンスの CPU 使用率を増やします。

  1. Google Cloud Console で Cloud Shell を開きます。

    Cloud Shell を開く

    Google Cloud コンソールの下部に Cloud Shell が開きます。セッションが初期化されるまで数秒かかることがあります。

  2. プロジェクト ID のローカル bash 変数を作成します。

    export PROJECT_ID=[PROJECT_ID]
    

    ここで、PROJECT_ID は、現在のプロジェクトのプロジェクト ID です。この値は Cloud Shell のすべての新しい行に表示されます。

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. 次の bash スクリプトを実行します。このスクリプトにより、デモのウェブ アプリケーション インスタンスの負荷が増加し、CPU 使用率が増加します。数分後、CPU 使用率がターゲット値を上回り、自動スケーリングはインスタンス グループのサイズを増やすように促されます。

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating high load for instance $NAME"
      curl -q -s "http://$IP/startLoad" >/dev/null --retry 2
    done
    
  4. Google Cloud コンソールで [モニタリング] タブを開きます。

    数分後、[Monitoring] タブに CPU 使用率の増加が表示され、インスタンスの数を増やすことで容量を増やすように自動スケーリングがトリガーされます。

    また、[概要] タブに 6 つのインスタンスが表示されるようになったこともわかります。

両方のウィンドウを開いたままにします。

スケールインのシミュレーション

スケールインは、インスタンス グループの平均 CPU 使用率がターゲット値より大幅に低い場合に発生します。スケールインの際、オートスケーラーは、CPU 使用率が CPU 使用率の目標値まで増加するか、インスタンス グループ サイズがインスタンスの最小数3 に設定しました)に等しくなるまで、インスタンス グループのサイズを徐々に減らします。

スケールインをトリガーするには、インスタンスの CPU 使用率を減らします。

  1. 次の bash スクリプトを実行します。このスクリプトにより、デモのウェブ アプリケーション インスタンスの負荷が減少し、CPU 使用率が減少します。数分後、CPU 使用率がターゲット値を下回り、オートスケーラーはインスタンス グループサイズを減らすように促されます。

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating low load for instance $NAME"
      curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2
    done
    
  2. Google Cloud コンソールで [モニタリング] タブを開きます。

    数分後、[Monitoring] タブに CPU 使用率の減少が表示されます。安定化期間後、負荷が一貫して少ないことを確認するため、自動スケーリングは減少します。容量次の数を減らしてインスタンス

    また、[概要] タブに 3 つのインスタンスのみが表示されていることもわかります。

終了したら、両方のウィンドウを閉じます。

クリーンアップ

チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。

このチュートリアル用に別個のプロジェクトを作成した場合は、プロジェクトごと削除します。それ以外の場合は、プロジェクトに保持したいリソースがあれば、このチュートリアルで作成した特定のリソースのみを削除します。

プロジェクトを削除する

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

特定のリソースを削除する

インスタンス グループを削除する

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. autoscaling-web-app-group インスタンス グループのチェックボックスを選択します。
  3. インスタンス グループを削除するには、[削除] をクリックします。

インスタンス テンプレートを削除する

  1. Google Cloud Console で、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. autoscaling-web-app-template の横にあるチェックボックスをオンにします。

  3. ページの上部にある [削除] をクリックします。表示された新しいウィンドウで、[削除] をクリックして削除を確定します。

ファイアウォール ルールを削除する

  1. Google Cloud Console で [ファイアウォール ルール] ページに移動します。

    [ファイアウォール ルール] に移動

  2. default-allow-http という名前のファイアウォール ルールの横にあるチェックボックスをオンにします。

  3. ページの上部にある [削除] をクリックします。表示された新しいウィンドウで、[削除] をクリックして削除を確定します。

次のステップ