【GoogleCloud入門】マネージドインスタンスグループ (MIG)でVMを起動する

12月 7, 2023GoogleCloud

概要

  • Google Cloud入門の記事 4つ目になります。今回は、マネージド インスタンス グループ(MIG) を使った VM の起動方法を記載します。
  • インスタンス グループは、VMインスタンスの負荷分散を可能とします。さらに、インスタンス テンプレートを使用することでマネージド インスタンス グループ(MIG)を構成することが出来ます。マネージド インスタンス グループ(MIG)は、VMインスタンスの障害時の代替や、オートスケーリングが可能です。(AWSの場合、インスタンス テンプレートがEC2 の起動テンプレート、マネージド インスタンス グループ(MIG)がEC2 のAuto Scaling Group になります)
  • この方法は、マネージド インスタンス グループ(MIG) を使用して、ステートレスの VMインスタンスを提供します。VM が再作成される際はインスタンス テンプレートに従って起動するため、インスタンスに状態を保持させません。
  • 以下、MIG の機能と一般的なワークロードの概要を表した図になります。(出典:Google Cloud – Compute Engine ドキュメント

  • 今回紹介する手順は、インスタンス テンプレート、インスタンス グループ、ロードバランサを作成し、単純なマネージド インスタンス グループ(MIG)を構成する方法になります。動作確認として、ロードバランサ経由で、MIG で提供するNginx のウェブサーバーにアクセスを行います。

 

マネージドインスタンスグループ (MIG) の作成手順

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

  • ナビゲーション メニューから、「Compute Engine」→「インスタンス テンプレート」を選択します。
  • 以下の画面が表示されます。「インスタンス テンプレートを作成」を選択します。

 

  • インスタンス テンプレートの「名前」を指定します。
    • 名前は、先頭が英小文字で、その後に最大 62 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。
  • ロケーションを選択します。
    • リージョンをまたいでインスタンス テンプレートを使用する場合は、「グローバル」を選択します。
    • リージョン間の依存関係を減らす場合は、「リージョン」を選択します。
    • リージョンを選択した場合は、インスタンス テンプレートを作成するリージョンを選択します。

 

  • VM のマシン ファミリーシリーズを選択します。用語の説明を以下に記載します。詳細は、こちらを参照。
    • マシン ファミリー: 特定のワークロードに合わせて最適化されたプロセッサとハードウェアから構成される一連のセット。VM インスタンスを作成する際は、優先マシン ファミリーから事前定義されたマシンタイプまたはカスタム マシンタイプを選択します。
    • シリーズ: マシン ファミリーはシリーズと世代でさらに分類されます。たとえば、汎用マシン ファミリー内の N1 シリーズは、N2 シリーズの旧バージョンです。世代またはシリーズ番号が高いほど、基盤となる CPU プラットフォームまたはテクノロジーが新しくなります。たとえば、M3 シリーズは M2 シリーズの新しい世代です。

 

  • さらに、VM のマシンタイプを選択します。用語の説明を以下に記載します。詳細は、こちらを参照。
    • マシンタイプ: すべてのマシンシリーズには事前定義されたマシンタイプがあり、これによって VM にリソースセットが提供されます。事前定義されたマシンタイプでニーズを満たせない場合は、いくつかのマシンシリーズのカスタム マシンタイプを作成することもできます。

 

  • ブートディスクの「変更」を選択します。公開イメージから起動するイメージを選択して、新しいブートディスクを作成します。
  • 公開イメージから「OS」、「バージョン」、「ブートディスクの種類」、「サイズ(GB)」を選択します。

 

  • ファイアウォール ルールに「ロードバランサのヘルスチェックを許可する」を設定します。

 

  • 詳細オプションネットワーキングの設定を展開します。
  • ネットワーク インターフェースの設定を変更します。
    • ネットワークにVPC、サブネットワークにサブネットを選択します。(事前に、VPC、サブネットを作成します)

 

  • 続けて、管理の設定を展開します。
    • 起動スクリプトに以下のスクリプトを指定します。インスタンスの起動時に、自動的にNginx のインストールを行います。
#! /bin/bash
apt update
apt install -y nginx
systemctl enable nginx
systemctl start nginx

 

 

  • 各種設定を指定した後に、「作成」を選択します。インスタンス テンプレートが作成されました。

 

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

  • ナビゲーション メニューから、「Compute Engine」→「インスタンス テンプレート」を選択します。
  • 以下の画面が表示されます。インスタンス テンプレートの操作から「インスタンス グループを作成」を選択します。

  • ステートレスのマネージド インスタンス グループ(MIG) を作成するため、「New managed instance group (stateless)」を選択します。

 

  • インスタンス グループの「名前」を指定します。
    • 名前は、先頭が英小文字で、その後に最大 62 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。
  • Instance template に、先ほど作成したインスタンス テンプレートが選択されていることを確認します。
  • 今回は検証のため、ロケーションにシングルゾーンを指定します。続けて、リージョンゾーンを選択します。

  • 今回の検証は、自動スケーリングは行いません。自動スケーリング モードに「オフ: 自動スケーリングを行いません」を選択します。
  • インスタンス数は、1 とします。

 

  • 各種設定を指定した後に、「作成」を選択します。インスタンス グループが作成されました。

 

  • ナビゲーション メニューから、「Compute Engine」→「VM インスタンス」を選択します。VM インスタンス が1台起動していることが確認できます。

 

ロードバランサを作成する

  • 次に、ロードバランサを作成します。
  • ナビゲーション メニューから、「ネットワーク サービス」→「ロード バランシング」を選択します。

 

  • 「ロードバランサを作成」を選択します。

  • アプリケーション ロードバランサを作成します。アプリケーション ロードバランサ の「構成を開始」を選択します。

 

  • ロードバランサのタイプに、「インターネットから VM またはサーバーレス サービスへ」および「リージョン外部アプリケーション ロードバランサ」を選択します。

 

  • ロードバランサの「名前」を指定します。
    • 名前は、先頭が英小文字で、その後に最大 62 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。
  • ロードバランサを配置するリージョンネットワークを選択します。
  • リージョン、ネットワークを選択後、ネットワークに指定したVPC にプロキシ専用サブネットが作成されていない場合、以下のメッセージが表示されます。リージョン ロードバランサを使用する VPC ネットワークの各リージョンには、プロキシ専用サブネットが必要となります。詳しくは、こちらを参照。

  • 「サブネットを予約」を選択し、VPC にプロキシ専用サブネットを追加で作成しています。

  • 続けて、ロードバランサのフロントエンドを設定します。フロントエンドに設定する名前を指定、プロトコルポートを選択します。今回の検証では、プロトコルに「HTTP」を選択しています。

 

  • 続けて、ロードバランサのバックエンドを設定します。バックエンドの構成にて、「バックエンド サービスの作成または選択」から「バックエンド サービスを作成」を選択します。

  • バックエンドに設定する名前を指定、バックエンド タイプに「インスタンス グループ」、プロトコルに「HTTP」を選択します。

 

  • 新しいバックエンドに先ほど作成したインスタンス グループを設定します。ポート番号に、「80」を設定します。

 

  • 続けて、ロードバランサのヘルスチェックを設定します。「ヘルスチェック」から「ヘルスチェックを作成」を選択します。
  • ヘルスチェックに設定する名前を指定、ヘルスチェックに使用するプロトコルポート等を設定します。

 

  • 各種設定を指定した後に、「作成」を選択します。バックエンドが構成されました。

 

  • 設定内容を確認して、「作成」を選択します。

 

  • ロードバランサが作成されました。

 

 

ロードバランサ の疎通テスト

  • ロードバランサを作成出来ましたが、作成されたロードバランサのバックエンドを確認すると、バックエンドに異常があることが分かりました。

 

  • Webブラウザからロードバランサへアクセスしますが、"no healthy upstream" が表示されてしまいます。

  • バックエンドのインスタンスがヘルスチェックに失敗していると思われます。

 

  • ヘルスチェックのトラフィックがインスタンスに到達させるため、ファイアウォール ルールを追加作成します。

 

  • ファイアウォール ルールに許可する送信元 IP に、以下のアドレス範囲を設定します。
    • 35.191.0.0/16
    • 130.211.0.0/22
    • Google Cloud ヘルスチェック システムからの許可が必要になります。以下ドキュメントからの抜粋になります。詳細は、こちらを参照。
      • ヘルスチェック プローブでは、上り(内向き)許可ファイアウォール ルールを作成してヘルスチェック プローブがバックエンド インスタンスに到達できるようにする必要があります。通常、ヘルスチェック プローブは Google の一元化されたヘルスチェックの仕組みにより発信されます。

 

  • ファイアウォール ルールを追加後、ロードバランサのバックエンドは正常に変わりました。

 

  • 改めて、Webブラウザからロードバランサへアクセスします。メッセージが、"upstream request timeout" に変わりました。

 

  • ロードバランサにhttp アクセスを許可するファイアウォール ルールを作成します。

 

  • 今回の検証では、ファイアウォール ルールに許可する送信元 IP に、0.0.0.0/0 を指定します。本番環境では、すべてのインスタンスに 0.0.0.0/0 からのリクエストが到達しない様に設定が必要になります。

 

  • 再度、Webブラウザからロードバランサへアクセスした結果、MIG で提供するNginx のウェブサーバーにアクセスが出来ました。

 

参考資料