arrow_back

内部アプリケーション ロードバランサの使用

ログイン 参加
700 以上のラボとコースにアクセス

内部アプリケーション ロードバランサの使用

ラボ 45分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

GSP041

Google Cloud セルフペース ラボのロゴ

概要

内部アプリケーション ロードバランサは、ビジネス運営を促進する堅牢かつ安全で管理しやすい内部アプリケーションを構築するうえで不可欠です。このラボでは、仮想マシン(VM)を公共のインターネットに直接公開せずに、プライベート クラウド ネットワーク内でネットワーク トラフィックを分散し、サービスの安全性と効率性を維持する方法を学習します。

次のような、ごく一般的で簡潔なアーキテクチャ パターンを構築します。

  • 別の内部サービスの支援を必要とする「ウェブ階層」(一般公開ウェブサイト)。
  • 特定のタスクを実行し、複数のマシンに分散される「内部サービス階層」(素数計算ツール)。

この環境では、内部サービスの一部がビジー状態になったり、停止したりしても、ロードバランサがリクエストを正常なマシンに自動的に転送するため、システム全体がスムーズに動作し続けます。

演習内容

  • 内部ロードバランサを構成するコンポーネントについて学習する
  • バックエンド マシンのグループ(素数計算ツール)を作成する
  • 内部トラフィックをバックエンド マシンに転送するように内部ロードバランサを設定する
  • 別の内部マシンから内部ロードバランサをテストする
  • 内部ロードバランサを使用して内部の「素数計算ツール」サービスから結果を取得する一般公開ウェブサーバーを設定する

前提条件

  • Google Cloud Compute Engine の基本的な知識: 仮想マシン(VM)インスタンスとは何かを理解していること。
  • ネットワーキングの基本コンセプト: IP アドレスとは何かを理解していること。
  • 基本的な Unix / Linux コマンドライン: ターミナルでコマンドを入力する方法を理解していること。
  • VPC(Virtual Private Cloud)に関する知識: Google Cloud リソースがプライベート ネットワークにあることを理解していること。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] ペインでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] ペインでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニュー アイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

リージョンとゾーンを設定する

  1. このラボのプロジェクトのリージョンとゾーンを設定します。
gcloud config set compute/region {{{project_0.default_region | Region}}} gcloud config set compute/zone {{{project_0.default_zone | Zone}}}
  1. リージョンの変数を作成します。
export REGION={{{project_0.default_region | Region}}}
  1. ゾーンの変数を作成します。
export ZONE={{{project_0.default_zone | Zone}}}

詳しくは、リージョンとゾーンのドキュメントをご確認ください。

注: 自分のマシンで gcloud を実行する場合はセッション間で config 設定が維持されますが、Cloud Shell で実行する場合はセッションごと、または再接続するたびに設定する必要があります。

タスク 1. 仮想環境を作成する

仮想環境は、プロジェクトのソフトウェアを系統的に管理し、常に必要な特定のバージョンのツールを使用してコードが実行されるようにします。

Python 仮想環境を使用して、パッケージのインストール先をシステムとは別の場所にします。

  1. virtualenv 環境をインストールします。
sudo apt-get install -y virtualenv
  1. 仮想環境をビルドします。
python3 -m venv venv
  1. 仮想環境をアクティブにします。
source venv/bin/activate

タスク 2. バックエンド マネージド インスタンス グループを作成する

「マネージド インスタンス グループ」を使用すると、Google Cloud でサービスの同一コピーを自動的に作成して維持できます。1 つのコピーに不具合があっても、Google Cloud によって置き換えられるため、サービスの信頼性が高まります。

起動スクリプトを作成する

このスクリプトは、グループ内の新しい VM それぞれが起動時に実行する一連の手順のようなものです。ここで作成するスクリプトには、ある数字が素数か(True)素数でないか(False)を判定する Python で記述された小さなウェブサーバーが含まれます。

  1. まず、ホーム ディレクトリに backend.sh スクリプトを作成します。
touch ~/backend.sh
  1. Cloud Shell の上部にある [エディタを開く] アイコンをクリックします。プロンプトが表示されたら、[新しいウィンドウで開く] をクリックします。

UI でハイライト表示された [エディタを開く] アイコン

注: コードエディタ アイコンが表示されていない場合は、ナビゲーション メニュー アイコンをクリックして左側のパネルを閉じてください。

UI でハイライト表示されたナビゲーション メニュー アイコン

コードエディタを起動すると、Cloud Shell が新しいウィンドウに移動し、コードエディタが開きます。数秒後にワークスペースが表示されます。

  1. 左側のペインで backend.sh ファイルを選択します。

  2. 右側のエディタに次のスクリプトを追加します。

sudo chmod -R 777 /usr/local/sbin/ sudo cat << EOF > /usr/local/sbin/serveprimes.py import http.server def is_prime(a): return a!=1 and all(a % i for i in range(2,int(a**0.5)+1)) class myHandler(http.server.BaseHTTPRequestHandler): def do_GET(s): s.send_response(200) s.send_header("Content-type", "text/plain") s.end_headers() s.wfile.write(bytes(str(is_prime(int(s.path[1:]))).encode('utf-8'))) http.server.HTTPServer(("",80),myHandler).serve_forever() EOF nohup python3 /usr/local/sbin/serveprimes.py >/dev/null 2>&1 &
  1. [ファイル] > [保存] をクリックします。

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

  1. Cloud Shell のツールバーで [ターミナルを開く] をクリックします。次のコマンドを入力して、インスタンス テンプレート primecalc を作成します。
gcloud compute instance-templates create primecalc \ --metadata-from-file startup-script=backend.sh \ --no-address --tags backend --machine-type=e2-medium

これはバックエンド VM の「設計図」です。--no-address が含まれている点に注目してください。これは、セキュリティを考慮し、これらのバックエンド VM が公共のインターネットにアクセスできないことを意味します。

ファイアウォールを開く

ポート 80 のトラフィック(標準の HTTP トラフィック)がバックエンド VM に到達できるようにするファイアウォール ルールを作成する必要があります。この作業は、内部アプリケーション ロードバランサとヘルスチェックがバックエンド VM と通信できるようにするうえで不可欠です。

  1. ポート 80 でファイアウォールを開きます。
gcloud compute firewall-rules create http --network default --allow=tcp:80 \ --source-ranges {{{project_0.startup_script.selected_cidr | IP}}} --target-tags backend

下の [進行状況を確認] をクリックして、このラボの進捗状況を確認します。

インスタンス テンプレートを作成し、ポート 80 でファイアウォールを開く

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

  1. 次に、backend という名前のマネージド インスタンス グループを作成します。ここでは 3 つのインスタンスを設定します。
gcloud compute instance-groups managed create backend \ --size 3 \ --template primecalc \ --zone $ZONE
  1. 実行が完了したら、コンソールのタブに戻ります。[Compute Engine] > [VM インスタンス] に移動します。インスタンス グループによって 3 つのバックエンド VM が作成されていることを確認します。

[インスタンス] タブページに表示された 3 つのバックエンド

これで、バックエンドがトラフィックを処理できるようになりました。

下の [進行状況を確認] をクリックして、このラボの進捗状況を確認します。

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

タスク 3. 内部ロードバランサを設定する

内部サービス専用の単一の入口を作成します。これにより、他の内部アプリケーションが、どのバックエンド VM がアクティブまたは使用可能であるかを把握していなくても、「素数計算ツール」に確実にアクセスできるようになります。ここでは、内部ロードバランサを設定し、先ほど作成したインスタンス グループに接続します。

内部ロードバランサは、次の 3 つの主要な部分で構成されています。

  • 転送ルール: 他の内部サービスによるリクエストの送信先となる実際のプライベート IP アドレスで、トラフィックをバックエンド サービスに「転送」します。
  • バックエンド サービス: ロードバランサが VM インスタンスにトラフィックを分散する方法を定義します。これにはヘルスチェックも含まれます。
  • ヘルスチェック: バックエンド VM の「健全性」をモニタリングする継続的なチェックです。ロードバランサは、ヘルスチェックに合格したマシンにのみトラフィックを送信するため、サービスは常に利用可能な状態に保たれます。

次の図は、異なるゾーンの複数のバックエンド グループにある複数のインスタンスを使用して、インスタンスをロード バランシングする方法を示しています。

ロード バランシングの図

ヘルスチェックを作成する

  1. ロードバランサが正常なインスタンスにのみトラフィックを送信するようにするには、ヘルスチェックが必要です。このバックエンド サービスは HTTP サーバーであるため、特定の URL パス(この場合は 2 が素数かどうかを確認するため /2 を使用)で「200 OK」を返すかどうかを確認します。
gcloud compute health-checks create http ilb-health --request-path /2

HTTP サービスが提供されるため、特定の URL パス(この場合は 2 が素数かどうかを確認するため /2 を使用)で 200 レスポンスが入力されるかどうかを確認します。

バックエンド サービスを作成する

  1. 次に、prime-service という名前のバックエンド サービスを作成します。
gcloud compute backend-services create prime-service \ --load-balancing-scheme internal --region=$REGION \ --protocol tcp --health-checks ilb-health

このサービスは、ヘルスチェックをインスタンス グループに関連付けます。

インスタンス グループをバックエンド サービスに追加する

  1. バックエンド インスタンス グループを prime-service バックエンド サービスに接続します。これは、ロードバランサの管理対象となるマシンを指定します。
gcloud compute backend-services add-backend prime-service \ --instance-group backend --instance-group-zone=$ZONE \ --region=$REGION

転送ルールを作成する

  1. 最後に、prime-lb という名前で、静的 IP が の転送ルールを作成します。
gcloud compute forwarding-rules create prime-lb \ --load-balancing-scheme internal \ --ports 80 --network default \ --region=$REGION --address {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}} \ --backend-service prime-service

これで、内部「素数計算」サービス全体が設定され、内部 IP アドレス経由でクエリを実行できるようになりました。

下の [進行状況を確認] をクリックして、このラボの進捗状況を確認します。

内部ロードバランサを設定する

タスク 4. ロードバランサをテストする

この手順は、内部アプリケーション ロードバランサがトラフィックをバックエンド サービスに正しく転送していることを確認するうえで不可欠です。これにより、他の内部アプリケーションが単一の安定した IP アドレスを介してサービスに確実にアクセスできるようになり、継続的な運用が保証されます。

ロードバランサをテストするには、内部アプリケーション ロードバランサと同じネットワークに新しい VM インスタンスを作成する必要があります。このネットワークには、プライベート クラウド ネットワーク内からのみアクセスできます。(この特定のネットワークの外部にある)Cloud Shell から直接アクセスすることはできません。

  1. Cloud Shell で gcloud を使用して、シンプルなテスト インスタンスを作成します。
gcloud compute instances create testinstance \ --machine-type=e2-standard-2 --zone $ZONE
  1. 次に、SSH で接続します。
gcloud compute ssh testinstance --zone $ZONE

プロンプトが表示されたら、「Y」と入力し、Enter キーを 2 回押して続行します。

ロードバランサに対してクエリを実行する

  1. テスト インスタンス内から curl を使用して、内部アプリケーション ロードバランサの IP アドレスに対して、いくつかの数字が素数かどうかを尋ねます。
curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/2 curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/4 curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/5

出力では、コマンドラインのすぐ横に True または False が表示されます。

user@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/2 Trueuser@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/4 Falseuser@testinstance:~$ curl {{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/5 Trueuser@testinstance:~$ exit

2 と 5 は素数、4 は素数ではないと正しく識別されます。このことから、内部アプリケーション ロードバランサが適切に機能していることがわかります。ロードバランサはリクエストを受信し、バックエンドの「素数計算」VM の 1 つに正常に転送しました。

このサービスは、2 と 5 は素数である一方、4 は素数ではないという正しいレスポンスを返しました。

  1. テスト インスタンスを終了します。
exit
  1. 不要になったため、テスト インスタンスを削除します。
gcloud compute instances delete testinstance --zone=$ZONE
  1. Y」と入力して削除を確定します。

タスク 5. 一般公開ウェブサーバーを作成する

次に、一般公開アプリケーション(ウェブサイトなど)で内部サービスをどのように利用するかを見てみます。ここでは、内部の「素数計算ツール」サービスを(内部アプリケーション ロードバランサ経由で)使用して素数の行列を表示する、一般公開ウェブサーバーを作成します。

  1. まず、この一般公開「フロントエンド」の起動スクリプトをホーム ディレクトリに作成します。
touch ~/frontend.sh
  1. コードエディタは開いたままのはずです。開いていない場合は、シェルでコードエディタを選択して起動します。

UI でハイライト表示された [エディタを開く] ボタン

数秒後にワークスペースが表示されます。

  1. 右側のエディタに次のスクリプトを追加します。
sudo chmod -R 777 /usr/local/sbin/ sudo cat << EOF > /usr/local/sbin/getprimes.py import urllib.request from multiprocessing.dummy import Pool as ThreadPool import http.server PREFIX="http://{{{project_0.startup_script.selected_forwarding_rule_cidr | IP}}}/" #HTTP Load Balancer def get_url(number): return urllib.request.urlopen(PREFIX+str(number)).read().decode('utf-8') class myHandler(http.server.BaseHTTPRequestHandler): def do_GET(s): s.send_response(200) s.send_header("Content-type", "text/html") s.end_headers() i = int(s.path[1:]) if (len(s.path)>1) else 1 s.wfile.write("<html><body><table>".encode('utf-8')) pool = ThreadPool(10) results = pool.map(get_url,range(i,i+100)) for x in range(0,100): if not (x % 10): s.wfile.write("<tr>".encode('utf-8')) if results[x]=="True": s.wfile.write("<td bgcolor='#00ff00'>".encode('utf-8')) else: s.wfile.write("<td bgcolor='#ff0000'>".encode('utf-8')) s.wfile.write(str(x+i).encode('utf-8')+"</td> ".encode('utf-8')) if not ((x+1) % 10): s.wfile.write("</tr>".encode('utf-8')) s.wfile.write("</table></body></html>".encode('utf-8')) http.server.HTTPServer(("",80),myHandler).serve_forever() EOF nohup python3 /usr/local/sbin/getprimes.py >/dev/null 2>&1 &
  1. [ファイル] > [保存] をクリックします。

フロントエンド インスタンスを作成する

  1. Cloud Shell で、このウェブサーバーを実行する frontend という名前のインスタンスを作成します。
gcloud compute instances create frontend --zone=$ZONE \ --metadata-from-file startup-script=frontend.sh \ --tags frontend --machine-type=e2-standard-2

フロントエンドのファイアウォールを開く

  1. これは一般公開サーバーであるため、ファイアウォールを開き、インターネット上の任意の場所(0.0.0.0/0)からのトラフィックをポート 80 で許可する必要があります。
gcloud compute firewall-rules create http2 --network default --allow=tcp:80 \ --source-ranges 0.0.0.0/0 --target-tags frontend
  1. ナビゲーション メニューで、[Compute Engine] > [VM インスタンス] をクリックします。frontend インスタンスが表示されない場合は、ブラウザを更新します。

  2. ブラウザでフロントエンドの外部 IP を開きます。

選択したフロントエンドの IP アドレスが表示されている [VM インスタンス] ページ

100 までのすべての素数を緑色で示す、次のような行列が表示されます。

素数を緑色で表示する行列図

  1. http://your-ip/10000 のようにパスに数字を追加して、その数字以降のすべての素数を表示してみます。

100 以降の素数を緑色で表示する行列図

注: この起動スクリプトの例は、素数を効率的に計算しているわけではありません。また、エラー検出や修正のアルゴリズムもありません。パスに大きな数字を入力すると、サービスがタイムアウトします。

下の [進行状況を確認] をクリックして、このラボの進捗状況を確認します。

一般公開ウェブサーバーを作成する

お疲れさまでした

Google Cloud の内部アプリケーション ロードバランサを使用する信頼性の高い内部サービスを構築し、一般公開アプリケーションでそのサービスを安全に活用する仕組みを示しました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2025 年 7 月 18 日

ラボの最終テスト日: 2025 年 7 月 18 日

Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。