🦔

一般提供された Cloud Workstations の更新まとめ (2023年5月)

2023/05/10に公開

こんにちは。クラウドエースの阿部です。
この記事では以前紹介した Google Cloud の開発環境サービスである Cloud Workstations について説明します。
前回の紹介記事は下記リンクからご覧下さい。

https://zenn.dev/cloud_ace/articles/889f7b6619ba76

前回紹介から追加された主な機能

前回記事から追加された機能についてざっと紹介していこうと思います。

  • 一般提供(General Availability)
  • GPUサポート
  • BeynodCorp Enterprise 統合
  • Posit Workbench (RStudio) サポート
  • 顧客管理の暗号鍵(CMEK)サポート
  • Cloud Workstations プラットフォームログ出力
  • ワークステーションコンテナログ出力
  • カスタムスナップショット
  • 東京リージョン(asia-northeast1)サポート
  • Terraform Provider のサポート

一般提供(General Availability)

2023年5月11日に Google I/O のテクニカルセッションで一般提供になったことが発表されました。

https://youtu.be/hVTnW-rH5Vc

一般提供になったことで、 Cloud Workstations の SLA も提供されます。これにより、有償サポート等を利用することが可能です。
SLAの詳細はドキュメントを参照してください。

なお、一般提供されたことにともない、Public Preview 期間で無料だった Cloud Workstations のワークステーション管理手数料とコントロールプレーンの料金が発生します。これらの料金は2023年7月1日から発生する予定です。料金の詳細はドキュメントを参照してください。

GPU サポート

ワークステーションで GPU が使用可能になりました。これにより、機械学習モデルの作成等の開発もサポートされたことになります。
ただし、2023年5月11日時点では、コンソールでGPUを選択することができず、 REST API または gcloud コマンドで作成する必要があります。

BeynodCorp Enterprise 統合

ワークステーションの操作に BeyondCorp Enterprise を使った制限を設定できるようになりました。
BeyondCorp Enterprise 統合の概要、設定方法についてはこちらのドキュメントを参照してください。

なお、ドキュメントによると、2023年5月11日時点における BeyondCorp Enterprise による制御は Cloud Workstations の REST API に対する操作、つまりワークステーションの作成や設定変更のみであり、ワークステーションの利用には制限がかけられないようです。
ワークステーションの利用にも制限がかけられるようになると、組織で認証したデバイスでのみの運用や限られた外部IPからのアクセスに絞るといった、開発環境をセキュアに運用する施策も提供できるため今後に期待です。

Posit Workbench (RStudio) サポート

Cloud Workstations では事前設定IDEとして Code OSS と Jetbrains IDE をサポートしていましたが、これに Posit Workbench が追加されました。
Posit Workbench は R および Python 向けの統合開発環境であり、前述の GPU サポートと併用することで機械学習モデルの開発をサポートしていくのだと思います。
Posit Workbench の利用には別途ライセンスの購入が必要なようです。利用方法についてはこちらのドキュメントを参照してください。

顧客管理の暗号鍵(CMEK)サポート

Cloud Workstations のディスクに CMEK を設定できるようになりました。CMEK の概要についてはこちらのドキュメントを参照してください。また、Cloud Workstations における CMEK 設定方法はこちらのドキュメントを参照してください。
Cloud Workstations で CMEK を有効にした場合、以下のディスクが CMEK の対象になります。

  • ワークステーションを実行するインスタンスのブートディスク
  • ワークステーションに接続するホームディレクトリのデータディスク

CMEK 設定時の補足

CMEK ドキュメントの設定手順では、「Compute Engine デフォルトサービスアカウント」に「クラウド KMS 暗号鍵の暗号化/復号化」ロール(roles/cloudkms.cryptoKeyEncrypterDecrypter)を付与することになっています。
ただ、検証した限りではカスタムサービスアカウントを作成し、そのアカウントに「クラウド KMS 暗号鍵の暗号化/復号化」ロールを付与してワークステーションの構成で設定すれば問題無く CMEK を設定することが可能でしたので、必ずしも Compute Engine デフォルトサービスアカウントを使う必要はなさそうです。

Cloud Workstations プラットフォームログ出力

Cloud Workstations のプラットフォームログを出力するようになりました。
現時点では、下記の動作が対象です。

  • ワークステーションインスタンスの追加
  • ワークステーションインスタンスにホームディレクトリディスクを追加

元々、 Compute Engine インスタンスの管理アクティビティ監査ログは出力されるため、インスタンスの作成やディスクリソースの追加をログから確認することは可能でしたが、 Cloud Workstations として正しく動作しているか、という確認も可能になりました。

Cloud Workstations プラットフォームログ出力は管理アクティビティに分類されるログのため無効化することはできませんが、ログ保管の課金は無料です。

ワークステーションコンテナログ出力

ワークステーションで動作しているコンテナのログをCloud Loggingに出力できるようになりました。これにより、実行中のコンテナで何らか動作に問題があった場合のデバッグ等に役立てることができます。
設定手順はこちらのドキュメントに記載されています。

なお、ドキュメントでは logging.buckets.write のパーミッションを持つロールを付与さればよいと記載されていますが、筆者が確認したところ実際には動作しませんでした。代わりに、「ログ書き込み」(roles/logging.logWriter)ロールを付与することで出力されるようになりました。

カスタムスナップショット

ホームディレクトリにマウントするデータディスクに、空のディスクではなくカスタムのスナップショットを指定することができるようになりました。この設定により、バックアップしておいたスナップショットから復元することが可能になります。
ただ、記事執筆時点では REST API からのみ設定が可能であり、操作手順を記したドキュメントもないため、設定の難易度が高いと感じました。

また、スナップショットの指定はワークステーション構成で設定するようになっていますが、運用上は構成から設定させるよりも、既に稼働中のワークステーション設定から復元できるような操作になっていると嬉しいと思います。

東京リージョン(asia-northeast1)サポート

これはシンプルに嬉しいですね。前回のブログ記事の内容を検証した際は台湾リージョン(asia-east1)を使用しましたが、若干レイテンシが高かったためか IntelliJ Ultimate の動作が若干重く感じましたが、東京リージョンで検証したときはレイテンシが改善されていました。(あくまで筆者の環境での数値ですが、台湾リージョンのレイテンシが平均60msで、東京リージョンが平均20msといったところです。)

また、一般提供になったことで利用可能リージョンも拡大し、2023年5月11日時点で全18リージョンで利用可能になっています。

Terraform Provider のサポート

Terraform で Cloud Workstations を作成・管理できるようになりました。
ちなみに、今回の記事を執筆するために作成した Cloud Workstations の検証も、Terraoform を利用しています。

以下3つのリソースを組み合わせることでワークステーションを設定可能です。

なお、Provider version v4.64.0 で検証した時点では、リソース作成時に以下のような注意が必要でした。

  • google_workstations_workstation_config でワークステーションのタイムアウトが設定できません。この件については Issue #14179 で報告されており、既にPRがマージされているようですので、そのうち改善されると思います。
  • google_workstations_workstation_config でデータディスクのスナップショットを指定できません。この件については Issue #14265 で報告されています。
  • google_workstations_workstation_configcontainer.image で指定するコンテナイメージは、 gcloud コマンドの container-predefined-image 引数で設定するような intellij といった名称は使用できず、 asia-northeast1-docker.pkg.dev/cloud-workstations-images/predefined/intellij-ultimate:latest のような Artifact Registry の完全なイメージ名形式を使用する必要があります。
  • google_workstations_workstation_configgoogle_workstations_workstation を作成済みの状態で google_workstations_workstation_config だけを変更した場合、 Terraform の依存関係の解決仕様で、 google_workstations_workstation は差分が発生しませんが、実際は両方のリソースが削除されたあと google_workstations_workstation_config のみが作成される状態になるため、ちょっと変な状態になります。 google_workstations_workstation リソース側で lifecycle.replace_triggered_by を使って、 google_workstations_workstation_config の変更を検知してワークステーションリソースも Terraform で処理させるように依存関係を明示するとよいと思います。

その他

前回の記事で、「停止状態のワークステーションをコンソールから手動スタートしなくても、IDEにアクセスしたら自動起動して欲しい」とつぶやいたのですが、 Jetbrains Gateway 経由で接続する場合は自動起動するようになっていました。(残念ながら Code OSS はそうなっていませんでしたが……)

まとめ

一般提供された Cloud Workstations の機能追加について紹介しました。
Google I/O 2023 での発表、GPU や BeyondCorp Enterprise のサポートといった面から、相当力を入れているプロダクトだと感じます。

Discussion