1. はじめに
皆さん、こんにちは。本日はご参加いただきありがとうございます。Google Compute Engine を学習する準備はできましたか?
この Codelab では、ゲストブック アプリケーションの例を通して Compute Engine の動作について説明します。
Compute Engine インスタンスを作成し、nginx をデプロイして、最後にネットワーク ロードバランサをフロントに配置します。Compute Engine インスタンスは、グラフィカル コンソールまたはコマンドラインから作成できます。このラボでは、コマンドラインの使用方法について説明します。

Google Compute Engine は、世界規模のファイバー ネットワークに接続された Google のデータセンターで実行される仮想マシンを提供します。提供されるツールとワークフローにより、単一インスタンスからグローバルに負荷分散されたクラウド コンピューティングまでのスケーリングが可能になります。
これらの VM は高速で起動し、永続ディスク ストレージを備え、安定したパフォーマンスを実現します。マシンは、事前に定義されたサイズを含むさまざまな構成で利用できます。また、特定のニーズに合わせて最適化されたカスタム マシンタイプで作成することもできます。
最後に、Compute Engine 仮想マシンは、他のいくつかの Google Cloud プロダクト(Kubernetes Engine、Cloud Dataproc、Cloud Dataflow など)でも使用されているテクノロジーです。
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「
PROJECT_ID」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。 - 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Google Cloud Shell
Google Cloud と Compute Engine はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
この Debian ベースの仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。つまり、この Codelab に必要なのはブラウザだけです(Chromebook でも動作します)。
- Cloud Console から Cloud Shell を有効にするには、[Cloud Shell をアクティブにする]
をクリックします(環境のプロビジョニングと接続に若干時間を要します)。


Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自の PROJECT_ID が設定されていることがわかります。
gcloud auth list
コマンド出力
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
なんらかの理由でプロジェクトが設定されていない場合は、次のコマンドを実行します。
gcloud config set project <PROJECT_ID>
PROJECT_ID が見つからない場合は、設定手順で使用した ID を確認するか、Cloud Console ダッシュボードで検索します。

Cloud Shell では、デフォルトで環境変数もいくつか設定されます。これらの変数は、以降のコマンドを実行する際に有用なものです。
echo $GOOGLE_CLOUD_PROJECT
コマンド出力
<PROJECT_ID>
- 最後に、デフォルトのゾーンとプロジェクト構成を設定します。
gcloud config set compute/zone us-central1-f
さまざまなゾーンを選択できます。詳細については、リージョンとゾーンをご覧ください。
3. Compute Engine インスタンスを作成する
前述のとおり、この Codelab では gcloud コマンドラインを使用します。ここで説明する操作はすべて、コンソール(console.cloud.google.com で使用可能)を使用して実行できます。
まず、デフォルト設定でインスタンスを作成しましょう。
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
EXTERNAL_IP をメモします。これは後で重要になります。
インスタンスは、次のデフォルトを使用して作成されます。
- 選択したゾーン。すべてのインスタンスは ゾーンに存在します。インスタンスの作成時に
--zoneフラグを使用してゾーンを選択するか、デフォルトのゾーンを設定(初期設定で実施)して--zoneフラグを省略できます。 - 最新の Debian GNU/Linux 9(stretch)イメージ。独自のカスタム イメージを使用している場合は、代わりにイメージ名を指定します。例:
--image my-own-image n1-standard-1マシンタイプ。n1-highmem-4やn1-highcpu-6などの別のマシンタイプを選択できます。事前定義されたマシンタイプの中にニーズに合ったものがない場合は、カスタム マシンタイプを使用します。- インスタンスと同じ名前のルート永続ディスクが自動的にインスタンスに組み込まれます。
使用可能なすべてのオプションを表示するには、gcloud compute instances create --help を実行します。
4. ポート 80 のファイアウォールを有効にする
デフォルトでは、Google Cloud Platform で許可されるポート アクセスはごくわずかです。まもなく Nginx をインストールするので、まずファイアウォール構成でポート 80 を有効にしましょう。
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
これにより、インバウンド接続を許可する IP アドレス ブロックのデフォルト リスト(--source-ranges)が 0.0.0.0/0(すべての場所)に設定された allow-80 という名前のファイアウォール ルールが作成されます。
gcloud compute firewall-rules create --help を実行して、すべてのデフォルトと、タグに基づくファイアウォール ルールの適用機能など、使用可能なすべてのオプションを確認します。
5. インスタンスに SSH 接続する
コマンドライン(Cloud Shell から)でインスタンスに SSH 接続するには:
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
これで完了です。簡単でしょう。(本番環境では、パスフレーズを必ず入力してください)。
または、Compute Engine > [VM インスタンス] に移動して [SSH] をクリックすると、コンソール(console.cloud.google.com)からインスタンスに直接 SSH 接続することもできます。

6. Nginx をインストールする
新しく作成したインスタンス myinstance にログインし、nginx をインストールします。
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
myinstance の curl を使用して、サーバーが実行されていることをテストします。
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
ウェブ UI でインスタンスを一覧表示して、インスタンスの外部 IP を確認します。

SSH を終了してから、Cloud Shell から次のコマンドを実行します。
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
次に、http://EXTERNAL_IP/ に移動します。ここで、EXTERNAL_IP は myinstance のパブリック IP です。nginx ページが表示されます。

7. 起動スクリプト
インスタンスを毎回設定するのではなく、起動スクリプトを使用して起動時にインスタンスを初期化できます。
次の内容で startup.sh という名前のファイルを作成します(お好みのテキスト エディタ(vim、nano、emacs など)を使用できます)。
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
この起動スクリプトを使用して新しい VM インスタンスを作成するには、次のように入力します。
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
http://EXTERNAL_IP/ に移動すると、更新されたホームページが表示されます。ページがすぐに表示されない場合は、数秒後に再試行してください。ホストで nginx がまだ起動している可能性があります。
8. サーバー クラスタを作成する
サーバー クラスタを作成するには、まずインスタンス テンプレートを作成する必要があります。インスタンス テンプレートを作成したら、インスタンス グループを作成して、作成するインスタンスの数を管理できます。
まず、起動スクリプトを使用してインスタンス テンプレートを作成します。
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
次に、ターゲット プールを作成します。ターゲット プールは、それを使用してグループ内のすべてのインスタンスに 1 か所からアクセスできるようになると同時に、今後の手順の負荷分散に必要です。
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
最後に、テンプレートを使用してインスタンス グループを作成します。
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
これにより、名前が nginx- で始まる 2 つの VM インスタンスが作成されます。
作成されたすべてのインスタンスが表示されます。
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. ネットワーク ロードバランサを作成する
Google Cloud Platform には、次のような複数のロードバランサ タイプがあります。
インスタンス グループを対象とするリージョン ネットワーク ロードバランサを作成しましょう。
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
次に、ブラウザでロードバランサ http://IP_ADDRESS/ にアクセスします(IP_ADDRESS は、前述のコマンドの実行結果に示されたアドレスです)。
時間の都合上、今日は HTTP ロードバランサを作成しません。
10. クラスタをクリーンアップする
クラスタをシャットダウンすることを忘れないでください。シャットダウンしないと、クラスタは実行され続け、費用が発生します。次のコマンドは、Google Compute Engine インスタンス、インスタンス グループ、ターゲティング グループ、ロードバランサを削除します。
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
上記の各コマンドでは、リソースの削除を確認するメッセージが表示されます。
11. 次のステップ
これで、この Compute Engine Codelab は終了です。
Compute Engine のその他の機能
Google Compute Engine には豊富な機能が用意されています。以下のような項目について詳しく説明します。
- プリエンプティブル VM - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- 単一テナントノード - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU と TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- Windows インスタンス - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- リソースのラベル付け - https://cloud.google.com/compute/docs/labeling-resources
- Compute Engine への VM の移行 - https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine(GKE)は、Google Cloud のホスト型フルマネージド Kubernetes サービスです。GKE の使用を開始するのに役立つコードラボがいくつかあります。まずはこちらをご覧ください。
- Google Kubernetes Engine の Codelab - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
フィードバックをお寄せください
- 簡単なアンケートにご協力ください