このチュートリアルでは、自動スケーリングを使用して、アプリケーションをホストしている VM インスタンスの数を自動的に調整し、アプリケーションがさまざまな量のトラフィックに適応できるようにする方法について説明します。
自動スケーリングを使用するには、マネージド インスタンス グループでアプリケーションをホストします。マネージド インスタンス グループとは、すべてが同じアプリケーションを実行し、単一のエンティティとして管理できる、インスタンスの集まりです。マネージド インスタンス グループで自動スケーリングが有効になっている場合、インスタンス グループ内の VM の数は、自動スケーリング ポリシーに指定したターゲット値に従って自動的に増加(スケールアウト)または減少(スケールイン)します。
このチュートリアルでは、マネージド インスタンス グループでウェブ アプリケーションを起動する手順、自動スケーリングを設定する手順、ネットワーク アクセスを構成する手順、負荷の急激な上昇や下落をシミュレートして自動スケーリングを観察する手順の詳細を示します。このような機能の使用経験にもよりますが、このチュートリアルは約 20 分で完了します。
アプリケーション アーキテクチャ
アプリケーションには、次の Compute Engine コンポーネントが含まれています。
- ファイアウォール ルール: Google Cloudファイアウォールにより、インスタンスへのトラフィックを許可または拒否できます。
- インスタンス テンプレート: マネージド インスタンス グループに個々の VM インスタンスを作成するために使用されるテンプレート。
- リージョン マネージド インスタンス グループ: 複数のゾーンで同じアプリケーションを実行する VM インスタンスのグループ。
ウェブ アプリケーションの起動
このチュートリアルでは、GitHub に保存されているウェブ アプリケーションを使用します。アプリケーションの実装方法の詳細については、GoogleCloudPlatform/python-docs-samples GitHub リポジトリをご覧ください。
インスタンス テンプレートに起動スクリプトを含めることで、マネージド インスタンス グループ内のすべての VM でウェブ アプリケーションを起動します。ウェブ アプリケーションへの HTTP トラフィックを許可するには、ファイアウォール ルールを作成します。
ファイアウォール ルールを作成する
ウェブ アプリケーションへの HTTP トラフィックを許可するファイアウォール ルールを作成します。
Google Cloud コンソールで、[ファイアウォール] ページに移動します。
[ファイアウォール ルールを作成] をクリックします。
[名前] に「
default-allow-http
」と入力します。[ネットワーク] を
default
に設定します。[ターゲット] を
Specified target tags
に設定します。[ターゲットタグ] に「
http-server
」と入力します。[ソースフィルタ] を
IPv4 ranges
(IP 範囲)に設定します。[送信元 IPv4 範囲] に「
0.0.0.0/0
」と入力します。すべての IP アドレスに対しアクセスを許可します。
[プロトコルとポート] で [指定したプロトコルとポート] をオンにします。 次に、[TCP] を選択し、「
80
」と入力して HTTP トラフィックのアクセスを許可します。[作成] をクリックします。
インスタンス テンプレートの作成
起動時にデモのウェブ アプリケーションを起動するインスタンス テンプレートを作成します。
Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。
[インスタンス テンプレートを作成] をクリックします。
[名前] に「
autoscaling-web-app-template
」と入力します。[マシンの構成] で、[マシンタイプ] を
e2-standard-2
に設定します。[ファイアウォール] で、[HTTP トラフィックを許可する] チェックボックスをオンにします。これにより、このテンプレートから作成された各インスタンスに
http-server
ネットワーキング タグが適用されます。[詳細オプション] セクションを開き、詳細設定を確認します。
[管理] セクションを開きます。
[自動化] セクションで、次の起動スクリプトを入力します。
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
このスクリプトにより、起動時に各 VM でウェブ アプリケーションが実行されます。
[作成] をクリックします。
マネージド インスタンス グループの作成
リージョン インスタンス グループを作成して、ウェブ アプリケーションの実行を開始します。
Google Cloud コンソールで、[インスタンス グループ] ページに移動します。
[インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。
[新しいマネージド インスタンス グループ(ステートレス)] を選択します。
[名前] に「
autoscaling-web-app-group
」と入力します。[インスタンス テンプレート] で [
autoscaling-web-app-template
] を選択します。[ロケーション] で [複数のゾーン] を選択します。
[リージョン] で、[us-central1] を選択します。
[ゾーン] で、プルダウン リストから次のゾーンを選択します。
- us-central1-b
- us-central1-c
- us-central1-f
インスタンス グループの自動スケーリングを構成します。
- [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。
[インスタンスの最小数] を
3
に設定します。[インスタンスの最大数] を
6
に設定します。[初期化期間] を
120
秒に設定します。[自動スケーリング指標] で、指標タイプとして [CPU 使用率] を選択します。自動スケーリング指標の詳細については、自動スケーリング ポリシーをご覧ください。
[CPU 使用率の目標値] を
60
に設定します。[完了] をクリックします。
[自動修復] で、[ヘルスチェック] プルダウン リストから [ヘルスチェックをしない] を選択します。
[作成] をクリックします。[インスタンス グループ] ページにリダイレクトされます。
インスタンスが実行されていることを確認します。
- Google Cloud コンソールの [インスタンス グループ] ページで、
autoscaling-web-app-group
をクリックしてグループ内のインスタンスを表示します。 [外部 IP] で IP アドレスをクリックして、そのインスタンスを接続します。新しいブラウザタブが開き、デモウェブ アプリケーションが表示されます。
確認が終わったら、デモウェブ アプリケーションのブラウザタブを閉じます。
- Google Cloud コンソールの [インスタンス グループ] ページで、
自動スケーリングの観察
自動スケーリングの動作の詳細については、自動スケーリングの判断についてをご覧ください。
自動スケーリングのモニタリング
作成したインスタンス グループは、CPU 使用率に基づいた自動スケーリング ポリシーを使用します。つまり、オートスケーラーが必要に応じてグループを拡大または縮小して、ターゲット CPU 使用率を 60
% に維持します。
インスタンス グループのサイズと CPU 使用率をモニタリングするには、 Google Cloud コンソールの自動スケーリング グラフを使用します。
autoscaling-web-app-group
インスタンス グループの [インスタンス グループ] ページで、[モニタリング] タブをクリックします。- [グループサイズ] のグラフで自動スケーリングをモニタリングできます。グラフの [インスタンス] に、グループ内の VM インスタンスの数の推移が表示されます。
省略可: 自動スケーリングされた容量と使用率をモニタリングするには、[オートスケーラーの使用率(CPU)] のグラフを確認します。グラフには、グループ内の VM インスタンスの合計 CPU 使用率である使用率と、累積ターゲット CPU 使用率(ターゲット CPU 使用率に VM インスタンス数を掛けた値)を表す容量が表示されます。
自動スケーリングは、可能な場合にインスタンスの数を変更することで、容量を使用率に一致させようとします。
このウィンドウは閉じないでください。
スケールアウトのシミュレーション
スケールアウトは、インスタンス グループの平均 CPU 使用率がターゲット値より大幅に高い場合に発生します。スケールアウトの際、オートスケーラーは、CPU 使用率がターゲット CPU 使用率の値まで減少するか、インスタンス グループ サイズがインスタンスの最大数(6
に設定しました)に等しくなるまで、インスタンス グループのサイズを徐々に増やします。
スケールアウトをトリガーするには、インスタンスの CPU 使用率を増やします。
Google Cloud コンソールで Cloud Shell を開きます。
Google Cloud コンソールの下部に Cloud Shell が開きます。セッションが初期化されるまで数秒かかることがあります。
プロジェクト ID のローカル bash 変数を作成します。
export PROJECT_ID=[PROJECT_ID]
ここで、
PROJECT_ID
は、現在のプロジェクトのプロジェクト ID です。この値は Cloud Shell のすべての新しい行に表示されます。user@cloudshell:~ ([PROJECT_ID])$
次の 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
Google Cloud コンソールで [モニタリング] タブを開きます。
数分後、[モニタリング] タブに CPU 使用率の増加が表示され、インスタンスの数を増やすことで容量を増やすように自動スケーリングがトリガーされます。
また、[概要] タブに 6 つのインスタンスが表示されるようになったこともわかります。
両方のウィンドウを開いたままにします。
スケールインのシミュレーション
スケールインは、インスタンス グループの平均 CPU 使用率がターゲット値より大幅に低い場合に発生します。スケールインの際、オートスケーラーは、CPU 使用率がターゲット CPU 使用率まで増加するか、インスタンス グループ サイズがインスタンスの最小数(3
に設定しました)に等しくなるまで、インスタンス グループのサイズを徐々に減らします。
スケールインをトリガーするには、インスタンスの CPU 使用率を減らします。
次の 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
Google Cloud コンソールで [モニタリング] タブを開きます。
数分後、[モニタリング] タブに CPU 使用率の減少が表示されます。安定化期間後、負荷が一貫して少ないことを確認するため、自動スケーリングは減少します。容量次の数を減らしてインスタンス。
また、[概要] タブに 3 つのインスタンスのみが表示されていることもわかります。
終了したら、両方のウィンドウを閉じます。