チェックポイント
Create a GCS bucket
/ 25
Create an instance template
/ 25
Create an instance group
/ 25
Configure autoscaling for the instance group
/ 25
Cloud Monitoring のカスタム指標を使用したインスタンス グループの自動スケーリング
GSP087
概要
このラボでは、Cloud Monitoring のカスタム指標の値に基づいて自動スケーリングする、Compute Engine マネージド インスタンス グループを作成します。
アプリケーション アーキテクチャ
自動スケーリング アプリケーションでは、Compute Engine インスタンスにインストールされた Node.js スクリプトが使用されます。このスクリプトを実行すると、Cloud Monitoring 指標に数値を報告できます。このラボでは、Node.js や JavaScript に関する知識は必要ありません。アプリケーションでは、指標の値に基づき必要に応じて、Compute Engine インスタンス グループの自動スケールアップや自動スケールダウンが行われます。
Node.js スクリプトを使用してカスタム指標に値が提供され、その値に応じてインスタンス グループが動作します。本番環境では、実際のユースケースに関連する指標に基づいて自動スケーリングを行うことになります。
このアプリケーションは、次のコンポーネントで構成されています。
- Compute Engine インスタンス テンプレート - インスタンス グループ内の各インスタンスの作成に使用されるテンプレート。
- Cloud Storage - 起動スクリプトなどのスクリプト ファイルをホストするために使用されるバケット。
- Compute Engine 起動スクリプト - 各インスタンスに必要なコード コンポーネントをインストールする起動スクリプト。起動スクリプトは、インスタンスの起動時に自動的にインストールされ開始されます。起動スクリプトが実行されると、Cloud Monitoring カスタム指標に値を書き込むコードがインスタンスにインストールされ開始されます。
- Compute Engine インスタンス グループ - Cloud Monitoring の指標の値に基づいて自動スケーリングを行うインスタンス グループ。
- Compute Engine インスタンス - 状況に応じて数が変わる Compute Engine インスタンス。
- Cloud Monitoring カスタム指標 - Compute Engine インスタンス グループの自動スケーリングの入力値として使用されるカスタム モニタリング指標。
目標
このラボでは、次のタスクを行う方法を学びます。
- 自動スケーリングの Compute Engine インスタンス グループをデプロイします。
- インスタンス グループのスケーリングに使用するカスタム指標を作成します。
- Cloud コンソールを使用して、カスタム指標とインスタンス グループのサイズを可視化します。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. アプリケーションの作成
自動スケーリング アプリケーションを作成するには、必要なコード コンポーネントをダウンロードし、マネージド インスタンス グループを作成して、マネージド インスタンス グループの自動スケーリングを設定する必要があります。
Cloud Storage にスクリプト ファイルをアップロードする
自動スケーリング(スケールアップ)時、インスタンス グループでは、新しい Compute Engine インスタンスを作成する必要があります。その際、インスタンスはインスタンス テンプレートに基づいて作成されます。各インスタンスには起動スクリプトが必要です。そのため、テンプレートには起動スクリプトを参照する方法が必要です。Compute Engine では、起動スクリプトのソースとして Cloud Storage バケットを使用できます。このセクションでは、このラボで使用するサンプル アプリケーションの起動スクリプトとアプリケーション ファイルのコピーを作成します。サンプル アプリケーションは、自動スケーリング グループの自動スケーリング動作を制御する指標として設定するために使用できる Cloud Logging のカスタム指標に一定パターンのデータをプッシュします。
タスク 2. バケットの作成
-
Cloud コンソールで、ナビゲーション メニューの [Cloud Storage] > [バケット] を選択し、[作成] をクリックします。
-
一意の名前をバケットに指定します。別のプロジェクトで使用する可能性がある名前は指定しないでください。バケットの命名方法の詳細については、バケットとオブジェクトの命名ガイドラインをご覧ください。バケットにはプロジェクト ID を使用できます。このバケットは、ラボ全体で
YOUR_BUCKET
と表記されます。 -
デフォルト値をそのまま使用して、[作成] をクリックします。
プロンプトが表示されたら、Public access will be prevented
と表示されるポップアップで [確認] をクリックします。
バケットが作成されると、[バケットの詳細] ページが開きます。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Cloud Storage バケットが正常に作成されている場合は、評価スコアが表示されます。
- 次に、Cloud Shell で以下のコマンドを実行して、ラボのデフォルトの Cloud Storage バケットから自分の Cloud Storage バケットに起動スクリプト ファイルをコピーします。
<YOUR BUCKET>
は、先ほど作成したバケットの名前に置き換えます。
- スクリプトをアップロードしたら、[バケットの詳細] ページで [更新] をクリックします。追加したファイルがバケットに表示されます。
コード コンポーネントについて
-
Startup.sh
- Compute Engine インスタンスをマネージド インスタンス グループに追加する際に、必要なコンポーネントを各インスタンスにインストールするシェル スクリプト。 -
writeToCustomMetric.js
- スケーリングのトリガーとなる値を持つカスタム モニタリング指標を生成する Node.js スニペット。現実の指標値をエミュレートするために、このスクリプトは時間とともに変化する値を生成します。本番環境にデプロイするときは、このスクリプトをカスタムコードに置き換えて、必要なモニタリング指標(処理キューの値など)が報告されるようにします。 -
Config.json
- カスタム モニタリング指標の値を指定する Node.js 構成ファイル。writeToCustomMetric.js
で使用されます。 -
Package.json
-writeToCustomMetric.js
の標準インストールや依存関係を指定する Node.js パッケージ ファイル。 -
writeToCustomMetric.sh
-writeToCustomMetric.js
プログラムを各 Compute Engine インスタンス上で継続的に実行するシェル スクリプト。
タスク 3. インスタンス テンプレートを作成する
次に、自動スケーリングを使用するインスタンス グループで作成されるインスタンスのテンプレートを作成します。テンプレートの一部として、インスタンスの起動時に実行する起動スクリプトの場所(Cloud Storage 内)を指定します。
-
Cloud コンソールで、ナビゲーション メニュー > [Compute Engine] > [インスタンス テンプレート] をクリックします。
-
ページの上部にある [インスタンス テンプレートを作成] をクリックします。
-
インスタンス テンプレートに
autoscaling-instance01
という名前を付けます。 -
下にスクロールし、[詳細オプション] をクリックします。
-
[管理] タブの [メタデータ] セクションで、メタデータのキーと値を入力し、[+ 項目を追加] ボタンをクリックして各項目を追加します。必ず、
[YOUR_BUCKET_NAME]
プレースホルダを目的のバケット名に置き換えてください。
キー | 値 |
---|---|
startup-script-url | gs://[YOUR_BUCKET_NAME]/startup.sh |
gcs-bucket | gs://[YOUR_BUCKET_NAME] |
- [作成] をクリックします。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。インスタンス テンプレートが正常に作成された場合は、評価スコアが表示されます。
タスク 4. インスタンス グループを作成する
-
左側のペインで [インスタンス グループ] をクリックします。
-
ページ上部にある [インスタンス グループの作成] をクリックします。
-
名前は
autoscaling-instance-group-1
にします。 -
[インスタンス テンプレート] には、作成したインスタンス テンプレートを選択します。
-
[ロケーション] には [シングルゾーン] を選択し、リージョンとゾーンにはそれぞれ
と を使用します。 -
[自動スケーリング モード] を [オフ: 自動スケーリングを行いません] に設定します。
自動スケーリングの設定は、インスタンス グループが作成された後に編集します。他の設定はデフォルト値のままにします。
- [作成] をクリックします。
自動スケーリングはオフになっています。グループ内のインスタンスの数は自動的に変更されません。自動スケーリングの構成が維持されます。
」という警告は無視してかまいません。完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。インスタンス グループが正常に作成された場合は、評価スコアが表示されます。
タスク 5. インスタンス グループが作成されたことを確認する
作成した新しいインスタンス グループの横に緑色のチェックマークが表示されるまで待ちます。起動スクリプトのインストールが完了して値の報告が開始されるまで、数分かかる場合があります。時間がかかりすぎていると思われる場合は、[更新] をクリックしてください。
タスク 6. Node.js スクリプトが実行されていることを確認する
グループ内の最初のインスタンスが作成され、そのインスタンスがカスタム指標値の報告を開始するまで、カスタム指標 custom.googleapis.com/appdemo_queue_depth_01
は作成されません。
インスタンス グループの最初のインスタンスで writeToCustomMetric.js
スクリプトが実行されていることを確認するには、そのインスタンスがカスタム指標値を記録しているかどうかをチェックします。
-
引き続き Compute Engine の [インスタンス グループ] ウィンドウで、
autoscaling-instance-group-1
の名前をクリックして、グループで実行されているインスタンスを表示します。 -
下にスクロールし、インスタンス名をクリックします。自動スケーリングによるインスタンスの追加は開始されていないため、実行されているインスタンスは 1 つだけです。
-
[詳細] タブの [ログ] セクションで、[ロギング] のリンクをクリックして、VM インスタンスのログを表示します。
-
一定のデータが収集されるまで数分待ちます。[クエリを表示] を有効に切り替えると、[クエリ] プレビュー ボックスに
resource.type
とresource.labels.instance_id
が表示されます。
- 3 行目に
"nodeapp"
を追加します。次のようなコードになります。
- [クエリを実行] をクリックします。
Node.js
スクリプトが Compute Engine インスタンスで実行されている場合は、API にリクエストが送信され、nodeapp: available
というログエントリが表示されます。
タスク 7. インスタンス グループの自動スケーリングを構成する
カスタム指標が最初のインスタンスからデータを正常に報告していることを確認した後、カスタム指標の値に基づいて自動スケーリングを行うようにインスタンス グループを構成できます。
-
Cloud コンソールで、[Compute Engine] > [インスタンス グループ] に移動します。
-
autoscaling-instance-group-1
グループをクリックします。 -
[編集] をクリックします。
-
[自動スケーリング] の [自動スケーリング モード] を、[オン: グループに対してインスタンスを追加および削除します] に設定します。
-
[インスタンスの最小数] を
1
に、[インスタンスの最大数] を3
に設定します。 -
[自動スケーリング シグナル] で [シグナルを追加] をクリックし、指標を編集します。以下のフィールドを設定します。その他のフィールドはデフォルト値のままにします。
- [シグナルタイプ] は
Cloud Monitoring metric new
にします。[構成] をクリックします。 - [リソースと指標] で [指標を選択] をクリックし、[VM インスタンス] > [カスタム指標] > [Custom/appdemo_queue_depth_01] に移動します。
- [適用] をクリックします。
- [使用率のターゲット] は
150
にします。
カスタム モニタリング指標値が [ターゲット] の値と異なる場合は、オートスケーラーによってマネージド インスタンス グループがスケーリングされ、インスタンス数が増減されます。ターゲット値には任意の double 値を指定できますが、このラボでは、カスタム モニタリング指標によって報告される値と一致する値である 150 を使用しています。
- [使用率のターゲットのタイプ] は
ゲージ
にします。[選択] をクリックします。
[ゲージ] を設定することで、過去数分間に収集されたデータの平均値を計算してターゲット値と比較することを指定します(これに対し、[ターゲット モード] を [DELTA_PER_MINUTE] または [DELTA_PER_SECOND] に設定すると、平均値ではなく、観測された変化率に基づいて自動スケーリングが行われます)。
- [シグナルタイプ] は
-
[保存] をクリックします。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。インスタンス グループの自動スケーリングが正常に設定された場合は、評価スコアが表示されます。
タスク 8. インスタンス グループが自動スケーリングを行っていることを監視する
Node.js スクリプトは、各インスタンスから報告するカスタム指標値を時間の経過とともに変更します。指標の値が上がると、インスタンス グループは Compute Engine インスタンスを追加することによってスケールアップします。値が下がると、インスタンス グループはこれを検出し、インスタンスを削除してスケールダウンします(前述のように、スクリプトは値が同様に上下に変動する実際の指標をエミュレートします)。
次に、[モニタリング] タブをクリックして [自動スケーリングされたサイズ] グラフを表示して、指標に応じてどのようにインスタンス グループがスケーリングしているかを確認します。
- 左側のペインで [インスタンス グループ] をクリックします。
- リストで
builtin-igm
インスタンス グループをクリックします。 - [モニタリング] タブをクリックします。
- [自動更新] を有効にします。
このグループは先行して開始されているため、自動スケーリング グラフでインスタンス グループに関する自動スケーリングの詳細を確認できます。オートスケーラーがカスタム指標を正しく認識するまで約 5 分かかり、自動スケーリングの動作をトリガーするのに十分なデータをスクリプトが生成するまで最大 10~15 分かかることがあります。
グラフにカーソルを合わせると、詳細が表示されます。
作成したインスタンス グループに戻ると、その動作を確認できます(インスタンス グループの自動スケーリングを確認するには、ラボの時間が十分に残っていない場合があります)。
ラボの時間が残っていれば、インスタンスの追加および削除に合わせて自動スケーリングのグラフが上下していることを確認してください。
タスク 9. 自動スケーリングの例
この自動スケーリングの例を読み、自動スケーリングされたインスタンスの容量と数が大規模な環境ではどのように動作するかを確認します。
上のグラフに示されるインスタンス数は、下のグラフに報告されるカスタム指標プロパティ値の集計レベルの変動に応じて変化します。各インスタンスが起動してからそのカスタム指標値の報告を開始するまで、最大 5 分という若干の遅れがあります。作成したインスタンス グループで自動スケーリングが開始されるまでの間、このグラフで、何が起こるのかを確認しておきましょう。
このスクリプトは、スケールアップ動作をトリガーするために、最初は約 15 分間高い値を生成します。
- 11:27 自動スケーリング グループが 1 つのインスタンスで始まります。カスタム指標の集計ターゲットは 150 です。
- 11:31 最初の指標データが取得されます。指標がターゲットの 150 よりも大きいため、自動スケーリング グループは 2 番目のインスタンスを起動します。
- 11:33 2 番目のインスタンスからのカスタム指標データの取得が開始されます。現在の集計ターゲットは 300 です。指標値は 300 を上回っているため、自動スケーリング グループは 3 番目のインスタンスを起動します。
- 11:37 3 番目のインスタンスからのカスタム指標データの取得が開始されます。現在の集計ターゲットは 450 です。累積の指標値は 450 を上回っているため、自動スケーリング グループは 4 番目のインスタンスを起動します。
- 11:42 4 番目のインスタンスからのカスタム指標データの取得が開始されます。現在の集計ターゲットは 600 です。現在、累積の指標値は新しいターゲット レベルの 600 を超えていますが、自動スケーリング グループのサイズ制限に達しているため、スケールアップ操作はこれ以上行われません。
- 11:44 アプリケーション スクリプトは低い指標値の生成期間(15 分間)に移ります。累積の指標値がターゲットの 600 を下回っていても、組み込みのスケールダウン遅延(10 分間)が経過するまで、スケールダウンによる変更は行われません。
- 11:54 この時点で、カスタム指標データは、4 ノードクラスタの集計ターゲット レベルである 600 を 10 分以上下回っています。スケールダウンにより、2 つのインスタンスがすぐに削除されます。
- 11:56 削除されたノードのカスタム指標データが自動スケーリングの計算から除外され、集計ターゲットが 300 に低下します。
- 12:00 アプリケーション スクリプトは高い指標値の生成期間(15 分)に戻ります。累積のカスタム指標値は集計ターゲット レベルの 300 を再び超えているため、自動スケーリング グループは 3 番目のインスタンスを起動します。
- 12:03 新しいインスタンスからカスタム指標データが取得されます。ただし、報告された累積値はターゲットの 450 を下回っているため、自動スケーリングによる変更は行われません。
- 12:04 累積のカスタム指標値がターゲットの 450 を超えているため、自動スケーリングによって 4 番目のインスタンスが起動します。
お疲れさまでした
これで完了です。このラボでは、Cloud Monitoring のカスタム指標の値に基づいて自動スケーリングする、Compute Engine マネージド インスタンス グループを作成しました。また、Cloud コンソールを使用してカスタム指標とインスタンス グループのサイズを可視化する方法も学びました。
次のステップと詳細情報
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 2 月 7 日
ラボの最終テスト日: 2024 年 2 月 7 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。