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

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

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

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

目標

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

料金

このチュートリアルでは、以下の GCP の課金対象となるコンポーネントを使用しています。

  • Compute Engine

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。 GCP を初めて使用する場合は、無料トライアルをご利用いただけます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Platform プロジェクトを選択または作成します。

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

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

    課金を有効にする方法について

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

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

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

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

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

ファイアウォール ルールの作成

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

  1. GCP 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. GCP Console の [インスタンス テンプレート] ページに移動します。
    [インスタンス テンプレート] ページに移動
  2. [インスタンス テンプレートを作成] をクリックします。
  3. [名前] に「autoscaling-web-app-template」と入力します。
  4. [マシンの構成] で、[マシンタイプ] を [n1-standard-1] に設定します。
  5. [ブートディスク] で、[イメージ] を Debian GNU/Linux 9 (stretch) に設定します。
  6. [ファイアウォール] で、[HTTP トラフィックを許可する] チェックボックスをオンにします。これにより、このテンプレートから作成された各インスタンスに http-server ネットワーキング タグが適用されます。
  7. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、詳細設定を表示します。いくつかのタブが表示されます。
  8. [管理] タブで、[自動化] を見つけて、[起動スクリプト] に次の内容を入力します。

    sudo apt-get update && sudo apt-get install git gunicorn3 python3-pip -y
    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
    

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

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

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

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

  1. GCP Console の [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。
  3. [名前] に「autoscaling-web-app-group」と入力します。
  4. [ロケーション] で、[複数のゾーン] を選択します。

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

  6. [ゾーンを設定] プルダウン メニューをクリックして、[ゾーン] を表示します。次のゾーンを選択します。

    • us-central1-b
    • us-central1-c
    • us-central1-f
  7. [インスタンス テンプレート] で [autoscaling-web-app-template] を選択します。

  8. インスタンス グループの自動スケーリングを構成します。

    1. [自動スケーリング] で [オン] を選択します。
    2. [自動スケーリング ポリシー] を [CPU 使用率] に設定します。他の自動スケーリング ポリシーの詳細については、自動的スケーリングのポリシーと目標使用率をご覧ください。

    3. [ターゲットの CPU 使用率] を「60」% に設定します。

    4. [インスタンスの最小数] を「3」に設定します。

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

    6. [クールダウン期間] を「120」秒に設定します。

  9. [ヘルスチェック] で [ヘルスチェックをしない] を選択します。

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

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

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

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

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

自動スケーリングの観察

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

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

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

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

  1. autoscaling-web-app-group インスタンス グループの [インスタンス グループ] ページで、[モニタリング] タブをクリックします。
  2. CPU 使用率と自動スケーリングをモニタリングするには、左側のプルダウン メニューから [自動スケーリングされたサイズ] を選択し、右側のプルダウン メニューから [cpu] を選択します。

    これにより、グラフが 2 つ表示されます。

    • 上部のグラフには、インスタンス グループ内のインスタンスの数であるサイズが表示されます。
    • 下部のグラフには、インスタンス グループの平均 CPU 使用率である使用率と、インスタンス グループの累積ターゲット CPU 使用率である容量が表示されます。

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

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

スケールアップのシミュレーション(スケールアウト)

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

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

  1. GCP Console から Cloud Shell を使用してターミナルを開きます。

    Cloud Shell を開く

    GCP Console の下部に 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. GCP Console で [モニタリング] タブを開きます。

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

    モニタリングにより、CPU 使用率の増加が示されています。すぐに、グループのサイズが 3 インスタンスから 6 インスタンスに増加します

    また、[メンバー] タブに 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. GCP Console で [モニタリング] タブを開きます。

    数分後、[モニタリング] タブに CPU 使用率の減少が表示されます。負荷が一貫して少ないことを確認する 10 分間の安定化期間の後、インスタンス グループのサイズを減らすことで容量を減らすように自動スケーリングがトリガーされます。

    モニタリングにより、CPU 使用率の減少が示されています。約 10 分後、グループのサイズが 6 インスタンスから 3 インスタンスに減少します。

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

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

クリーンアップ

自動スケーリングのチュートリアルが終了したら、GCP で作成したリソースをクリーンアップして、今後料金が発生しないようにします。次のセクションで、リソースを削除または無効にする方法を説明します。

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

プロジェクトを削除する

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

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

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

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

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

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

  2. 次のチェックボックスをオンにします。 autoscaling-web-app-groupインスタンス グループ。
  3. インスタンス グループを削除するには、ページの上部にある [削除]()をクリックします。

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

  1. GCP Console の [インスタンス テンプレート] ページに移動します。

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

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

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

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

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

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

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

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント