GSP041

概要
内部アプリケーション ロードバランサは、ビジネス運営を促進する堅牢かつ安全で管理しやすい内部アプリケーションを構築するうえで不可欠です。このラボでは、仮想マシン(VM)を公共のインターネットに直接公開せずに、プライベート クラウド ネットワーク内でネットワーク トラフィックを分散し、サービスの安全性と効率性を維持する方法を学習します。
次のような、ごく一般的で簡潔なアーキテクチャ パターンを構築します。
- 別の内部サービスの支援を必要とする「ウェブ階層」(一般公開ウェブサイト)。
- 特定のタスクを実行し、複数のマシンに分散される「内部サービス階層」(素数計算ツール)。
この環境では、内部サービスの一部がビジー状態になったり、停止したりしても、ロードバランサがリクエストを正常なマシンに自動的に転送するため、システム全体がスムーズに動作し続けます。
演習内容
- 内部ロードバランサを構成するコンポーネントについて学習する
- バックエンド マシンのグループ(素数計算ツール)を作成する
- 内部トラフィックをバックエンド マシンに転送するように内部ロードバランサを設定する
- 別の内部マシンから内部ロードバランサをテストする
- 内部ロードバランサを使用して内部の「素数計算ツール」サービスから結果を取得する一般公開ウェブサーバーを設定する
前提条件
- Google Cloud Compute Engine の基本的な知識: 仮想マシン(VM)インスタンスとは何かを理解していること。
- ネットワーキングの基本コンセプト: IP アドレスとは何かを理解していること。
- 基本的な Unix / Linux コマンドライン: ターミナルでコマンドを入力する方法を理解していること。
- VPC(Virtual Private Cloud)に関する知識: Google Cloud リソースがプライベート ネットワークにあることを理解していること。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- 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 にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注: Google Cloud における gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
リージョンとゾーンを設定する
- このラボのプロジェクトのリージョンとゾーンを設定します。
gcloud config set compute/region {{{project_0.default_region | Region}}}
gcloud config set compute/zone {{{project_0.default_zone | Zone}}}
- リージョンの変数を作成します。
export REGION={{{project_0.default_region | Region}}}
- ゾーンの変数を作成します。
export ZONE={{{project_0.default_zone | Zone}}}
詳しくは、リージョンとゾーンのドキュメントをご確認ください。
注: 自分のマシンで gcloud
を実行する場合はセッション間で config 設定が維持されますが、Cloud Shell で実行する場合はセッションごと、または再接続するたびに設定する必要があります。
タスク 1. 仮想環境を作成する
仮想環境は、プロジェクトのソフトウェアを系統的に管理し、常に必要な特定のバージョンのツールを使用してコードが実行されるようにします。
Python 仮想環境を使用して、パッケージのインストール先をシステムとは別の場所にします。
-
virtualenv
環境をインストールします。
sudo apt-get install -y virtualenv
- 仮想環境をビルドします。
python3 -m venv venv
- 仮想環境をアクティブにします。
source venv/bin/activate
タスク 2. バックエンド マネージド インスタンス グループを作成する
「マネージド インスタンス グループ」を使用すると、Google Cloud でサービスの同一コピーを自動的に作成して維持できます。1 つのコピーに不具合があっても、Google Cloud によって置き換えられるため、サービスの信頼性が高まります。
起動スクリプトを作成する
このスクリプトは、グループ内の新しい VM それぞれが起動時に実行する一連の手順のようなものです。ここで作成するスクリプトには、ある数字が素数か(True)素数でないか(False)を判定する Python で記述された小さなウェブサーバーが含まれます。
- まず、ホーム ディレクトリに
backend.sh
スクリプトを作成します。
touch ~/backend.sh
- Cloud Shell の上部にある [エディタを開く] アイコンをクリックします。プロンプトが表示されたら、[新しいウィンドウで開く] をクリックします。
![UI でハイライト表示された [エディタを開く] アイコン](https://cdn.qwiklabs.com/N4C5%2BZX%2BUzFoTDik3XuHU%2BT1Q0Hk%2B9m%2Bzw17AK9I8JA%3D)
注: コードエディタ アイコンが表示されていない場合は、ナビゲーション メニュー アイコンをクリックして左側のパネルを閉じてください。
コードエディタを起動すると、Cloud Shell が新しいウィンドウに移動し、コードエディタが開きます。数秒後にワークスペースが表示されます。
-
左側のペインで backend.sh
ファイルを選択します。
-
右側のエディタに次のスクリプトを追加します。
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 &
- [ファイル] > [保存] をクリックします。
インスタンス テンプレートを作成する
- 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 と通信できるようにするうえで不可欠です。
- ポート
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 でファイアウォールを開く
インスタンス グループを作成する
- 次に、
backend
という名前のマネージド インスタンス グループを作成します。ここでは 3 つのインスタンスを設定します。
gcloud compute instance-groups managed create backend \
--size 3 \
--template primecalc \
--zone $ZONE
- 実行が完了したら、コンソールのタブに戻ります。[Compute Engine] > [VM インスタンス] に移動します。インスタンス グループによって 3 つのバックエンド VM が作成されていることを確認します。
![[インスタンス] タブページに表示された 3 つのバックエンド](https://cdn.qwiklabs.com/08WnJ%2BS22pLGEhCXuZCcONuU41NXAdPdYbZAKiYe8Dg%3D)
これで、バックエンドがトラフィックを処理できるようになりました。
下の [進行状況を確認] をクリックして、このラボの進捗状況を確認します。
インスタンス グループを作成する
タスク 3. 内部ロードバランサを設定する
内部サービス専用の単一の入口を作成します。これにより、他の内部アプリケーションが、どのバックエンド VM がアクティブまたは使用可能であるかを把握していなくても、「素数計算ツール」に確実にアクセスできるようになります。ここでは、内部ロードバランサを設定し、先ほど作成したインスタンス グループに接続します。
内部ロードバランサは、次の 3 つの主要な部分で構成されています。
- 転送ルール: 他の内部サービスによるリクエストの送信先となる実際のプライベート IP アドレスで、トラフィックをバックエンド サービスに「転送」します。
- バックエンド サービス: ロードバランサが VM インスタンスにトラフィックを分散する方法を定義します。これにはヘルスチェックも含まれます。
- ヘルスチェック: バックエンド VM の「健全性」をモニタリングする継続的なチェックです。ロードバランサは、ヘルスチェックに合格したマシンにのみトラフィックを送信するため、サービスは常に利用可能な状態に保たれます。
次の図は、異なるゾーンの複数のバックエンド グループにある複数のインスタンスを使用して、インスタンスをロード バランシングする方法を示しています。

ヘルスチェックを作成する
- ロードバランサが正常なインスタンスにのみトラフィックを送信するようにするには、ヘルスチェックが必要です。このバックエンド サービスは HTTP サーバーであるため、特定の URL パス(この場合は 2 が素数かどうかを確認するため
/2
を使用)で「200 OK」を返すかどうかを確認します。
gcloud compute health-checks create http ilb-health --request-path /2
HTTP サービスが提供されるため、特定の URL パス(この場合は 2 が素数かどうかを確認するため /2
を使用)で 200 レスポンスが入力されるかどうかを確認します。
バックエンド サービスを作成する
- 次に、
prime-service
という名前のバックエンド サービスを作成します。
gcloud compute backend-services create prime-service \
--load-balancing-scheme internal --region=$REGION \
--protocol tcp --health-checks ilb-health
このサービスは、ヘルスチェックをインスタンス グループに関連付けます。
インスタンス グループをバックエンド サービスに追加する
- バックエンド インスタンス グループを prime-service バックエンド サービスに接続します。これは、ロードバランサの管理対象となるマシンを指定します。
gcloud compute backend-services add-backend prime-service \
--instance-group backend --instance-group-zone=$ZONE \
--region=$REGION
転送ルールを作成する
- 最後に、
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 から直接アクセスすることはできません。
- Cloud Shell で
gcloud
を使用して、シンプルなテスト インスタンスを作成します。
gcloud compute instances create testinstance \
--machine-type=e2-standard-2 --zone $ZONE
- 次に、SSH で接続します。
gcloud compute ssh testinstance --zone $ZONE
プロンプトが表示されたら、「Y」と入力し、Enter キーを 2 回押して続行します。
ロードバランサに対してクエリを実行する
- テスト インスタンス内から
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 は素数ではないという正しいレスポンスを返しました。
- テスト インスタンスを終了します。
exit
- 不要になったため、テスト インスタンスを削除します。
gcloud compute instances delete testinstance --zone=$ZONE
- 「Y」と入力して削除を確定します。
タスク 5. 一般公開ウェブサーバーを作成する
次に、一般公開アプリケーション(ウェブサイトなど)で内部サービスをどのように利用するかを見てみます。ここでは、内部の「素数計算ツール」サービスを(内部アプリケーション ロードバランサ経由で)使用して素数の行列を表示する、一般公開ウェブサーバーを作成します。
- まず、この一般公開「フロントエンド」の起動スクリプトをホーム ディレクトリに作成します。
touch ~/frontend.sh
- コードエディタは開いたままのはずです。開いていない場合は、シェルでコードエディタを選択して起動します。
![UI でハイライト表示された [エディタを開く] ボタン](https://cdn.qwiklabs.com/N4C5%2BZX%2BUzFoTDik3XuHU%2BT1Q0Hk%2B9m%2Bzw17AK9I8JA%3D)
数秒後にワークスペースが表示されます。
- 右側のエディタに次のスクリプトを追加します。
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 &
- [ファイル] > [保存] をクリックします。
フロントエンド インスタンスを作成する
- Cloud Shell で、このウェブサーバーを実行する
frontend
という名前のインスタンスを作成します。
gcloud compute instances create frontend --zone=$ZONE \
--metadata-from-file startup-script=frontend.sh \
--tags frontend --machine-type=e2-standard-2
フロントエンドのファイアウォールを開く
- これは一般公開サーバーであるため、ファイアウォールを開き、インターネット上の任意の場所(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
-
ナビゲーション メニューで、[Compute Engine] > [VM インスタンス] をクリックします。frontend
インスタンスが表示されない場合は、ブラウザを更新します。
-
ブラウザでフロントエンドの外部 IP を開きます。
![選択したフロントエンドの IP アドレスが表示されている [VM インスタンス] ページ](https://cdn.qwiklabs.com/N8W%2BVCPATqfjQ9DibnvQtba4juXWqVC9E1mJ1a6OdCI%3D)
100 までのすべての素数を緑色で示す、次のような行列が表示されます。

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

注: この起動スクリプトの例は、素数を効率的に計算しているわけではありません。また、エラー検出や修正のアルゴリズムもありません。パスに大きな数字を入力すると、サービスがタイムアウトします。
下の [進行状況を確認] をクリックして、このラボの進捗状況を確認します。
一般公開ウェブサーバーを作成する
お疲れさまでした
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 の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。