1. 概要
このラボでは、GKE Autopilot で稼働する Pod を持つ 2 層マイクロサービスをデプロイし、AlloyDB データベースのプライベート インスタンスに接続します。カスタマー サービス アプリケーションは Cymbal Eats システムの一部であり、登録ユーザーを管理する機能を提供します。カスタマー サービス アプリケーションは、Quarkus フレームワークを使用する Java ベースのマイクロサービスです。
AlloyDB は、プライベート サービス アクセス用に構成されたプライベート内部 IP アドレスを介したネットワーク接続をサポートしています。
プライベート サービス アクセスは、VPC ネットワークと、AlloyDB リソース(クラスタとインスタンス)が存在する基盤となる Google Cloud VPC ネットワークとの間の VPC ピアリング接続として実装されます。プライベート接続を使用すると、VPC ネットワーク内のリソースは、内部 IP アドレスを使用して排他的にアクセスする AlloyDB リソースと通信できます。VPC ネットワーク内のリソースは、インターネット アクセスや外部 IP アドレスがなくても AlloyDB リソースにアクセスできます。
GKE Autopilot とは
GKE Autopilot は GKE の運用モードの一つで、ノード、スケーリング、セキュリティ、その他の事前構成された設定などのクラスタ構成を Google が管理します。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 を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。 - なお、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 ジョブとカスタマー サービスのコンテナ イメージを保存する Artifact Registry
- Cloud Run ジョブが 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、Monitoring)を確認する。
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
アプリケーションをデプロイする
次に、カスタマー サービス アプリケーションをデプロイします。
カスタマー サービス アプリケーションは、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 を開き、作成されたワークロードとサービスを確認します。
アプリケーション ログ
ログ エクスプローラを開き、「顧客がすでに存在します」を含むログを検索します。あります。
5. 完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- AlloyDB データベースのプライベート インスタンスを作成する方法
- AlloyDB インスタンスに接続する GKE Autopilot クラスタにアプリケーションをデプロイする方法
次のステップ:
Cymbal Eats の他の Codelab を確認する:
- Eventarc を使用した Cloud Workflows のトリガー
- Cloud Storage からのイベント処理のトリガー
- Cloud Run から Private Cloud SQL への接続
- Cloud Run からフルマネージド データベースへの接続
- Identity-Aware Proxy(IAP)でサーバーレス アプリケーションを保護する
- Cloud Scheduler を使用した Cloud Run ジョブのトリガー
- Cloud Run への安全なデプロイ
- Cloud Run の上り(内向き)トラフィックの保護
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。