.NET を使用した Compute Engine でのスケーリング

このチュートリアルでは、.NET の Bookshelf アプリにスケーリング機能を追加する方法を説明します。

このページは複数ページからなるチュートリアルの一部です。最初からの説明や設定手順を確認するには、.NET Bookshelf アプリに移動してください。

このチュートリアルの他のセクションで、単一の Compute Engine VM インスタンスを使用して、Google Cloud Platform(GCP)上でアプリを起動して実行する方法を説明しました。このアプローチは小規模なアプリ向けです。一方、昼間に毎秒 1,000 件のクエリを処理し、真夜中には毎秒 10 件のクエリのみを処理するような大規模なアプリについてはどうなるでしょうか。Compute Engine ではこのようなシナリオに対処するために、インスタンス グループを使用して、アプリを実行するインスタンスの数を自動的にスケーリングします。

複数のインスタンスを使用して水平スケーリングを行う

次の図は、複数のインスタンスのデプロイが Compute Engine でインスタンス グループにまとめられる仕組みを示しています。

インスタンス グループによる複数インスタンスのデプロイ

このセクションでは、インスタンス グループを使用して自動スケーリングとロードバランサを構成した GCP に Bookshelf アプリをデプロイします。このチュートリアルのステップはオプションであり、GCP で利用可能なデプロイ オプションを検討するためのものです。具体的には、このチュートリアルのステップで次の方法を説明します。

  • Compute Engine のインスタンス グループを使用してアプリの水平スケーリングを行う方法
  • Compute Engine HTTP(S) ロードバランサを使用してトラフィックを処理する方法
  • Compute Engine オートスケーラーを使用してトラフィックの変化に対応する方法

インスタンス グループ作成の概要

インスタンス グループとは、同じインスタンス テンプレートに基づく同種のインスタンスからなるグループのことです。インスタンス テンプレートは、ソースイメージ、ディスクサイズ、スコープ、メタデータ(スタートアップ スクリプトを含む)などのインスタンスの構成を定義します。

インスタンス テンプレートを使用したインスタンス グループの作成

インスタンス グループを作成するには、その前にテンプレートを作成してください。インスタンス グループではこのテンプレートを使用して新しいインスタンスを作成します。

インスタンス グループのテンプレートを作成する

実行中の Compute Engine インスタンスから VM イメージを作成します。インスタンスに関連付けられているディスクから VM イメージを作成することはできません。したがって、イメージを作成するプロセスとして、まず、ASP.NET アプリを実行している既存のインスタンスのスナップショットを生成します。このスナップショットを使用して、VM イメージ生成専用の VM インスタンスを新しく作成します。

  1. Google Cloud Platform Console で、ASP.NET アプリをデプロイしたプロジェクトの [スナップショット] ページに移動します。

    [スナップショット] に移動

  2. [スナップショットを作成] をクリックします。

  3. [名前] にスナップショットの名前を入力します。

  4. [ソースディスク] プルダウン リストから、ASP.NET VM インスタンスに関連付けられている永続ディスクを選択します。

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

    スナップショット作成フォーム

VM イメージ生成用のインスタンスと永続ディスクを作成する

  1. GCP Console で、スナップショットを作成したプロジェクトの [インスタンス] ページに移動します。

    [インスタンス] に移動

  2. [インスタンスを作成] をクリックします。

  3. [名前] に VM インスタンスの名前を入力します。

  4. [ブートディスク] セクションで、次の操作を行います。

    1. [変更] をクリックします。
    2. [スナップショット] タブで、作成したスナップショットの名前をクリックし、[選択] をクリックします。
  5. [各 API にアクセス権を設定] をクリックします。

  6. [Cloud Datastore] プルダウン リストから、[有効] を選択します。

  7. [ストレージ] プルダウン リストから、[読み取り / 書き込み] を選択します。

  8. [ユーザー情報] プルダウン リストから、[有効] を選択します。

  9. [ファイアウォール] セクションで、[HTTP トラフィックを許可する] と [HTTPS トラフィックを許可する] の 2 つのチェックボックスをオンにします。

  10. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックし、[ディスク] タブをクリックします。

  11. [削除ルール] の設定で、[インスタンスを削除する際にブートディスクを削除する] チェックボックスをオフにします。

  12. ページの下部にある [作成] をクリックしてインスタンスを作成します。

    VM インスタンス作成フォーム

VM イメージ作成用の永続ディスクを準備する

上の手順で作成した VM インスタンスと永続ディスクから VM イメージを作成するには、まず、イメージ作成用のインスタンスの永続ディスクを準備する必要があります。

  1. GCP Console で、VM インスタンスを作成したプロジェクトの [インスタンス] ページに移動します。

    [インスタンス] に移動

  2. 新しく作成した VM インスタンスの名前をクリックします。

  3. [インスタンスの詳細] ウィンドウで、[Windows パスワードを設定] をクリックします。

  4. インスタンス上にユーザー アカウントを作成するために、[新しい Windows パスワードの設定] ダイアログでユーザー名を追加し、[設定] をクリックします。

  5. 表示されたパスワードを書き留めてから、ダイアログを閉じます。

  6. 新しく作成した VM インスタンスへのリモート デスクトップ接続を開始するために、作成した VM インスタンスの横にある [RDP] をクリックします。

  7. ユーザー名と提供されたパスワードでログインします。

  8. RDP を使用してインスタンスに接続されたら、[PowerShell] アイコンを右クリックし、[管理者として実行] を選択します。このオプションが表示されない場合は、VM のログイン処理が完了するまでしばらく待ってから、再び試します。

    管理者として Powershell を開く

  9. [ユーザー アカウント制御] ダイアログ ウィンドウが表示され、PowerShell がパソコンに変更を加えることを許可するかどうか尋ねられます。[はい] をクリックします。

  10. イメージ作成用に VM の永続ディスクを準備するために、PowerShell ウィンドウで次のコマンドを実行します。このコマンドを実行すると、リモート デスクトップ接続が解除され、インスタンスがシャットダウンします。

    GCESysprep
    
  11. RDP ウィンドウを閉じて、[インスタンス] ページに戻ります。

    [インスタンス] に移動

  12. インスタンスを削除するために、シャットダウンしたインスタンスの名前のチェックボックスをオンにしてから、[削除] をクリックします。このオペレーションによって、関連付けが解除された永続ディスクのみが残され、イメージ作成に使用できるようになります。

関連付けが解除された永続ディスクから VM イメージを作成する

  1. GCP Console で [イメージ] ページに移動します。

    [イメージ] に移動

  2. [イメージを作成] をクリックします。

  3. [名前] に VM イメージの名前を入力します。

  4. [ソースディスク] プルダウン リストから、先の手順で作成した関連付け解除済みの永続ディスクを選択します。

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

    VM イメージ作成フォーム

VM イメージを使用してインスタンス グループのテンプレートを作成する

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

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

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

  3. [名前] にインスタンス テンプレートの名前を入力します。

  4. [ブートディスク] セクションで、次の操作を行います。

    1. [変更] をクリックします。
    2. [イメージ] タブで、作成したイメージの名前をクリックし、[選択] をクリックします。
  5. [各 API にアクセス権を設定] をクリックします。

  6. [Cloud Datastore] プルダウン リストから、[有効] を選択します。

  7. [ストレージ] プルダウン リストから、[読み取り / 書き込み] を選択します。

  8. [ユーザー情報] プルダウン リストから、[有効] を選択します。

  9. [ファイアウォール] セクションで、[HTTP トラフィックを許可する] と [HTTPS トラフィックを許可する] の 2 つのチェックボックスをオンにします。

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

    インスタンス テンプレート作成フォーム

インスタンス グループ テンプレートを使用してインスタンス グループを作成する

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

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

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

  3. [名前] にインスタンス グループの名前を入力します。

  4. [作成方法] セクションで、[インスタンス テンプレートを使用] をクリックし、[インスタンス テンプレート] プルダウン リストから、作成したインスタンス テンプレートの名前を選択します。

  5. [自動スケーリング] プルダウン リストから、[オン] を選択します。

  6. [自動スケーリングの基準] プルダウン リストから、[HTTP 負荷分散の使用量] を選択します。

  7. [クールダウン期間] フィールドに「410」秒と入力します。

    この設定値は、新しいインスタンスの起動後、オートスケーラーによる使用率の情報収集が開始されるまでの待ち時間(秒数)です。新しいインスタンスの初期化に要する時間より大きい値を設定してください。アプリのクールダウン期間は、マシンタイプと実行するアプリに多少依存します。カスタム イメージから新しいインスタンスを試しに作成してみることで、クールダウン期間として指定する最適な値を決定できます。

  8. [ヘルスチェック] プルダウン リストから [ヘルスチェックを作成] を選択し、次の操作を行います。

    1. [名前] にヘルスチェックの名前を入力します。
    2. [リクエストパス] フィールドに「/Books」と入力します。これは、ASP.NET Bookshelf サンプルアプリのデフォルトのパスです。
    3. ヘルスチェックの実行頻度を制御するために、[チェック間隔] フィールドに「30」秒と入力します。
    4. ヘルスチェックが失敗したと見なされるまでの待機時間を指定するために、[タイムアウト] フィールドに「10」秒を入力します。
    5. ヘルスチェックを作成するために、[保存] ボタンをクリックします。
  9. [初期遅延] フィールドに「400」秒と入力します。

    この値は、インスタンスの初期化に費やされる時間です。この時間には、インスタンスが最初に起動してから、インスタンスのオペレーティング システムが起動し、さらにアプリの開始に必要なその他のソフトウェアが起動するまでの時間が含まれます。カスタム イメージから新しいインスタンスを試しに作成してみることで、[初期遅延] の時間として指定する最適な値を決定できます。

  10. 他のすべてのフィールドはデフォルト値のままにします。新しいインスタンス グループを作成するために、[保存] をクリックします。

  11. ロードバランサを作成して構成する作業がまだ残っているため、「自動スケーリングの設定が完了していません」というメッセージがダイアログ ボックスに表示されます。この手順は次のセクションで行うため、[OK] をクリックしてインスタンス グループの作成を続行します。

    インスタンス グループ作成フォーム

インスタンス グループの HTTP(S) ロードバランサを作成する

次に、アプリに送信される HTTP リクエストの数に応じて、インスタンス グループ内で実行するインスタンスの数を増減させるために、ロードバランサを作成して構成します。

  1. GCP Console で [負荷分散] ページに移動します。

    [負荷分散] に移動

  2. [ロードバランサを作成] をクリックします。

  3. [HTTP(S) 負荷分散] で [設定を開始] をクリックします。

  4. [名前] にロードバランサの名前を入力します。

  5. [バックエンドの設定] をクリックし、次の操作を行います。

    1. [バックエンド サービスを作成または選択] プルダウン リストから、[バックエンド サービスを作成] を選択します。
    2. [名前] にバックエンド サービスの名前を入力します。
    3. [インスタンス グループ] プルダウン リストから、作成したインスタンス グループを選択します。
    4. [分散モード] プルダウン リストから、[レート] を選択します。
    5. [最大 RPS] プルダウン リストから、[インスタンスにつき毎秒 100 リクエスト] を選択します。
    6. [ヘルスチェック] プルダウン リストから、インスタンス グループの作成時に作成したヘルスチェックを選択します。
    7. [セッション アフィニティ] プルダウン リストから、[生成した Cookie] を選択します。

      この設定により、各アプリ訪問者の Cookie が生成されます。ロードバランサは、この Cookie を含むすべてのリクエストをインスタンス グループ内の同じインスタンスに送信します。この機能は現在、ベータ版でのみ公開されています。詳しくは、セッション アフィニティのドキュメントをご覧ください。

  6. [ホストとパスのルール] をクリックします。デフォルトの設定では、ロードバランサに対するすべてのリクエストが受け入れられて、作成したバックエンドに送信されます。この設定を変更する必要はありません。

  7. [フロントエンドの設定] をクリックします。Bookshelf サンプルアプリを実行するために他に必要な変更はありません。静的 IP アドレスを確保する必要がある場合は、[IP] プルダウン メニューをクリックし、[IP アドレスを作成] を選択して、ロードバランサ用の外部 IP アドレスを作成します。この IP アドレスは変化しません。

  8. ロードバランサの構成を確認するために、[確認と完了] をクリックします。

  9. HTTP(S) ロードバランサを作成するために、[作成] をクリックします。

    ロードバランサ作成の詳細

アプリを表示する

ロードバランサの作成が完了すると、新しく作成されたロードバランサが GCP Console に表示されます。

  1. [負荷分散] ページに移動します。

    [負荷分散] に移動

  2. 構成の詳細を確認するには、ロードバランサの名前をクリックします。

  3. [IP: ポート] 列見出しの [フロントエンド] の詳細に表示されている IP アドレスをコピーします。

  4. コピーした IP アドレスをブラウザで表示します。

これで、GCP 上で実行されるアプリが負荷分散および自動スケーリングされるようになりました。

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

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

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

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

Compute Engine インスタンスの削除

Compute Engine インスタンスを削除する手順は次のとおりです。

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

    [VM インスタンス] ページに移動

  2. 削除するインスタンスの隣のチェックボックスをオンにします。
  3. ページの上部にある、[削除] ボタンをクリックし、インスタンスを削除します。

Cloud SQL インスタンスの削除

Cloud SQL インスタンスを削除する手順は次のとおりです。

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

    [SQL インスタンス] ページに移動

  2. 削除したい SQL インスタンスの名前をクリックします。
  3. ページの上部にある、[削除] ボタンをクリックし、インスタンスを削除します。

Cloud Storage バケットの削除

Cloud Storage バケットを削除する手順は次のとおりです。

  1. GCP Console で、Cloud Storage ブラウザに移動します。

    Cloud Storage ブラウザに移動

  2. 削除したいバケットの隣にあるチェックボックスをクリックします。
  3. ページの上部にある [削除] ボタンをクリックし、バケットを削除します。

SQL Server インスタンスの削除

SQL Server インスタンスを削除するには:

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

    [VM インスタンス] ページに移動

  2. 削除する SQL Server インスタンスの名前の横にあるチェックボックスをオンにします。

  3. ページ上部にある [削除] ボタンをクリックします。

インスタンス グループの削除

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

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

  2. 削除するインスタンス グループの横にあるチェックボックスをクリックします。
  3. ページの上部にある、[削除] ボタンをクリックし、インスタンス グループを削除します。

ロードバランサの削除

ロードバランサを削除するには:

  1. GCP Console で [負荷分散] ページに移動します。

    [負荷分散] ページに移動

  2. 削除するロードバランサの横にある [削除] ボタンをクリックします。

  3. [ロードバランサの削除] ダイアログの [バックエンド サービス] セクションのリストから、関連付けられているバックエンド サービスを選択して、そのバックエンド サービスもまた削除します。

  4. [ロードバランサと選択したリソースを削除] をクリックします。

インスタンス テンプレートの削除

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

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

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

  2. 削除するインスタンス テンプレートの名前の横にあるチェックボックスをオンにします。

  3. ページ上部にある [削除] ボタンをクリックします。

イメージの削除

イメージを削除するには:

  1. GCP Console で [イメージ] ページに移動します。

    [イメージ] ページに移動

  2. 削除するイメージの名前の横にあるチェックボックスをオンにします。

  3. ページ上部にある [削除] ボタンをクリックします。

永続ディスクを削除する

  1. GCP Console で [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. 削除したいディスクの隣にあるチェックボックスをオンにします。
  3. ページの上部にある [削除] ボタンをクリックし、ディスクを削除します。

スナップショットの削除

スナップショットを削除するには:

  1. GCP Console で [スナップショット] ページに移動します。

    [スナップショット] ページに移動

  2. 削除するスナップショットの名前の横にあるチェックボックスをオンにします。

  3. ページ上部にある [削除] ボタンをクリックします。

次のステップ

Google Cloud Platform のその他の機能を試す。チュートリアルをご覧ください。

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