概要
このラボでは、AI を活用した Google Cloud のコラボレーター、Gemini を使用して、Google Kubernetes Engine(GKE)内の複数のマイクロサービスについてログを調査し、ビルド環境を構築します。
このラボは、DevOps 環境で作業を行うあらゆる経験レベルのエンジニアを対象としています。
注: Duet AI は、Google の次世代モデルである Gemini に名称変更されました。このラボは、この変更を反映して更新されたものです。ラボの手順を実施する際に、ユーザー インターフェースやドキュメントで Duet AI に言及されていた場合は、Gemini と同等であると見なしてください。
注: Gemini は初期段階のテクノロジーであるため、もっともらしく見える出力でも事実に反する場合があります。Gemini からのすべての出力は、使用する前に検証することをおすすめします。詳細については、Gemini for Google Cloud と責任ある AI をご覧ください。
目標
このラボでは、次のタスクについて学びます。
- Gemini を使用して GKE クラスタを作成する。
- GKE に複数のマイクロサービスをデプロイする。
- Gemini を使用し、アプリケーション ログを検索して内容を理解する。
- Gemini を使用してプライベートなビルド環境の構築方法を確認する。
設定
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。
左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] パネルでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] パネルでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールが組み込まれた仮想マシンです。5 GB の永続ホーム ディレクトリを提供し、Google Cloud 上で実行されます。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。gcloud
は Google Cloud のコマンドライン ツールで、Cloud Shell にプリインストールされており、Tab キーによる入力補完がサポートされています。
-
Google Cloud Console のナビゲーション パネルで、「Cloud Shell をアクティブにする」アイコン(
)をクリックします。
-
[次へ] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続の際に認証も行われ、プロジェクトは現在のプロジェクト ID に設定されます。次に例を示します。

サンプル コマンド
gcloud auth list
(出力)
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
(出力例)
Credentialed accounts:
- google1623327_student@qwiklabs.net
gcloud config list project
(出力)
[core]
project = <プロジェクト ID>
(出力例)
[core]
project = qwiklabs-gcp-44776a13dea667a6
タスク 1. Gemini 用に環境とアカウントを構成する
-
ラボの認証情報を使用して Google Cloud コンソールにログインし、Cloud Shell ターミナル ウィンドウを開きます。
-
Cloud Shell で次のコマンドを実行して、プロジェクト ID とリージョンの環境変数を設定します。
PROJECT_ID=$(gcloud config get-value project)
REGION={{{project_0.default_region|set at lab start}}}
echo "PROJECT_ID=${PROJECT_ID}"
echo "REGION=${REGION}"
-
ログインに使用した Google ユーザー アカウントを環境変数に保存するには、以下のコマンドを実行します。
USER=$(gcloud config get-value account 2> /dev/null)
echo "USER=${USER}"
-
Gemini 用の Cloud AI Companion API を有効にします。
gcloud services enable cloudaicompanion.googleapis.com --project ${PROJECT_ID}
-
Gemini を使用できるよう、必要な IAM ロールを Google Cloud の Qwiklabs ユーザー アカウントに付与します。
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/cloudaicompanion.user
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/serviceusage.serviceUsageViewer
これらのロールを追加すると、ユーザーは Gemini の支援機能を利用できるようになります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
関連する API を有効にして、必要な IAM ロールを付与する。
タスク 2. Google Kubernetes Engine を構成する
このタスクでは、Google Kubernetes Engine(GKE)API を有効にして、GKE クラスタの管理に必要な権限を付与し、クラスタを作成します。
-
GKE API を有効にするには、Cloud Shell で次のコマンドを実行します。
gcloud services enable container.googleapis.com --project ${PROJECT_ID}
-
GKE のユーザー管理者権限を付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member user:${USER} --role=roles/container.admin
ゾーン GKE クラスタを作成してマイクロサービスを実行することも可能です。作成方法は Gemini が説明してくれます。
-
Google Cloud コンソールで Gemini AI チャットを開くか、閉じます(
)メニューが表示されない場合は、ページを更新してください。
-
Gemini ペインを開くには、Google Cloud コンソールのトップメニューで Gemini AI チャットを開くか、閉じます(
)をクリックし、必要に応じて [有効にする] をクリックします。
-
[チャットを開始] をクリックします。
注: [チャットを開始] ボタンが有効になっていない場合は、ページを更新してから Gemini をもう一度開きます。
-
Gemini のプロンプトとして以下のテキストを入力し、送信(
)をクリックします。
ノード数とマシンタイプをカスタマイズしたゾーン GKE クラスタを作成するための gcloud コマンドを教えてください。
Gemini が次のような回答を返します。
gcloud container clusters create <CLUSTER_NAME> \
--project=PROJECT_ID \
--zone=COMPUTE_ZONE \
--num-nodes=NUM_NODES \
--machine-type=MACHINE_TYPE
-
ゾーン GKE クラスタを作成するには、次のコマンドを実行します。
gcloud container clusters create test \
--project={{{project_0.project_id | set at lab start}}} \
--zone={{{project_0.default_zone | set at lab start}}} \
--num-nodes=3 \
--machine-type=e2-standard-4
クラスタの作成には数分かかります。コマンドが終了するまで待ってから次に進みます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Google Kubernetes Engine を構成する。
タスク 3. kubectl を使用して複数のマイクロサービスをデプロイする
このタスクでは、オンライン ブティック アプリケーションを構成するいくつかのマイクロサービス用のコードを含んだ、リポジトリのクローンを作成します。また、kubectl を使用して、これらのマイクロサービスを GKE クラスタにデプロイします。
アプリケーションのアーキテクチャ図を以下に示します。

-
Cloud Shell でリポジトリのクローンを作成するには、次のコマンドを実行します。
git clone --depth=1 https://github.com/GoogleCloudPlatform/microservices-demo
このリポジトリには、アプリケーション内の各マイクロサービスのソースコードが含まれています。
-
マイクロサービスを GKE にデプロイするには、次のコマンドを実行します。
cd ~/microservices-demo
kubectl apply -f ./release/kubernetes-manifests.yaml
-
デプロイ ステータスを確認し、各マイクロサービスが利用可能になるまで次のコマンドを繰り返します。
kubectl get deployments
各マイクロサービスが利用可能になると、Available 列の対応する値が 1 に設定されます。kubectl get deployments
コマンドは次のようになります。
NAME READY UP-TO-DATE AVAILABLE AGE
adservice 1/1 1 1 94s
cartservice 1/1 1 1 96s
checkoutservice 1/1 1 1 97s
currencyservice 1/1 1 1 95s
emailservice 1/1 1 1 97s
frontend 1/1 1 1 97s
loadgenerator 1/1 1 1 95s
paymentservice 1/1 1 1 96s
productcatalogservice 1/1 1 1 96s
recommendationservice 1/1 1 1 97s
redis-cart 1/1 1 1 94s
shippingservice 1/1 1 1 95s
アプリケーションには外部 IP アドレスでアクセスします。
-
アプリケーションの URL を確認するには、次のコマンドを実行します。
echo "http://$(kubectl get service frontend-external -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')"
注: 外部 IP アドレスが利用できるようになるまで 1 分ほどかかる場合があります。URL に IP アドレスが含まれるまでコマンドを実行します。
-
ブラウザタブでアプリケーションを開くには、Ctrl キー(Windows および Linux)または Command キー(macOS)を押しながら、Cloud Shell 内の URL をクリックします。
アプリケーションのホームページが開き、アプリケーションを試すことができます。
注: [接続は安全ではありません] というポップアップが表示された場合は、[サイトへ移動] をクリックします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
kubectl を使用して複数のマイクロサービスをデプロイする。
タスク 4. Gemini を使用して GKE のワークロードのログの内容を理解する
たとえば、既存の複数のマイクロサービスの管理を引き継いだ DevOps エンジニアがいるとします。これらのマイクロサービスは GKE クラスタで実行されています。環境を把握するために、さまざまなマイクロサービスのログを調べることにしました。
このタスクでは、Gemini を使用してクエリを設計し、特定のログを検索して、ログエントリの説明を取得します。
-
Google Cloud コンソールのタイトルバーにある [検索] フィールドに「ログ エクスプローラ」と入力し、検索結果から [ログ エクスプローラ] をクリックします。
-
Gemini のプロンプトとして以下のテキストを入力し、送信(
)をクリックします。
「test」という名前の GKE クラスタ内で「default」という Namespace の Pod からログを検索するためのログ エクスプローラ クエリを教えてください。
次のようなクエリを含む回答が返されます。
resource.type="k8s_container"
resource.labels.cluster_name="test"
resource.labels.namespace_name="default"
注: Gemini から返されたクエリが上記と異なっているようであれば、こちらのクエリをそのまま使用してください。
-
[クエリ] ボックスにクエリを貼り付け、[クエリを実行] をクリックします。
テスト GKE クラスタから発生したメッセージのみを抽出するように、ログメッセージがフィルタされます。これで、ログエントリを確認できるようになります。
-
ログエントリの内容を把握するには、ログエントリを展開し、[このログエントリの説明を確認する] をクリックします。
たとえば GET /product/0PUK6V6EV0
のログエントリで説明のボタンをクリックすると、Gemini から次のような回答が返されます。
• これは main という名前の Kubernetes コンテナのログエントリです。
• このコンテナは、デフォルトの Namespace 内の loadgenerator-84cc74dcd-jf6dr という名前の Pod の一部です。
• Pod は us-west1-a ゾーンの test クラスタで実行中です。
• ログエントリは /product/0PUK6V6EV0 への HTTP リクエストで、処理に 49 ミリ秒必要です。
• このリクエストには 200 OK のレスポンスがあり、クライアントに 40 バイトのデータが返されます。
ワークロードのログについての説明を確認した後は、チームの今後のコンテナ イメージをインターネット アクセスのない一連のプライベート ワーカー上に構築するために、インフラストラクチャを設定します。
タスク 5. Gemini を使用して、コンテナ イメージ用のプライベートなビルド環境を作成する
このタスクでは、プライベートなビルド環境を作成して実行する方法を、Gemini を使用して確認します。
機密情報を取り扱うプロジェクトのビルドシステムは、ご自身の責任で設定していただく必要があります。ご存じのとおり、Cloud Build は Google Cloud 上でビルドを行うサービスであり、ビルドの実行にワーカープールを使用しています。
-
Gemini のチャットに次のプロンプトを入力して、ワーカープールについての詳細を確認します。
Cloud Build のワーカープールとは何ですか?
Gemini が次のような書き出しの回答を返します。
Cloud Build のワーカープールとは、ビルドを実行するための専用の仮想マシンのグループです。ワーカープールは、特定のリージョンおよびゾーンに作成されるもので、パブリック プールまたはプライベート プールのいずれかとなります。
プライベート プールは自分のプロジェクトのみがアクセス可能であるため、以下を含むさまざまなメリットがあります。
• 隔離: 専用のマシンでビルドが実行されるので、同じプロジェクト内で実行中の他のワークロードから影響を受けません。
• セキュリティ: プライベート プールは他のプロジェクトからアクセスできないため、パブリック プールよりも安全です。
• パフォーマンス: プライベート プールは他のプロジェクトと共有されていないため、パブリック プールよりも優れたパフォーマンスを提供できます。
プライベート ワーカープールによる高いセキュリティは、プロジェクトに合った選択肢となる可能性があります。特に、公共のインターネットへのビルドのアクセスをブロックできる場合は有益です。
-
Gemini チャットに次のプロンプトを入力します。
公共のインターネットにアクセスできないプライベート ワーカープールを作成できますか?
Gemini が次のような回答を返します。
はい。公共のインターネットにアクセスできないプライベート ワーカープールを作成することは可能です。これは「パブリック下り(外向き)なしのプライベート プール」として知られています。
パブリック下り(外向き)なしのプライベート プールを作成するには、プールを作成するときに --no-public-egress フラグを使用します。
これで非常に安全になります。しかしお気づきのとおり、プライベート プールのワーカーが、PyPI のようなパブリック パッケージ リポジトリにアクセスできなくなります。つまり、プライベート パッケージをホストする必要があります。ここで、Artifact Registry が使用できるのではないかと思われるかもしれません。
-
Gemini チャットに次のプロンプトを入力します。
パブリック下り(外向き)なしのプライベート プールを作成する場合に、Artifact Registry を使用して非公開でパッケージをホストし、プライベート プールからアクセスすることはできますか?
Gemini が次のような回答を返します。
はい。Artifact Registry を使用して非公開でパッケージをホストし、パブリック下り(外向き)なしのプライベート プールからアクセスすることは可能です。
これを行うには、非公開の Artifact Registry リポジトリを作成して、プライベート プールにそのリポジトリへのアクセスを許可する必要があります。そのため、Artifact Registry 読み取りのロールを持つリポジトリのメンバーとしてサービス アカウントをプライベート プールに追加します。
リポジトリを作成し、プライベート プールにアクセス権を付与すると、パッケージをリポジトリに push して、プライベート プールから pull できるようになります。
Gemini に gcloud CLI コマンドを提供してもらい、プライベート プールを作成します。
-
Gemini チャットに次のプロンプトを入力します。
パブリック下り(外向き)なしのプライベート ワーカープールを作成するための gcloud コマンドは何ですか?
Gemini が次のようなコマンドを返します。
gcloud builds worker-pools create POOL_NAME \
--project=PROJECT_ID \
--region=REGION \
--no-public-egress
-
プライベート プールを作成するには、次のコマンドを実行します。
gcloud builds worker-pools create pool-test \
--project={{{project_0.project_id|set at lab start}}} \
--region={{{project_0.default_region|set at lab start}}} \
--no-public-egress
ラボ環境では、次のようなエラー メッセージが返される可能性があります。
ERROR: (gcloud.builds.worker-pools.create) FAILED_PRECONDITION: project "{{{project_0.project_id|set at lab start}}}" is unable to use private pools
今回のラボではこのエラー メッセージは無視して構いません。
注: 現在、ラボ環境内ではプライベート プールは無効となっています。ラボ環境外のプロジェクトでは、プライベート プールを作成するコマンドは有効です。
次に、非公開の Docker リポジトリを作成する方法について Gemini に尋ねてみましょう。
-
Gemini チャットに次のプロンプトを入力します。
gcloud を使用して、どのように Artifact Registry のコンテナ イメージ用の非公開 Docker リポジトリを作成できますか?
Gemini は、次のような gcloud CLI コマンドを含む回答を返します。
gcloud artifacts repositories create REPOSITORY \
--repository-format=docker \
--location=REGION \
--description="DESCRIPTION"
ここで:
•REPOSITORY は、作成する非公開 Docker リポジトリの名前です。
• REGION は、非公開 Docker リポジトリを作成するリージョンです。
• DESCRIPTION は、非公開 Docker リポジトリの説明です。
-
リポジトリを作成するには、次のコマンドを実行します。
gcloud artifacts repositories create my-repo \
--repository-format=docker \
--location={{{project_0.default_region|set at lab start}}} \
--description="My private Docker repository"
リポジトリが作成されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
リポジトリを作成する。
ラボを終了する
ラボでの学習が完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Qwiklabs から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバック、ご提案、修正が必要な箇所については、[サポート] タブからお知らせください。
お疲れさまでした
このラボでは、以下の操作について学習しました。
- Gemini を使用して GKE クラスタを作成する。
- GKE に複数のマイクロサービスをデプロイする。
- Gemini を使用し、アプリケーション ログを検索して内容を理解する。
- Gemini を使用してプライベートなビルド環境の構築方法を確認する。
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。