Google Compute Engine

1. はじめに

皆様、こんにちは。本日はご参加いただきありがとうございます。 Google Compute Engine を学習するなら、

この Codelab では、サンプルの Guestbook アプリケーションを使用して Compute Engine について説明します。

Compute Engine インスタンスを作成して nginx をデプロイし、最後にネットワーク ロードバランサを前面に配置します。 Compute Engine インスタンスは、グラフィカル コンソールまたはコマンドラインから作成できます。このラボでは、このコマンドラインの使い方を説明します。

Compute Engine 128 px.png

Google Compute Engine は、世界中のファイバー ネットワークに接続された Google のデータセンターで稼働する仮想マシンを提供しています。ツールとワークフローにより、単一インスタンスからグローバルな負荷分散が可能なクラウド コンピューティングにスケーリングできます。

これらの VM はすばやく起動し、永続ディスク ストレージを備え、一貫したパフォーマンスを提供します。マシンは事前定義されたサイズを含むさまざまな構成で利用でき、特定のニーズに合わせて最適化されたカスタム マシンタイプで作成することもできます。

最後に、Compute Engine の仮想マシンは、他の複数の Google Cloud プロダクト(Kubernetes Engine、Cloud Dataproc、Cloud Dataflow など)で使用されるテクノロジーでもあります。

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。Gmail または Google Workspace アカウントをお持ちでない場合は、アカウントを作成する必要があります。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • [プロジェクト名] は、このプロジェクトの参加者の表示名です。Google API で使用されていない文字列で、いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、変更できません(設定後は変更できません)。Cloud Console で一意の文字列が自動生成されます。通常は何も重要ではありません。ほとんどの Codelab では、プロジェクト ID を参照(通常は PROJECT_ID として識別)する必要があります。気に入らない場合は、ランダムな ID を新たに生成するか、ご自身の ID で以下を確認してください。利用可能。プロジェクトの作成後は「フリーズ」されます。
  • 第 3 の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、ドキュメントをご覧ください。
  1. 次に、Cloud Console で課金を有効にして、Cloud リソースや API を使用する必要があります。このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアルで課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドルの無料トライアル プログラムをご利用いただけます。

Google Cloud Shell

Google Cloud と Compute Engine はノートパソコンからリモートで操作できますが、この Codelab では Google Cloud Shell(クラウドで実行されるコマンドライン環境)を使用します。

この Debian ベースの仮想マシンには、必要な開発ツールがすべて読み込まれています。5 GB の永続的なホーム ディレクトリが Google Cloud で実行されるため、ネットワーク パフォーマンスと認証が大幅に強化されます。この Codelab に必要なのはブラウザだけです(はい、Chromebook で動作します)。

  1. Cloud Console から Cloud Shell を有効にするには、[Cloud Shell をアクティブにする] b125d9eb26a46cc5.png をクリックします(環境のプロビジョニングと接続に若干時間を要します)。

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

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 ダッシュボードで確認します。

cc3895eeac80db2c.png

Cloud Shell では、デフォルトで環境変数もいくつか設定されます。これらの変数は、以降のコマンドを実行する際に有用なものです。

echo $GOOGLE_CLOUD_PROJECT

コマンド出力

<PROJECT_ID>
  1. 最後に、デフォルトのゾーンとプロジェクト構成を設定します。
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-4n1-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

これにより、allow-80 というファイアウォール ルールが作成され、受信接続を許可する IP アドレス ブロックのデフォルト リスト(--source-ranges)が 0.0.0.0/0(すべての場所)に設定されます。

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:~#

これで作業は完了です。非常に簡単です。(本番環境では、必ずパスフレーズを入力してください)。

または、コンソール(console.cloud.google.com)から [Compute Engine] > [VM インスタンス] に移動して、インスタンスに直接 SSH 接続することもできます。 3}、[SSH] をクリックします。

bfbc03997a41946e.png

6. Nginx をインストールする

新しく作成したインスタンス myinstance にログインし、nginx をインストールします。

$ sudo su -
# apt update
# apt install -y nginx
# service nginx start
# exit

myinstancecurl を使用して、サーバーが稼働していることをテストします。

$ 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 を見つけます。

dcc4e56e82ba2603.png

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_IPmyinstance のパブリック IP です。これにより、nginx ページが表示されます。

49b52b9354041f3b.png

7. 起動スクリプト

毎回インスタンスを設定する代わりに、起動スクリプトを使用して、起動時にインスタンスを初期化することができます。

次の内容のテキスト ファイルを startup.sh という名前で作成します(任意のテキスト エディタ(vimnano、または 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- で始まる VM インスタンスが 2 つ作成されます。

これで、作成されたすべてのインスタンスが表示されるはずです。

$ 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 には豊富な機能があります。必要に応じて、以下をご確認ください。

Google Kubernetes Engine

Google Kubernetes Engine(GKE)は、Google Cloud でホストされるフルマネージドの Kubernetes サービスです。GKE の使用を開始する際に役立つ Codelab がいくつかあります。まずはこのようなことを検討しましょう。

フィードバックをお寄せください