Google Compute Engine に Windows 環境を作ってリモートデスクトップ接続してみた

# はじめに

友人（[@digital24s](https://twitter.com/digital24s) さん）に誘われて、EC2 と Azure に Windows 環境を作ってリモートデスクトップ接続するまで、一緒にトライしました。

[Azure Virtual Machines に Windows 環境を作ってリモートデスクトップ接続してみた #Azure - Qiita](https://qiita.com/tinymouse/items/82a67acb29c71ac9938e)

さらに Google の Compute Engine サービスも、トライすることにしました。

# Google Compute Engine に Windows 環境を作ってリモートデスクトップ接続する

以下の記事を参考にしました。

[【GCP】Windows 環境構築&リモートデスクトップで接続する方法](https://1e100.4watcher365.dev/google-cloud/google-cloud-platform/gcp-windows-rdp/)

[GCPでWindows ServerのVMを構築＆アクセスする方法 - GiXo Ltd.](https://www.gixo.jp/blog/22395/)

## プロジェクトを作成する

### プロジェクトを作成する

以下の項目を指定してプロジェクトを作成します。

* 名前：任意
* ID：任意

### 「Compute Engine API」を有効にする

作成したプロジェクトを選択します。
そして「Compute Engine API」を有効にしておきます。

## VPC を作成する

### VPC を作成する

「Compute Engine API」を有効にすると、プロジェクトに VPC「default」が自動で作成されます。
今回はこれを使用します。

### サブネットを作成する

VPC「default」には、サブネット「default」が自動で作成されています。これを使用することにします。

### インターネットゲートウェイとルートテーブルを作成する

EC2 ではインターネットゲートウェイを作成して、仮想ネットワーク内宛「以外」の通信をインターネットゲートウェイに向くよう設定するルートテーブルを作成しました。
GCP では、デフォルトのインターネットゲートウェイとルートテーブルが作成されています。これを使用します。

参考：[Google CloudのVPCを基礎から始める](https://zenn.dev/google_cloud_jp/articles/google-cloud-vpc-101)

## VM インスタンスを作成する

### 仮想マシンの設定する

以下の項目を指定して VM インスタンスを作成します。

* 名前：任意
* リージョン：選択
* ゾーン：選択

リージョンは、自分に近いところにします。リモートデスクトップ接続して操作したときの反応に影響します。日本国内が望ましいのですが、単価が高いのが悩むところです。

### マシンの構成を設定する

以下の項目を設定します。

* ファミリー：汎用
* シリーズ：E2
* タイプ：e2-standard-2 (2 CPU 8 GB メモリ)

タイプつまり性能は、自分の用途に合わせて決めます。

* 可用性ポリシー：標準

可用性ポリシーは、サーバ機のように常時安定稼動が必要ないなら「スポット」もいいでしょう。単価が安くできます。

### ブートディスクの設定する

「変更」実行して以下の項目を設定します。

* OS：Windows Sever
* バージョン：2022 Datacenter
* ブートディスクの種類：標準永続ディスク
* サイズ：50GB

バージョン、ディスクの種類とサイズは、自分の用途に合わせて決めます。

残りの項目は既定のままで進めます。

### ファイアウォールの設定する

以下の項目を設定します。設定に従ってファイアウォールが作成されます。

* HTTP トラフィックを許可する
* HTTPS トラフィックを許可する

### ネットワークの設定する

仮想マシンのネットワークの設定します。

* ネットワーク：「default」が選択されている
* サブネットワーク：「default」が選択されている

参考：[VPC ネットワーキングと Google Compute Engine を使ってみる | Google Cloud Skills Boost](https://www.cloudskillsboost.google/focuses/41750?locale=ja&parent=catalog)

残りの項目は既定のままで進めます。

### IP アドレスの設定する

予め IP アドレスを作成しておいて仮想マシンに適用することもできますが、仮想マシンの設定の時点で以下の設定すると IP が作成されます。

* プライマリ内部 IPv4 アドレス：エフェメラル（自動）
* 外部 IPv4 アドレス：静的 IP アドレスを予約

以下の項目を指定して静的 IP アドレスを作成します。

* 名前：任意

参考：[GCP Compute Engineで静的IPアドレスを割り当てる | yusuke.blog](https://yusuke.blog/2017/12/16/1993)

静的アドレスを設定すると、維持費用が掛かります。費用を抑えるために、動的＝エフェメラルの設定にして、起動した時点で管理画面でアドレスを確認して、リモートデスクトップ接続に使用する運用でも構いません。

### その他の設定する

その他の設定は既定のままで進めます。

### VM インスタンスを起動する

作成した VM インスタンスを選択して「起動」実行します。

## リモートデスクトップ接続する

### ファイアウォールを追加する

RDP でリモートデスクトップ接続できるようにしておきます。
以下の項目を指定してファイアウォールを作成します。

* 名前：任意
* ログ：オフ
* ネットワーク：「default」を選択
* 優先度：1000
* トラフィックの方向：上り
* 一致したときのアクション：許可
* ターゲット：ネットワーク上の全てのインスタンス
* ソースフィルタ：ソースタグ

参考：[Google Compute Engineのファイヤーウォールを理解する #gcpja | DevelopersIO](
https://dev.classmethod.jp/articles/gce-firewall/)

### 接続するユーザとパスワードを設定する

EC2 の Windows 環境は管理者アカウントのユーザ「Administrator」とパスワードが、インスタンスの作成時点で自動でセットされます。
Google Compute Engine は、リモートデスクトップ接続に使うユーザアカウントを改めて設定し、パスワードを確認します。

起動している VM インスタンスを選択して「Windows パスワードを設定」します。

* ユーザ名：任意
* パスワード：設定される

### 接続の設定を確認する

起動している VM インスタンスを選択して「接続」の設定します。
以下のいずれかの方法で接続できます。

* Chrome RDP を使う
* Cloud IAP を使って IAP Desktop アプリで接続する
* Cloud IAP を使って RDP クライアントで接続する
* 外部 IP アドレスを設定して RDP クライアントで接続する
* Cloud VPN または Cloud Interconnect を使って RDP クライアントで接続する 

このうち「外部 IP アドレスを設定して RDP クライアントで接続する」ことにします。

### リモートデスクトップ接続する

接続元の環境で RDP クライアントツール（Windows なら「リモートデスクトップ接続」）を起動します。
以下の情報を使って接続してログインします。

* 接続先：前述の設定画面で取得した IP アドレス
* ユーザ名：前述の設定画面で設定したユーザ名
* パスワード：前述の設定画面で設定したパスワード