【Google Cloud】手を動かして学ぶCloud Workstations
この記事で伝えたいこと(ポイント)
- Cloud Workstationsの概要を学べるよ
- Cloud Workstationsを使ってハンズオンをしているよ
はじめに
この記事ではGoogle Cloudが提供するCloud Workstationsをハンズオンで学習していく内容となっています。
主な内容としてはセットアップや使い方を中心に書きます。(忘れやすいことなど)
誤りなどがあれば修正していく想定です。
Cloud Workstationsとは
Cloud WorkstationsはGoogle Cloudが提供する開発環境を提供するサービスです。
いわゆるCloud IDE(Integrated Development Environment)です。
Google Cloud上で開発環境を構築してコードの編集やデバッグ、ビルド、デプロイなどを実行できます。
Cloud Workstationsの仕組み
Cloud Workstationsの仕組みとしてはCode-OSSが使われています。
※デフォルトで起動される環境ではCode-OSSをベースにしたエディタが起動されます。
参考:microsoft/vscode: Visual Studio Code
なお、Cloud Workstationsはコンテナイメージで動作しています。そのための事前構築イメージが用意されています。
事前構成済みのベースイメージ
Cloud Workstationsの料金
料金については公式ドキュメントにあるので細かいことは省略しますが、主に以下のような料金がかかります。
- Cloud Workstationsの利用料金
- コントロールプレーン料金
- 永続ディスクストレージ料金
- その他の費用
参考:料金 | Cloud Workstations | Google Cloud
基本的にCloud Workstationsの料金は使用した時間に応じて課金されるということを覚えておきましょう。
なぜCloud Workstationsを使うのか
Cloud Workstationsを使う理由としては以下のような理由が考えられます。
- 開発環境をローカル環境上に構築する必要がないため、自由に開発環境を構築できる
- 開発環境がクラウド上にあり、許可されたユーザーがアクセスできるため、セキュリティを担保しながらチームでの共同作業が容易になる
- 開発環境をいつでも簡単にリセットできるため、環境の不整合を防げる
ですが、一方でインターネット接続が必要なため、オフラインでの作業ができないというデメリットもあります。
また、Cloud WorkstationsはGoogle Cloudのサービスであるため、Google Cloudのアカウントが必要です。
補足:他のCloud IDE(GitHub Codespaces)
Cloud Workstations以外にもさまざまなCloud IDEがあります。
代表的なサービスとしてはGitHub Codespacesがあります。
GitHub CodespacesはGitHubが提供するCloud IDEで、GitHub上のリポジトリを直接編集できます。
※このzenn.devのリポジトリもGitHub上にあるのでCodespacesで編集しています。
Cloud WorkstationsとGitHub Codespacesの違いとしては、Cloud WorkstationsはGoogle Cloud上で動作するため、Google Cloudのサービスと連携しやすいという点があります。もちろん、GitHub CodespacesもGoogle Cloudのサービスと連携できますが、Cloud Workstationsの方が連携しやすいです。
Cloud Workstationsの構成要素
Cloud Workstationsは以下のような構成要素で構成されています。
- クラスター
- ワークステーションの構成
- ワークステーション
クラスター、ワークステーションの構成、ワークステーションの順番に作成する必要があります。
ハンズオン
ここからは実際にCloud Workstationsを使ってみます。
おおまかな流れとしては以下のとおりです。
- クラスターを作成する
- ワークステーションの構成を作成する
- ワークステーションを作成する
- 環境を起動する
- Visual Studio CodeのRemote SSH拡張機能を使って環境に接続する
Google Cloud ConsoleからCloud Workstationsの画面を開く
Cloud Workstationsの画面を開くにはGoogle Cloud ConsoleからCloud Workstationsの画面を開きます。
まずはGoogle Cloud Consoleにログインします。
検索ボックスに「Cloud Workstations」と入力して、Cloud Workstationsの画面を開きます。
クラスターを作成する
次にクラスターを作成します。クラスターはCloud Workstationsの基盤となる部分です。
クラスターを作成するには、Cloud Workstationsのクラスタ管理画面から作成
をクリックします。
クラスターを作成する場合は以下の情報を設定します。
- クラスター名
- リージョン
- ネットワーク
- ゲートウェイ
app-dev-cluster
という名前のクラスターをasia-northeast1
に作成します。
ネットワークを設定します。今回はdefaultのVPCネットワークを使用しますが、必要に応じてカスタムVPCネットワークを作成して使用することもできます。
また、ゲートウェイについては今回はパブリックゲートウェイを使用しますが、必要に応じてプライベートゲートウェイを使用することもできます。
最後に作成
をクリックしてクラスターを作成します。クラスターの作成には時間がかかります。しばらく待ちましょう。
ワークステーションの構成を作成する
クラスターの作成が完了したら、次にワークステーションの構成を作成します。
ワークステーションの構成はCloud Workstationsの環境を定義する部分です。
ワークステーションの構成をクリックします。
ワークステーションの構成を作成するには、作成
をクリックします。
ワークステーションの構成を作成する場合は以下の情報を設定します。
- ワークステーションの構成名
- クラスター
- クイックスタートの選択
- クイックスタートのプールサイズ
app-dev-config
という名前でワークステーションの構成を作成します。
クラスターは先ほど作成したapp-dev-cluster
を選択します。
それ以外にもマシン設定、環境設定、ユーザと権限を設定することができますが、今回はデフォルトのままで問題ありません。
デフォルトの設定値は以下のとおりです。
-
マシン設定
- マシンタイプ:e2-standard-4
- GPUなし
-
ゾーン
- asia-northeast1-a
- asia-northeast1-c
-
費用の削減
- 自動スリープ
- 2時間操作がなかった場合
- 自動シャットダウン
- 12時間
- 自動スリープ
-
許可するポート
- ポート範囲1
- 22
- ポート範囲2
- 80
- ポート範囲3
- 1024-65535
- ポート範囲1
-
詳細オプション
- 無効
- パブリック IP アドレスを無効にする
- ネストされた仮想化を有効にする
- Confidential VMs サービス
- セキュアブートを有効にする
- vTPM を有効にする
- 整合性モニタリングを有効にする
- 有効
- SSHを無効にする
- 無効
-
暗号化
- Google が管理する暗号鍵
-
環境設定
- ベースイメージのコードエディタ
- サービスアカウント
- デフォルトのCompute Engineサービスアカウント
- 永続ディスクの設定
- 空の永続ディスクを新規作成する
- Balanced
- 200GB
- Delete
- 無効
- エフェメラル ディスクをアタッチする
- 空の永続ディスクを新規作成する
-
コンテナの詳細オプション
- 空白のまま
- 作業ディレクトリ
- ユーザとして実行
- コマンド
- 設定なし
- 引数
- 環境変数
- 空白のまま
ワークステーションを作成する
次に作成済のワークステーションの構成を使ってワークステーションを作成します。
ワークステーションをクリックします。
ワークステーションを作成するには、ワークステーションを作成
をクリックします。
今回はapp-dev-workstation
という名前のワークステーションを作成します。
名前と表示名にapp-dev-workstation
を入力します。構成には先ほど作成したapp-dev-config
を選択します。
入力が完了したら作成をクリックします。
ワークステーションの作成には時間がかかります。しばらく待ちましょう。
環境を起動する
ワークステーションの作成が完了したら、環境を起動します。
起動には時間がかかります。しばらく待ちましょう。
ワークステーションの作成が完了すると、ステータスが稼働中
になります。
tcpトンネルを作成して環境に接続する
gcloudコマンドでtcpトンネルを作成済のワークステーションに作成します。
今回は環境変数を使った方法で接続します。まずは環境変数を設定します。
設定する環境変数は以下のとおりです。
GOOGLE_CLOUD_PROJECT
GOOGLE_CLOUD_LOCATION
gcloudの初期設定が完了している場合は以下のコマンドを実行することで環境変数を設定できます。
ターミナルを起動して、以下のコマンドを実行します。
export GOOGLE_CLOUD_LOCATION=asia-northeast1
export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
次にgcloudコマンドを使ってCloud Workstationsに接続します。
gcloudコマンドを使ってCloud Workstationsに接続するには、以下のコマンドを実行します。
gcloud workstations ssh \
--project=$GOOGLE_CLOUD_PROJECT \
--cluster=app-dev-cluster \
--config=app-dev-config \
--region=$GOOGLE_CLOUD_LOCATION \
app-dev-workstation
実行結果
Picking local unused port [63393].
Listening on port [63393].
Warning: Permanently added '[localhost]:63393' (ED25519) to the list of known hosts.
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.6.72+ x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
user@app-dev-workstation:~$
次にgcloudコマンドを使ってtcpトンネルを作成します。
gcloudコマンドを使ってtcpトンネルを作成するには、以下のコマンドを実行します。
gcloud workstations start-tcp-tunnel \
--project=$GOOGLE_CLOUD_PROJECT \
--cluster=app-dev-cluster \
--config=app-dev-config \
--local-host-port=:63576 \
--region=$GOOGLE_CLOUD_LOCATION \
app-dev-workstation 22
実行結果
Listening on port [63576].
tcpトンネルが作成されるとリモートホストは63576ポートで待機します。この状態を維持したまま、次の手順に進みます。
Visual Studio CodeのRemote SSH拡張機能を使って環境に接続する
次にVisual Studio CodeのRemote SSH拡張機能を使ってCloud Workstationsに接続します。
※Remote SSH拡張機能をインストールしていない場合は、インストールしてください。
Remote SSH拡張機能を使ってCloud Workstationsに接続します。
具体的な手順はCloud Workstations ホストに接続するを参考にしてください。
接続の際はuser@localhost:63576
を指定して接続します。
user@localhost:63576
接続が完了すると、VSCodeを経由してCloud Workstationsに接続されます。
まとめ
Cloud Workstationsについて学ぶことができました。
Cloud WorkstationsはGoogle Cloudが提供するCloud IDEで、開発環境をクラウド上に構築できます。
Cloud Workstationsを使うことで、開発環境をローカル環境上に構築する必要がなくなり、自由に開発環境を構築できるようになります。
また、Gemini Code Assistと統合されているため、Geminiを活用した開発が可能です。
Discussion