Google Cloud Compute Engineを使ってみました

みなさん、Google Cloudはよくお使いになられてますか？
今回は初心者向けにCompute Engineの使い方について触れたいと思います。
AWSなど、他クラウドサービスを使った経験がある方なら、非常に触りやすいと思います。
今回は、2つの異なるゾーンに仮想マシン（VM）インスタンスを作成し、ping、ssh、HTTPを使用してこれらのマシンに接続します。

## 全体像
①Google Cloud Platform（GCP）Console を使用して Compute Engine 仮想マシンを作成する。

②gcloud コマンドライン インターフェースを使用して Compute Engine 仮想マシンを作成する。

③2つのインスタンス間を接続する。

###①Google Cloud Platform（GCP）Console を使用して Compute Engine 仮想マシンを作成する。

左側のナビゲーション メニューで、[Compute Engine] > [VM Instance] をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/2628c849-5b68-fdcf-710e-0e75e0e6423b.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/34c67f0b-8414-dfe9-7466-f156aa82f049.png)

![スクリーンショット 2021-07-16 20.35.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/109f2b07-b988-57f0-e4d0-582180447909.png)


[CREATE] をクリックします。

[Name] は任意で決めます。

![スクリーンショット 2021-07-16 20.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/f7aba1e9-f462-1972-5f59-53996da0b924.png)

[Region] と [Zone] は 任意で大丈夫ですが、ここでは、us-cenral-1,us-cenral-1-a を選択します。
[Machine Type] は、デフォルトのままにします。
[Boot Disk] で、表示されるイメージが「Debian GNU/Linux 10 (Buster)」でない場合は、[Debian GNU/Linux 10 (Buster)] を選択します。

![スクリーンショット 2021-07-16 20.36.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/fad9cd5f-da6d-3c2b-b218-353706bf797e.png)

[Identity and API access] の設定は変更せずにそのままにします。
[Firewall] で、[Allow HTTP Traffic] をオンにします。
その他のデフォルト設定はすべて変更せずにそのままにします。
[CREATE]をクリックします。

![スクリーンショット 2021-07-16 20.37.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/b8fd3450-3f64-aac6-1b1e-16ea7690441d.png)
 
これでインスタンスを作成できました。

### ②gcloud コマンドライン インターフェースを使用して Compute Engine 仮想マシンを作成する。

GCP Console の右上のツールバーにある「Cloud Shell をアクティブにする」ボタンをクリックします。

![スクリーンショット 2021-07-16 20.37.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/cca94311-03be-6f7a-7cfa-8bdd6bbe71ea.png)

[Continue] をクリックします。

![スクリーンショット 2021-07-16 20.37.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/210c7e29-4e7c-2d8e-b1fd-71acc8f586a4.png)

[Authorize]してください。

![スクリーンショット 2021-07-16 20.38.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/86b795f3-0447-21d5-48cf-0e9a180a640c.png)

```
$ gcloud compute zones list | grep us-central1
```

リストから、vm一号機を作成したゾーン以外を選択します。
私はus-central1-aを割り当てたので、us-central1-bを選択します。
選択したゾーンをデフォルトのゾーンとして設定するには、選択したゾーンをコマンド「gcloud config set compute/zone」の後に入力します。

```
$ gcloud config set compute/zone us-central1-b
```

そのゾーンに my-vm-2 という VM インスタンスを作成するには、次のコマンドを実行します。

```
gcloud compute instances create "my-vm-2" \
--machine-type "n1-standard-1" \
--image-project "debian-cloud" \
--image-family "debian-10" \
--subnet "default"
```

注: VM が起動して完全に使用可能になるには、約 2 分かかる場合があります。
Cloud Shell を閉じるには、次のコマンドを実行します。

```
$ exit
```

![スクリーンショット 2021-07-16 20.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/4a30a935-1a66-bc7f-ed61-1dd91fce6a25.png)

### ③2つのインスタンス間で接続する。

ナビゲーション メニューで、[Compute Engine] > [VM Instance] をクリックします。

作成した2つのVMインスタンスが表示されます。それぞれ別のゾーン内にあります。

これらの 2 つのインスタンスの内部 IP アドレスは、最初の 3 バイトが共通しています。
これらは異なるゾーンにあっても、Google Cloud VPC の同じサブネット上に存在します。

![スクリーンショット 2021-07-16 20.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1740345/4a30a935-1a66-bc7f-ed61-1dd91fce6a25.png)

my-vm-2インスタンスでコマンドプロンプトを開くには、VMインスタンスリストの行で[SSH]をクリックします。

次に ping コマンドを使用して、my-vm-2 がネットワークを介して my-vm-1 に到達できることを確認します。

```
$ ping my-vm-1.us-central1-a
```

ping コマンドの出力により、my-vm-1 の完全なホスト名が my-vm-1.us-central1-a.c.PROJECT_ID.internal であることがわかります。
my-vm-1.c.PROJECT_ID.internal の PROJECT_ID は、Google Cloud Platform プロジェクトの名前です。
GCPでは、VM インスタンスの内部IPアドレスのドメインネームサービス（DNS）解決が自動的に提供されます。

```
Ctrl+C キーを押して ping コマンドを中止します。
```

次の ssh コマンドを使用して、my-vm-1 のコマンド プロンプトを開きます。

```
$ ssh my-vm-1.us-central1-a
```

信頼性が不明なホストへの接続を続行するかどうかを確認するメッセージが表示されたら、「yes」を入力して続行することを確認します。

my-vm-1 のコマンド プロンプトで、Nginx ウェブサーバーをインストールします。

```
$ sudo apt-get install nginx-light -y
```

viを使用して、ウェブサーバーのホームページにカスタム メッセージを追加します。

```
$ sudo vi /var/www/html/index.nginx-debian.html
```

矢印キーを使用して、カーソルを h1 ヘッダーのすぐ下の行に移動します。
次のようなテキストを用意し、任意の文字列に置き換えます。

```
aを押して、入力モードにします。
```

```
Hi from Tokyo
と入力します。
```

```
:wq と押して、保存します。
```


ウェブサーバーが新しいページを提供していることを確認します。my-vm-1 のコマンド プロンプトで、次のコマンドを実行します。

```
$ curl http://localhost/
```

レスポンスは、ウェブサーバーのホームページの HTML ソースになります。これには先ほどのカスタム テキスト行も含まれます。

my-vm-1 のコマンド プロンプトを終了するには、次のコマンドを実行します。

```
$ exit
```

my-vm-2 のコマンド プロンプトに戻ります。

my-vm-2 が my-vm-1 のウェブサーバーに到達できることを、my-vm-2 のコマンドプロンプトで確認するには、次のコマンドを実行します。

```
＄ curl http://my-vm-1.us-central1-a/
```

レスポンスはここでも、カスタム テキスト行を含むウェブサーバーのホームページの HTML ソースになります。

ナビゲーション メニューで、[Compute Engine] > [VM Instance] をクリックします。

my-vm-1 の外部 IP アドレスをコピーして、新しいブラウザタブのアドレスバーに貼り付けます。
カスタム テキストを含むウェブサーバーのホームページが表示されれば、OKです！