1. はじめに
皆様、こんにちは。本日はご参加いただきありがとうございます。 Google Compute Engine を学習するなら、
この Codelab では、サンプルの Guestbook アプリケーションを使用して 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 を参照(通常は
PROJECT_ID
として識別)する必要があります。気に入らない場合は、ランダムな ID を新たに生成するか、ご自身の ID で以下を確認してください。利用可能。プロジェクトの作成後は「フリーズ」されます。 - 第 3 の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、ドキュメントをご覧ください。
- 次に、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 で動作します)。
- 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
これにより、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] をクリックします。
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-
で始まる 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 には豊富な機能があります。必要に応じて、以下をご確認ください。
- プリエンプティブル 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 の使用を開始する際に役立つ Codelab がいくつかあります。まずはこのようなことを検討しましょう。
- Google Kubernetes Engine Codelab - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
フィードバックをお寄せください
- 簡単なアンケートにご協力ください