Google Cloud Next '22で発表されたCloud WorkstationsにVS Codeで接続するまで

# Cloud Workstationsとは
クラウドにマネージドな開発環境をセキュアに構築できるサービスです。

クラウド上に、事前に必要なソフトウェア等をインストールした構築済みの開発環境をデプロイすることで、
開発者はローカルに環境構築することなく、作業を始めることができます。

また、以下のようにセキュリティにも優れています。
- 環境に接続できるユーザはIAMで管理できる
- ソースコードやデータを各開発者のローカルに分散保存されることがなくなる
- VPC上にインスタンスを作成することから、GCのさまざまなセキュリティサービスが適応できる

# 実践
## ワークステーションをデプロイするまで
Cloud Workstationsにおいては、「ワークステーション」と呼ばれるインスタンスが開発環境の実体となります。
ワークステーションにはインスタンスのスペックや環境を定義した構成設定を紐づけます。
ワークステーションと設定ファイルはクラスタでまとめられ、管理されます。

今回はコンソールで各種コンポーネントを作成しました。

### クラスタ作成
まずはクラスタを作成します。
![make_cluster.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/a6862b50-99df-bc15-f067-f1fb19068069.png)
名前とリージョン、ワークステーションをデプロイするVPC・サブネットを指定します。
現在Cloud Workstationsは日本リージョンに対応してないので、今回は台湾リージョンを選択しました。

**Tips**
ネットワークを指定しない場合は、いつものようにVPC「default」のサブネット「default」の作成されるようです。
プロジェクト内にVPC「default」がない場合はエラーとなっています。
![cluster_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/3e3ad323-202f-930b-9ab3-78b113c468f6.png)

### 構成設定作成
次にワークステーションに紐づける構成設定を作成します。
#### 基本設定
![conf_basic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/9a5494a9-8961-b110-b19a-dae96672061f.png)
まずは構成設定の名前や属するクラスターなどを指定します。

また「Quick start workstations」という項目がありますが、
こちらは指定した数のインスタンスを待機状態にさせておくことで、ワークステーションの起動時間を早くする機能です。
ただし、待機状態のインスタンスは常時料金が発生します。
#### マシン設定
![conf_machine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/634d4b92-8a8c-7f62-ddb2-a9c5ff1f886e.png)
次に以下の設定をします
- マシンタイプ : CPU及びメモリの違う複数のマインタイプが存在するので、環境に見合ったものを指定します。
- Auto-sleep : 非アクティブになってから一定時間すると自動で停止状態になる機能です。何分（時間）後に停止するかを指定できます。

あとは「Advnced options」として主にセキュリティ関する設定が行えます。
#### 環境カスタマイズ
![conf_env.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/4567b046-42cc-997a-f3aa-9f8c5e9418a9.png)
最後にワークステーション内の環境設定を行います。
まずはコンテナのベースイメージを選択します。
今回はデフォルトのCode OSSを選択しました。

また、Persistent Diskの設定もここで行います。

### ワークステーション作成
最後にワークステーションを作成します。
といってもコンソール上だと名前と構成設定を指定するだけです。

すると最初は停止状態でワークステーションが作成されるので、これを起動させると環境に接続できるようになります。
![workstations_stop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/80eed585-36fb-5229-54c8-1b8de8dce1f0.png)

試しに起動後、ブラウザからアクセスすると以下のような感じになります。
![http.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/712ae910-9784-02db-ab73-d376e6fb1ba8.png)

## VS Codeからワークステーションに接続する
ではSSHを用いてVS Codeからワークステーションに接続しましょう。
あらかじめVS Codeには拡張機能「[Remote Development](https://code.visualstudio.com/docs/remote/remote-overview)」をインストールしておきます。

接続方法は、コンソールの以下から確認できます。
![workstations_ssh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/2f1ac8b6-a7c2-b303-5660-6093189613b2.png)

まずは以下のコマンドをローカルで実行し、TCPトンネルを確立させます。（gcloudコマンドが必要です。）
```
gcloud alpha workstations start-tcp-tunnel \
  --project=${プロジェクトID} \
  --cluster=dohara-cluster \
  --config=dohara-conf \
  --region=asia-east1 \
  dohara-workstation 22 \
  --local-host-port=:2222
```
プロジェクトIDやクラスター名は環境に合わせてください。

次に.ssh/configに以下のように接続設定を記載します。
```
Host dohara-workstations
  User user
  HostName localhost
  port 2222
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
```

するとVS Codeにて、接続先一覧として確認できるようになります。
![vscode_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/ff3c87dd-2025-0532-ea4d-0ff71275ea87.png)
最後にこちらの接続先を選択することで、ワークステーションにアクセスすることができました。
![vscode_access.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/e8847f9f-4c8b-089a-0ea7-2375f7d499b8.png)

# 最後に
本記事ではVS CodeからCloud Workstationsに接続するまでを説明しました。

ワークステーション起動中は料金が発生してしまうため、個人が普段使いをするというのはちょっと厳しい印象もありますが、
企業や組織がグループ単位で利用するにはなかなか良いサービスなのではないでしょうか。

まだプレビュー版ということもあり今後もアップデート入っていくと思うので、そちらも楽しみですね。

# 参考
- [Cloud Workstations のご紹介: クラウド上の安全なマネージド開発環境](https://cloud.google.com/blog/ja/products/application-development/introducing-cloud-workstations)