GKE Autopilot で実行されているアプリケーションからプライベート AlloyDB インスタンスへの接続

1. 概要

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

e8a5140b09521b7a.png

AlloyDB は、プライベート サービス アクセス用に構成されたプライベート内部 IP アドレスを介してネットワーク接続をサポートしています。

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

44662d7a086358de.png

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 プロジェクトのセットアップ

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

環境設定

検索バーの右にあるアイコンをクリックして、Cloud Shell をアクティブにします。

eb0157a992f16fa3.png

リポジトリのクローンを作成してディレクトリに移動し、次のコマンドをコピーしてターミナルに貼り付けて 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

承認を求められたら、[承認] をクリックして続行します。

6356559df3eccdda.png

セットアップには 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、モニタリング)を確認します。

3b12b0fa1367fb42.png

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

出力例:

e8882c44fa0bb631.png

コマンドを実行して、クラスタの認証情報を保存します。

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 を開き、最新のビルドの詳細を確認します。

49fd65309967ae47.png

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

出力例:

179a23bd33793924.png

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 を開き、作成されたワークロードとサービスを確認します。

e1217216e003a839.png

d5c97fb5950c4db.png

アプリケーション ログ

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

543c5ed97819f540.png

5. 完了

お疲れさまでした。これでこの Codelab は終了です。

学習した内容

  • AlloyDB データベースのプライベート インスタンスを作成する方法
  • AlloyDB インスタンスに接続するアプリケーションを GKE Autopilot クラスタにデプロイする方法

次のステップ:

Cymbal Eats の他の Codelab をご覧ください。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。