Google Cloud Shellのカスタム環境をGoogle Cloud Shellでcloudshell envコマンドを使って用意する

Google Cloud Shell は Cloud Registory に登録した Dockerイメージ をシェルとして利用できる。これをカスタム環境 [en]と呼ぶ。

カスタム環境の開発には Google Cloud Shell に予めインストールされているcloudshell envコマンドが便利。 cloudshell env コマンドを使えば Cloud Shell 上で Dockerイメージをビルド、実行して試した後に GCP 上で自動ビルド、コンテナレジストリへのプッシュまでできる。

自動ビルド、デプロイには、Cloud Build と Cloud Source Repositories、Container Registory が使われる。

用意するもの

課金が有効になった Google Cloud Platform のプロジェクトが必要。

以下の API を有効にしておく。

  • Cloud Source Repositories
  • Cloud Build
  • Container Registory

開発環境を作る

以下は Google Cloud Shell での作業。

# 現在のセッションにGCPプロジェクトを設定する
$ gcloud config set project $PROJECT_ID

$ cloudshell env create-custom-image $REPO_NAME

$ cd $REPO_NAME

cloudshell env コマンドを実行するには、現在のセッションが GCPプロジェクトにログインしている必要がある。gcloud コマンドで現在のセッションを GCPプロジェクトにログインする。$REPO_NAMEは作成するカスタム環境の名前になる。

env create-custom-imageコマンドによって Git リポジトリが作成される

  • Cloud Source Repositories に新規 Git リポジトリが作成される
    • Cloud Shell の ~/$REPO_NAME に クローンされて origin として設定される
    • Dockerfile と Cloud Build のビルド構成ファイルが含まれる
  • Cloud Build に自動ビルドのトリガーが2つ作成される
    • このリポジトリが更新で発火
    • Goolgeが提供する Cloud Shell のベースイメージの更新で発火

作成されたことによって最初の自動ビルドが Cloud Build で実行される。ビルドが完了したら Container Registory にプッシュされる。ビルドの詳細は作成された cloudbuild.yaml に書かれている。

create-custom-image 以外の cloudshell env コマンドはこのリポジトリディレクトリで実行する必要がある。

Cloud Shellの「環境構成.イメージの場所」を変更する

cloudshell env update-default-imageで Cloud Shellインスタンスの Dockerイメージの取得元をカスタム環境イメージに設定する。作業ディレクトリのコードから自動ビルド、プッシュされる先の Container Registory のパスは cloudshell env get-image-nameで表示できる。

Dockerfileを編集する

Dockerfile を編集したらcloudshell env build-localしてビルドできるか確認する。ビルドできたらcloudshell env runでコンテナの中に入って内容を確認する、exit でコンテナからログアウトできる。

Dockerイメージを更新する

Cloud Source Repositories のリポジトリが origin として設定済みになっているので git push origin master すれば自動ビルドが実行されて Dockerイメージが更新される。

cloudshell env pushを使えば cloudshell env build-local でビルドした Dockerイメージを直接 Container Registory にプッシュすることもできる。

料金

Container Registory が使用する Cloud Storage でイメージサイズに応じた料金がかかる。Cloud Shell のベースイメージが現時点で4.5GBなので最低でも月に13円ぐらいかかる。

Cloud Build が120分/日までは無料で使える。参考として、monoのランタイムだけを追加でインストールした場合、1回のビルドが10分以内に終了した。