ハンズオンを行う Google Cloud プロジェクトのプロジェクト ID を環境変数に設定し、以降の手順で利用できるようにします。 (右辺の [PROJECT_ID] を手動で置き換えてコマンドを実行します)
export PROJECT_ID=[PROJECT_ID]
プロジェクト ID
は ダッシュボード に進み、左上の プロジェクト情報 から確認します。
gcloud beta billing projects describe ${PROJECT_ID} | grep billingEnabled
Cloud Shell の承認 という確認メッセージが出た場合は 承認 をクリックします。
出力結果の billingEnabled
が true になっていることを確認してください。false の場合は、こちらのプロジェクトではハンズオンが進められません。別途、課金を有効化したプロジェクトを用意し、本ページの #1 の手順からやり直してください。
git clone https://github.com/ssekimoto/cloud-workstations-handson.git
cd ~/cloud-workstations-handson
teachme tutorial.md
最初に、ハンズオンを進めるための環境準備を行います。
下記の設定を進めていきます。
- gcloud コマンドラインツール設定
- Google Cloud 機能(API)有効化設定
Google Cloud は、コマンドライン(CLI)、GUI から操作が可能です。ハンズオンでは主に CLI を使い作業を行いますが、GUI で確認する URL も合わせて掲載します。
gcloud コマンドライン インターフェースは、Google Cloud でメインとなる CLI ツールです。このツールを使用すると、コマンドラインから、またはスクリプトや他の自動化により、多くの一般的なプラットフォーム タスクを実行できます。
たとえば、gcloud CLI を使用して、以下のようなものを作成、管理できます。
- Google Compute Engine 仮想マシン
- Google Kubernetes Engine クラスタ
- Google Cloud SQL インスタンス
ヒント: gcloud コマンドラインツールについての詳細はこちらをご参照ください。
gcloud コマンドでは操作の対象とするプロジェクトの設定が必要です。操作対象のプロジェクトを設定します。
gcloud config set project ${PROJECT_ID}
承認するかどうかを聞かれるメッセージがでた場合は、承認
ボタンをクリックします。
Google Cloud では利用したい機能ごとに、有効化を行う必要があります。 ここでは、以降のハンズオンで利用する機能を事前に有効化しておきます。(4,5分ほどかかります) 〜finished successfully というメッセージが出たら正常に終了しています。
gcloud services enable cloudbuild.googleapis.com container.googleapis.com artifactregistry.googleapis.com clouddeploy.googleapis.com workstations.googleapis.com run.googleapis.com
GUI: API ライブラリ
コンピュートリソースを作成するデフォルトのリージョン、ゾーンとして、東京 (asia-northeast1/asia-northeast1-c)を指定します。
gcloud config set compute/region asia-northeast1 && gcloud config set compute/zone asia-northeast1-c
一定時間非アクティブ状態になる、またはブラウザが固まってしまったなどで Cloud Shell
が切れてしまう、またはブラウザのリロードが必要になる場合があります。その場合は以下の対応を行い、チュートリアルを再開してください。
cd ~/cloud-workstations-handson
teachme tutorial.md
export PROJECT_ID=[PROJECT_ID]
gcloud config set project ${PROJECT_ID} && gcloud config set compute/region asia-northeast1 && gcloud config set compute/zone asia-northeast1-c
今回の Lab 用 VPC を作成します。
gcloud compute networks create ws-network \
--subnet-mode custom
作成した VPC にサブネットを作成します。
gcloud compute networks subnets create ws-subnet \
--network ws-network \
--region asia-northeast1 \
--range "192.168.1.0/24"
Cloud NAT を設定するため、Cloud Router を作成しておきます。
gcloud compute routers create \
ws-router \
--network ws-network \
--region asia-northeast1
GKE Cluster や Cloud Workstations は外部 IP を持たせない設定となるため、Cloud NAT を設定しておきます。
gcloud compute routers nats create ws-nat \
--router ws-router \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region asia-northeast1
Cloud Workstations 用のクラスタを用意しておきます。 この作業は同一のリージョンで一度だけ必要で、作成完了まで 25 分程度かかります。
gcloud workstations clusters create cluster-handson \
--network "projects/$PROJECT_ID/global/networks/ws-network" \
--subnetwork "projects/$PROJECT_ID/regions/asia-northeast1/subnetworks/ws-subnet" \
--region asia-northeast1 \
--async
Platform Engineering の観点から、開発者に作成ずみの開発環境とサンプルとなるアプリケーションのテンプレートを提供します。 また、Platform 利用者に立場に立って、アプリケーションのデプロイを試してみます。
Cloud Workstations イメージを保管するためにレポジトリを作成します。
gcloud artifacts repositories create ws-repo \
--repository-format docker \
--location asia-northeast1 \
--description="Docker repository for Cloud workstations"
ここで、Lab-02 で使うアプリケーション用の レポジトリも作成しておきます。
gcloud artifacts repositories create spring-app \
--repository-format docker \
--location asia-northeast1 \
--description="Docker repository for spring-app"
開発者がサンプルコードを起動するためのライブラリや Code OSS 拡張機能を事前に有効化したイメージを作成します。 今回はあらかじめ用意したサンプルコードを利用します。中身は以下で確認できます。
cat workstations/Dockerfile
Cloud Build を利用して、Cloud Workstations コンテナイメージをビルドします。 (赤字でメッセージが出ることがありますが、問題ございません。)
gcloud builds submit workstations/ \
--tag asia-northeast1-docker.pkg.dev/${PROJECT_ID}/ws-repo/codeoss-spring:v1.0.0
プライベートなカスタムイメージを利用するため、Artifact Registry から Pull できる権限を持つサービスアカウントを作成しておきます。
gcloud iam service-accounts create codeoss-customized-sa \
--display-name "Service Account for codeoss-customized config"
サービスアカウントに権限を付与しておきます。今回は、Artifact Registry から Pull できる権限で十分なため、artifactregistry.reader
を付与します。
gcloud artifacts repositories add-iam-policy-binding ws-repo \
--location asia-northeast1 \
--member serviceAccount:codeoss-customized-sa@${PROJECT_ID}.iam.gserviceaccount.com \
--role=roles/artifactregistry.reader
開発者むけにカスタマイズしたコンテナイメージを利用して Cloud Workstations の構成を作成します。
gcloud workstations configs create codeoss-spring \
--machine-type e2-standard-4 \
--region asia-northeast1 \
--cluster cluster-handson \
--disable-public-ip-addresses \
--shielded-integrity-monitoring \
--shielded-secure-boot \
--shielded-vtpm \
--service-account codeoss-customized-sa@${PROJECT_ID}.iam.gserviceaccount.com \
--container-custom-image asia-northeast1-docker.pkg.dev/${PROJECT_ID}/ws-repo/codeoss-spring:v1.0.0
開発者むけに一台、Workstations を作成します。この作業は、通常、開発者ごとに行うことになります。
gcloud workstations create ws-spring-dev \
--region asia-northeast1 \
--cluster cluster-handson \
--config codeoss-spring
Lab-01 は完了となります。
GUI での作業となります。
ブラウザで新しいタブを開き、Workstations一覧を開きます。
My workstations に表示される ws-spring-dev
の 起動 をクリックします。
起動には数分程度かかります。
ステータスが、稼働中になりましたら、開始をクリックします。新しいタブで Code OSS の Welcome 画面が開きます。初回は表示に少し時間がかかります。
git よりサンプルアプリケーションを取得します。 左側の2番目のアイコンをクリック、または、Ctrl + Shift + E の入力で、EXPLORER が開きます。 Clone Repository を選択します。
上部に開いた URL バーに https://github.com/ssekimoto/gs-spring-boot.git
と入力します。
入力後、レポジトリの URL https://github.com/ssekimoto/gs-spring-boot.git
をクリックします。
(Github から複製を選択してしまうと、Github の認証が必要となりますのでキャンセルしてやり直してください)
複製するフォルダーを選択してください、はそのまま OK をクリックしてください。
続いて 複製したレポジトリを開きますか?または現在のワークスペースに追加しますか?という選択には、開く
を選択してください。
左上の3本の線のアイコンから、Terminal > New Terminal を選択します。 画面下にターミナルが現れますので、こちらで作業を実施します。
complete ディレクトリに移動します。
cd complete
アプリケーションをビルドします。
mvn clean install
ビルドしたアプリケーションをまずは Workstations 上で実行します。
java -jar target/spring-boot-complete-0.0.1-SNAPSHOT.jar
実行すると 右下に Open Preview という吹き出しが現れるので、クリックします。 続いて、Open をクリックするとシンプルなアプリケーションにアクセスできます。 完了したら、ターミナルに戻り、Ctrl-C でアプリケーションを停止しておきます。
引き続き Cloud Workstations で作業をします。 サンプルアプリケーションと一緒に、Dockerfile も Golden Path として git から提供されています。 以前の手順と同様に Cloud Build でコンテナの作成を行います。
Workstations 上のターミナルで実行します。ディレクトリを移動しておきます。
cd /home/user/gs-spring-boot/complete
Workstations 上では Google Cloud にログインに別途ログインする必要があります。
gcloud auth login
表示される URL を Ctrl + クリックで Open、もしくはコピー&ペーストで別のタブで開きます。
すると Google アカウントへのログイン画面になるため、ログインを実施します。
最後に表示される 4/0
から始まる verification code をコピーして、Cloud Workstations の ターミナルに貼り付けます。
正常にログインが完了すると
You are now logged in as [アカウント]
と表示されます。
また、Cloud Shell と同じように以下設定を行います。
export PROJECT_ID=[PROJECT_ID(自身のIDに置き換えます[]は不要です)]
gcloud config set project ${PROJECT_ID}
提供されている Dockerfile を利用して、コンテナ化を行います。
gcloud run deploy spring --source=.
途中、インタラクティブに y/N の確認がありますので、 y をタイプして、Enter を入力してください。 数分後、環境に URL が払い出されますので、払い出された URL をコピーして、 ブラウザの別のタブでアクセスします。 URLの出力例は以下です。
Done.
Service [spring] revision [spring-00001-ntq] has been deployed and is serving 100 percent of traffic.
Service URL: https://spring-[].a.run.app
Greeting というメッセージが確認できましたら、本ハンズオンは完了となります。
これで、ハンズオンは完了となります。