1. 概要
このラボでは、GKE Autopilot で実行されている Pod を使用して 2 階層マイクロサービスをデプロイし、AlloyDB データベースのプライベート インスタンスに接続します。Customer Service アプリケーションは Cymbal Eats システムの一部であり、登録ユーザーを管理する機能を提供します。Customer Service アプリケーションは、Quarkus フレームワークを使用する Java ベースのマイクロサービスです。

AlloyDB は、プライベート サービス アクセス用に構成されたプライベート内部 IP アドレスを介してネットワーク接続をサポートしています。
プライベート サービス アクセスは、お客様の VPC ネットワークと、基盤となる Google Cloud の VPC ネットワーク(AlloyDB リソース(クラスタとインスタンス)が存在するネットワーク)との間の VPC ピアリング接続として実装されます。プライベート接続を使用すると、VPC ネットワーク内のリソースは、アクセスする AlloyDB リソースと内部 IP アドレスを使用して排他的に通信できます。VPC ネットワーク内のリソースは、AlloyDB リソースにアクセスするためにインターネット アクセスや外部 IP アドレスを必要としません。

GKE Autopilot とは
GKE Autopilot は、ノード、スケーリング、セキュリティ、その他の事前構成された設定などのクラスタ構成を Google が管理する GKE の運用モードです。Autopilot クラスタは、ほとんどの本番環境ワークロードを実行するように最適化されており、Kubernetes マニフェストに基づいてコンピューティング リソースをプロビジョニングします。この合理化された構成は、クラスタとワークロードの設定、スケーラビリティ、セキュリティに関する GKE のベスト プラクティスと推奨事項に準拠しています。組み込み設定の一覧については、Autopilot と Standard の比較表をご覧ください。
AlloyDB とは
特に要求の厳しいエンタープライズ データベース ワークロードに対応するフルマネージドの PostgreSQL 互換データベース サービス。AlloyDB は、Google の強みと、特に人気の高いオープンソース データベース エンジンの 1 つである PostgreSQL を組み合わせて、優れたパフォーマンス、スケーリング、可用性を実現しています。
学習内容
このラボでは、次の方法について学びます。
- AlloyDB データベースのプライベート インスタンスを作成する
- AlloyDB インスタンスに接続する GKE Autopilot クラスタにアプリケーションをデプロイする
前提条件
- このラボは、Cloud コンソールと Cloud Shell 環境に精通していることを前提としています。
- GKE と AlloyDB の経験があると役立ちますが、必須ではありません。
2. 設定と要件
Cloud プロジェクトのセットアップ
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この設定はいつでも変更できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_IDと識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
環境設定
検索バーの右にあるアイコンをクリックして、Cloud Shell をアクティブにします。

リポジトリのクローンを作成してディレクトリに移動し、次のコマンドをコピーしてターミナルに貼り付けて Enter キーを押します。
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
gke-lab-setup.sh を実行して、必要な依存関係をデプロイします。
次のリソースが作成されます。
- AlloyDB クラスタとインスタンス
- Cloud Run Job と Customer Service のコンテナ イメージを保存する Artifact Registry
- Cloud Run Job が AlloyDB データベースと通信するための VPC アクセス コネクタ
- AlloyDB データベースを作成する Cloud Run ジョブ
- GKE Autopilot クラスタ
./gke-lab-setup.sh
承認を求められたら、[承認] をクリックして続行します。

セットアップには 10 分ほどかかります。必要な依存関係の作成に使用される設定スクリプトを確認します。
gke-lab-setup.sh
スクリプトが完了し、次の出力が表示されるまで待ってから、次の手順を実行します。
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. アプリケーションのデプロイ
AlloyDB クラスタを確認する
次のコマンドを実行して、作成した AlloyDB インスタンスを確認します。
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
出力例:
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
コンソールで利用可能な機能(Query Insight、モニタリング)を確認します。

GKE Autopilot クラスタを確認する
プロジェクトの環境変数を設定します。
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
初期設定の一部として、次のコマンドを使用してクラスタが作成されました(このコマンドを実行する必要はありません)。
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
コマンドを実行して、作成した GKE Autopilot クラスタを表示します。
gcloud container clusters list
出力例:

コマンドを実行して、クラスタの認証情報を保存します。
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
アプリケーションをデプロイする
次に、カスタマー サービス アプリケーションをデプロイします。
Customer Service アプリケーションは、Quarkus フレームワークを使用する Java ベースのマイクロサービスです。
cymbal-eats/customer-service フォルダに移動し、コマンドを実行してコンテナ イメージをビルドしてアップロードします。
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
コンソールで Cloud Build を開き、最新のビルドの詳細を確認します。

AlloyDB プライベート IP アドレスの値を使用して、次の環境変数を設定します。
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
次のコマンドを実行して、カスタマー サービス アプリケーションがデータベースへの接続に使用するデータベース認証情報を保存する Kubernetes Secret オブジェクトを作成します。
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
次のコマンドを実行して、deployment.yaml ファイルの CUSTOMER_SERVICE_IMAGE を置き換えます。
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
コマンドを実行して、アプリケーションをデプロイします。
kubectl apply -f customer-service-deployment.yaml
アプリケーションが RUNNING 状態に移行するまでしばらく時間がかかります。
テストステップで使用する外部 IP を作成するコマンドを実行します。
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
コマンドを実行して、作成されたリソースを確認します。
kubectl get all
出力例:

4. テスト アプリケーション
以下のコマンドを実行して、カスタマー サービス URL を保存します。
kubectl get svc
前の出力の外部 IP の値を使用して、次の環境変数を設定します。
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
次のコマンドを実行して、新しい顧客レコードを作成します。
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
上記のコマンドを複数回実行して、後でログ エクスプローラで表示するログメッセージを生成します。
顧客レコードを確認する
次のコマンドを実行して、作成した顧客レコードを表示します。
curl $CUSTOMER_SERVICE_URL/customer | jq
出力例:
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-06T16:13:19.118744",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 3,
"state": "CA",
"updateDateTime": "2023-01-06T16:13:19.118896",
"zip": "94043"
}
]
GKE ワークロードとサービスを確認する
Cloud コンソールで Kubernetes Engine を開き、作成されたワークロードとサービスを確認します。


アプリケーション ログ
ログ エクスプローラを開き、「Customer already exists」というテキストを含むログを検索します。

5. 完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- AlloyDB データベースのプライベート インスタンスを作成する方法
- AlloyDB インスタンスに接続するアプリケーションを GKE Autopilot クラスタにデプロイする方法
次のステップ:
Cymbal Eats の他の Codelab をご覧ください。
- Eventarc を使用して Cloud Workflows をトリガーする
- Cloud Storage からイベント処理をトリガーする
- Cloud Run からプライベート CloudSQL に接続する
- Cloud Run からフルマネージド データベースに接続する
- Identity Aware Proxy(IAP)でサーバーレス アプリケーションを保護する
- Cloud Scheduler で Cloud Run ジョブをトリガーする
- Cloud Run への安全なデプロイ
- Cloud Run 上り(内向き)トラフィックの保護
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。