Compute Engine でのウェブサービスのグローバルな自動スケーリング


このチュートリアルでは、容量のニーズを満たすために自動スケーリングされる、リージョンの Compute Engine マネージド インスタンス グループを使用して、グローバルで利用可能なウェブサービスを設定する方法を示します。このチュートリアルで示す手法を使用して、グローバルに分散されるスケーラブルな独自のプロジェクトを Compute Engine に実装できます。

目標

  • 自動スケーリングを有効にした複数のリージョンの Compute Engine マネージド インスタンス グループをデプロイします。
  • 複数のリージョンにまたがるロードバランサを作成します。
  • 世界中のさまざまなリージョンからのテスト トラフィックを生成します。
  • Google Cloud Console を使用して、ロードバランサがどのようにリクエストをルーティングするか、また、インスタンス グループが需要に応じてどのように自動スケーリングを行うかを可視化します。

費用

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

  • Compute Engine

始める前に

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

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

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

  3. Compute Engine API を有効にします。

    API を有効にする

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

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

  1. インスタンス テンプレート: インスタンス グループ内の各インスタンスを作成するために使用されるテンプレート。
  2. インスタンス グループ: 受信トラフィックに基づいて自動スケーリングを行う複数のインスタンス グループ。
  3. ロードバランサ: インスタンス グループ間でトラフィックを分散する HTTP ロードバランサ。
  4. インスタンス: 世界中のさまざまなリージョンからのテスト トラフィックを生成する複数のテスト インスタンス。

複数のリージョンのインスタンス グループを設定したロードバランサを示すシステム アーキテクチャ図

ウェブサービスを設定する

インスタンス グループを作成する

Console

  1. インスタンス グループのネットワークを作成します。

    1. Google Cloud Console で、[VPC ネットワーク] ページに移動します。

      [VPC ネットワーク] に移動

    2. [VPC ネットワークを作成] をクリックします。

    3. [名前] を fortressnet に設定します。

    4. [サブネット作成モード] を [自動] に設定します。

    5. ページの下部にある [作成] をクリックします。

  2. ネットワークのファイアウォール ルールを作成します。このルールでは、インスタンスに送信されるすべての HTTP リクエストを許可します。

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

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

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

    3. [名前] を fortressnet-allow-http に設定します。

    4. [ネットワーク] で、fortressnet を選択します。

    5. [ターゲット] で、All instances in the network を選択します。

    6. [ソース IP の範囲] を 0.0.0.0/0 に設定します。

    7. [プロトコルとポート] で [tcp] を選択し、「80」と入力します。

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

  3. インスタンス テンプレートを作成します。各インスタンスで単純な Apache ウェブサーバーを起動する起動スクリプトを組み込みます。

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

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

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

    3. [名前] を fort-template に設定します。

    4. [マシンの構成] で micro(e2-micro)を選択します。

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

    6. [ネットワーキング] タブをクリックします。

    7. [ネットワーク] で、fortressnet を選択します。

    8. [管理] タブをクリックします。

    9. [自動化] に次の起動スクリプトを入力します。

      apt update && apt -y install apache2
      

    10. ページの下部にある [作成] をクリックします。

  4. インスタンス テンプレートを使用して、複数のリージョンのマネージド インスタンス グループを作成します。各インスタンス グループで自動スケーリングを構成します。

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

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

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

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

    4. [名前] を us-central1-pool に設定します。

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

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

    7. [リージョン] で、us-central1 を選択します。 [ゾーン] は、事前定義された値が選択されたままにしておきます。

    8. [自動スケーリング モード] で [オン: グループへのインスタンスの追加と削除] を選択します。

    9. [インスタンスの最小数] を 1 に設定します。

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

    11. [自動スケーリングの指標] で、デフォルトの選択(CPU 使用率)を編集し、[指標タイプ] を [HTTP 負荷分散の使用率] に設定します。

    12. [負荷 HTTP 分散の目標使用率] を 80 に設定します。

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

    14. 次の変更を加えて上記の手順を繰り返し、さらに 2 つのインスタンス グループを作成します。

      • 名前europe-west1-poolリージョンeurope-west1 のグループを作成します。
      • 名前asia-east1-poolリージョンasia-east1 のグループを作成します。
  5. (省略可)インスタンスが正常で、HTTP トラフィックを処理していることを確認します。1 つ以上のインスタンスの外部 IP アドレスをテストします。インスタンスが起動プロセスを完了するまで 1 分ほどかかることがあります。

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

      [VM インスタンス] に移動

    2. [名前] 列で、実行中の各インスタンスに緑色のチェックマークが表示されていることを確認します。

    3. インスタンスの外部 IP をコピーしてウェブブラウザに貼り付けます。

    「Apache2 Debian デフォルト ページ」のウェブページが表示されます。

    表示されない場合は、しばらくお待ちください。

gcloud

  1. インスタンス グループのネットワークを作成します。

    gcloud compute networks create fortressnet --subnet-mode auto
    
  2. ネットワークのファイアウォール ルールを作成します。このルールでは、インスタンスに送信されるすべての HTTP リクエストを許可します。

    gcloud compute firewall-rules create fortressnet-allow-http \
        --network fortressnet \
        --allow tcp:80
    
  3. インスタンス テンプレートを作成します。各インスタンスで単純な Apache ウェブサーバーを起動する起動スクリプトを組み込みます。

    gcloud compute instance-templates create fort-template \
        --machine-type e2-micro \
        --network fortressnet \
        --metadata startup-script='apt update && apt -y install apache2'
    
  4. インスタンス テンプレートを使用して、複数のリージョンのマネージド インスタンス グループを作成します。各インスタンス グループで自動スケーリングを構成します。

    gcloud compute instance-groups managed create us-central1-pool \
        --region us-central1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling us-central1-pool \
        --region us-central1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
    gcloud compute instance-groups managed create europe-west1-pool \
        --region europe-west1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling europe-west1-pool \
        --region europe-west1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
    gcloud compute instance-groups managed create asia-east1-pool \
        --region asia-east1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling asia-east1-pool \
        --region asia-east1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
  5. (省略可)インスタンスが正常で、HTTP トラフィックを処理していることを確認します。1 つ以上のインスタンスの外部 IP アドレスをテストします。インスタンスが起動プロセスを完了するまで 1 分ほどかかることがあります。

    1. インスタンスを一覧表示します。

      gcloud compute instances list
      

    2. [STATUS] 列でインスタンスが RUNNING になっていることを確認します。

    3. [EXTERNAL_IP] 列の IP アドレスに対するクエリを実行して、インスタンスの動作を確認します。

      curl http://EXTERNAL_IP | head
      

    <title>Apache2 Debian Default Page: It works</title> という行を含む HTML テキストが表示されます。

    表示されない場合は、しばらくお待ちください。

ロードバランサの構成

ロードバランサは複数のバックエンド間でクライアント リクエストを分散します。

Console

ロードバランサ構成の開始

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

    [ロード バランシング] に移動

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

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

  4. [名前] を fortressnet-balancer に設定します。

バックエンドの構成

  1. [New HTTP(S) load balancer] ページで、[バックエンドの設定] をクリックします。
  2. [バックエンド サービスとバックエンド バケットの作成または選択] プルダウン メニューで、[バックエンド サービス]、[バックエンド サービスを作成] の順に選択します。[バックエンド サービスの作成] ダイアログ ボックスが表示されます。
  3. バックエンド サービスの [名前] を fortressnet-backend-service に設定します。
  4. [新しいバックエンド] ダイアログ ボックスで、[インスタンス グループ] を asia-east1-pool に設定します。
  5. [分散モード] で [レート] を選択します。
  6. [最大 RPS] をインスタンスあたり 100 RPS に設定します。
  7. [完了] をクリックします。
  8. [バックエンドを追加] をクリックします。
  9. [新しいバックエンド] ダイアログ ボックスで、[インスタンス グループ] を europe-west1-pool に設定します。
  10. [分散モード] で [レート] を選択します。
  11. [最大 RPS] をインスタンスあたり 100 RPS に設定します。
  12. [完了] をクリックします。
  13. [バックエンドを追加] をクリックします。
  14. [新しいバックエンド] ダイアログ ボックスで、[インスタンス グループ] を us-central1-pool に設定します。
  15. [分散モード] で [レート] を選択します。
  16. [最大 RPS] をインスタンスあたり 100 RPS に設定します。
  17. [完了] をクリックします。
  18. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
  19. [名前] を http-basic-check に設定します。
  20. [プロトコル] で HTTP を選択します。
  21. [ポート] を 80 に設定します。
  22. [保存して次へ] をクリックします。
  23. [作成] をクリックします。

ホストとパスのルール

  1. [新しい HTTP(S) ロードバランサ] ページの左パネルで、[ホストとパスのルール] をクリックします。
    この例では、すべてのトラフィックがデフォルト ルールに従うため、ホストまたはパスのルールを構成する必要はありません。したがって、事前設定されたデフォルト値をそのまま使用します。

フロントエンドの構成

  1. [新しい HTTP(S) ロードバランサ] ページの左パネルで [フロンドエンドの構成] をクリックします。
  2. [名前] を fortressnet-http-rule に設定します。
  3. [IP バージョン] で [IPv4] を選択します。
  4. [IP アドレス] で [IP アドレスを作成] を選択します。
  5. [新しい静的 IP アドレスの予約] ダイアログ ボックスで、[名前] を fortressnet-ip に設定します。
  6. [予約] をクリックしてしばらく待ちます。
  7. [新しいフロントエンドの IP とポート] ダイアログ ボックスの下部にある [完了] をクリックします。
  8. [フロントエンド IP とポートの追加] をクリックします。
  9. [名前] を fortressnet-http-ipv6-rule に設定します。
  10. [IP バージョン] で [IPv6] を選択します。
  11. [IP アドレス] で [IP アドレスを作成] を選択します。
  12. ダイアログ ボックスで [名前] を fortressnet-ipv6 に設定します。
  13. [予約] をクリックしてしばらく待ちます。
  14. [新しいフロントエンドの IP とポート] ダイアログ ボックスの下部にある [完了] をクリックします。

確認と完了

  1. [新しい HTTP(S) ロードバランサ] ページで [確認と完了] をクリックします。
  2. 設定した項目が意図したとおりであることを確認します。
  3. 設定が正しい場合は、左パネルの下部にある [作成] をクリックします。負荷分散画面に戻ります。ロードバランサが作成されると、その横に、ロードバランサが実行中であることを示す緑色のチェックマークが表示されます。

gcloud

バックエンドの構成

  1. 基本的なヘルスチェックを作成します。これにより、ロードバランサのバックエンドが HTTP リクエストに応答しているかどうかをチェックします。

    gcloud compute health-checks create http http-basic-check
    
  2. グローバル バックエンド サービスを作成します。このバックエンド サービスは、ロードバラ