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 では Cloud 上で動作するコマンドライン環境である 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 コンソール ダッシュボードで確認します。
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
という名前のファイアウォール ルールが作成され、受信接続(--source-ranges
)が許可される IP アドレス ブロックのデフォルト リストが 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)から直接インスタンスに SSH 接続することもできます。それには、[Compute Engine] >[VM インスタンス] に移動し、[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 を使い始める際に役立つ Codelab がいくつかあります。まずはこちらをお試しください。
- Google Kubernetes Engine Codelab - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
フィードバックをお寄せください
- 簡単なアンケートにご協力ください