Google Kubernetes Engine から Cloud SQL for PostgreSQL に接続する

このページでは、Google Cloud コンソールとクライアント アプリケーションを使用して、PostgreSQL インスタンスに接続された Google Kubernetes Engine(GKE)にサンプルアプリをデプロイする方法について説明します。このクイックスタートで作成されるリソースにかかる費用は、クリーンアップを含む手順を適切なタイミングで完了した場合、通常 1 ドル(USD)未満です。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. GKE で Cloud SQL サンプルアプリを実行するために必要な Google Cloud APIs を有効にします。

    コンソール

    [API を有効にする] をクリックして、このクイックスタートで必要な API を有効にします。

    API を有効にする

    これにより、次の API が有効になります。

    • Compute Engine API
    • Cloud SQL Admin API
    • Google Kubernetes Engine API
    • Artifact Registry API
    • Cloud Build API

    gcloud

    次のボタンをクリックして Cloud Shell を開きます。これにより、ブラウザから Google Cloud リソースにコマンドラインで直接アクセスできます。Cloud Shell を使用して、このクイックスタートで紹介する gcloud コマンドを実行できます。

    Cloud Shell を開く

    Cloud Shell を使用して、次のように gcloud services enable コマンドを実行し、このクイックスタートに必要な API を有効にします。

    gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
         container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com

    このコマンドにより、次の API が有効になります。

    • Compute Engine API
    • Cloud SQL Admin API
    • GKE API
    • Artifact Registry API
    • Cloud Build API

Cloud SQL の設定

Cloud SQL インスタンスを作成する

データベースの作成

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [quickstart-instance] を選択します。
  3. SQL ナビゲーション メニューから [データベース] を選択します。
  4. [データベースを作成] をクリックします。
    1. [新しいデータベース] ダイアログ ボックスの [データベース名] フィールドに「quickstart-db」と入力します。
    2. [作成] をクリックします。

gcloud

gcloud sql databases create コマンドを実行してデータベースを作成します。

gcloud sql databases create quickstart-db --instance=quickstart-instance

ユーザーを作成する

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. [ユーザー アカウントを追加] をクリックします。
  5. [ユーザー アカウントをインスタンス instance_name に追加] ページで、次の情報を追加します。
    • ユーザー名: quickstart-user に設定します。
    • パスワード: データベース ユーザーのパスワードを指定します。このクイックスタートの後半で使用するので、メモしておいてください。
  6. [追加] をクリックします。

gcloud

次のようにコマンドを実行する前に、DB_PASS をデータベース ユーザーのパスワードに置き換えます。このクイックスタートの後半で使用するので、メモしておいてください。

gcloud sql users create コマンドを実行してリソースを作成します。

gcloud sql users create quickstart-user \
--instance=quickstart-instance \
--password=DB_PASS

ユーザー名の長さの上限は、オンプレミス PostgreSQL の場合と同じです。

GKE クラスタを作成する

コンソール

  1. Google Cloud コンソールで、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [作成] をクリックします。
  3. GKE Autopilot の [構成] をクリックします。
  4. [名前] で、クラスタ名を gke-cloud-sql-quickstart と指定します。
  5. [作成] をクリックします。

gcloud

gcloud container clusters create-auto コマンドを実行して、汲田スタを作成します。

gcloud container clusters create-auto gke-cloud-sql-quickstart \
    --region us-central1

Cloud Shell エディタで Cloud SQL サンプルアプリのクローンを作成する

Cloud SQL インスタンス、データベース、GKE クラスタを使用して、Cloud SQL インスタンスに接続するサンプル アプリケーションのクローンを作成し、構成できるようになりました。このクイックスタートの残りの手順では、gcloudkubectl コマンドライン ツールを使用します。どちらのツールも Cloud Shell にプリインストールされています。

Go

  1. Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
    Cloud Shell エディタを開く
  2. Open in Cloud Shell ダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。

Java

  1. Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
    Cloud Shell エディタを開く
  2. Open in Cloud Shell ダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。

Node.js

  1. Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
    Cloud Shell エディタを開く
  2. Open in Cloud Shell ダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。

Python

  1. Cloud Shell エディタで、サンプルアプリのソースコードを開きます。
    Cloud Shell エディタを開く
  2. Open in Cloud Shell ダイアログで、[確認] をクリックしてサンプルアプリのコードをダウンロードし、Cloud Shell エディタでサンプルアプリ ディレクトリを開きます。

GKE クラスタを有効にする

作成した GKE クラスタをデフォルト クラスタとして有効にし、このクイックスタートの以降のコマンドで使用します。

次のように gcloud container clusters get-credentials コマンドを実行して、GKE クラスタを有効にします。
gcloud container clusters get-credentials gke-cloud-sql-quickstart \
  --region us-central1

サービス アカウントを設定する

GKE で使用する Google Cloud サービス アカウントを作成し、Cloud SQL への接続権限のある Cloud SQL Client ロールを付与します。
  1. 次のように gcloud iam service-accounts create コマンドを実行して、新しいサービス アカウントを作成します。
    gcloud iam service-accounts create gke-quickstart-service-account \
      --display-name="GKE Quickstart Service Account"
  2. 次のように gcloud projects add-iam-policy-binding コマンドを実行して、作成した Google Cloud サービス アカウントに Cloud SQL クライアント ロールを追加します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/cloudsql.client"
  3. サンプルアプリではロギングを使用するので、次のように gcloud projects add-iam-policy-binding コマンドを実行して、先ほど作成した Google Cloud サービス アカウントにログ書き込みのロールを追加します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
  4. サービス アカウントが Artifactory リポジトリからイメージを pull できるようにする必要があります。
    そのため、gcloud projects add-iam-policy-binding コマンドを実行して、サービス アカウントに Artifact Registry 読み取りロールを追加します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/artifactregistry.reader"
Workload Identity Federation for GKE を使用して Google Cloud サービス アカウントにバインディングすることで、Cloud SQL にアクセスを許可する Kubernetes サービス アカウントを作成します。
  1. Kubernetes サービス アカウントを作成します。
    1. Cloud Shell エディタで service-account.yaml ファイルを更新します。<YOUR-KSA-NAME>ksa-cloud-sql に置き換えます。
    2. Cloud Shell で、次のように kubectl apply コマンドを実行します。
      kubectl apply -f service-account.yaml
  2. 次のように gcloud iam service-accounts add-iam-policy-binding コマンドを実行して、Google Cloud サービス アカウントと Kubernetes サービス アカウントの IAM バインディングを有効にします。次のように置き換えます。
    • YOUR_PROJECT_ID: プロジェクト ID。
    • YOUR_K8S_NAMESPACE: default。これは、GKE で作成されたクラスタのデフォルトの名前空間です。
    • YOUR_KSA_NAME: ksa-cloud-sql
    gcloud iam service-accounts add-iam-policy-binding \
      --role="roles/iam.workloadIdentityUser" \
      --member="serviceAccount:YOUR_PROJECT_ID.svc.id.goog[YOUR_K8S_NAMESPACE/YOUR_KSA_NAME]" \
      gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
  3. 次のように kubectl annotate コマンドを実行して、Kubernetes サービス アカウントに IAM バインディングのアノテーションを付けます。次のように置き換えます。
    • YOUR_KSA_NAME: ksa-cloud-sql
    • YOUR_PROJECT_ID: プロジェクト ID。
    kubectl annotate serviceaccount \
      YOUR_KSA_NAME  \
      iam.gke.io/gcp-service-account=gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com

シークレットを構成する

次のように kubectl create secret generic コマンドを実行して、サンプルアプリで使用するデータベース、ユーザー、ユーザー パスワードの Kubernetes Secret を作成します。各 Secret の値は、このクイックスタートの前の手順で指定した値に基づいています。DB_PASS は、前のユーザーの作成クイックスタート ステップで作成した quickstart-user のパスワードに置き換えます。

kubectl create secret generic gke-cloud-sql-secrets \
  --from-literal=database=quickstart-db \
  --from-literal=username=quickstart-user \
  --from-literal=password=DB_PASS

サンプルアプリの作成

Go

  1. Cloud Shell で次の gcloud artifacts repositories create コマンドを実行して、クラスタと同じリージョンに gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. Cloud Shell で次のように gcloud builds submit コマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud builds submit \
      --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .

Java

  1. Cloud Shell で次の gcloud artifacts repositories create コマンドを実行して、クラスタと同じリージョンに gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. Cloud Shell で次のように mvn コマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    mvn clean package com.google.cloud.tools:jib-maven-plugin:2.8.0:build \
      -Dimage=us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql \
      -DskipTests -Djib.to.credHelper=gcloud

Node.js

  1. Cloud Shell で次の gcloud artifacts repositories create コマンドを実行して、クラスタと同じリージョンに gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. Cloud Shell で次のように gcloud builds submit コマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud builds submit \
      --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .

Python

  1. Cloud Shell で次の gcloud artifacts repositories create コマンドを実行して、クラスタと同じリージョンに gke-cloud-sql-repo という名前の Artifact Registry にリポジトリを作成します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud artifacts repositories create gke-cloud-sql-repo \
      --project=YOUR_PROJECT_ID \
      --repository-format=docker \
      --location=us-central1 \
      --description="GKE Quickstart sample app"
  2. Cloud Shell で次のように gcloud builds submit コマンドを実行して、Docker コンテナをビルドし、Artifact Registry に公開します。YOUR_PROJECT_ID は、プロジェクト ID で置き換えます。
    gcloud builds submit \
      --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .

サンプルアプリをデプロイする

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. quickstart-instance インスタンスを選択して [インスタンスの詳細] ページを開きます。
  3. ページ上部にあるアイコンバーで、[削除] をクリックします。
  4. [インスタンスの削除] ダイアログ ボックスで「quickstart-instance」と入力し、[削除] をクリックしてインスタンスを削除します。
  5. Google Cloud コンソールで、Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  6. gke-cloud-sql-quickstart サービス名の横にあるチェックボックスをオンにします。
  7. Google Kubernetes Engine ページの上部にある [削除] ボタンをクリックします。

省略可能なクリーンアップ手順

このクイックスタート用に作成した Google Cloud サービス アカウントを使用しない場合は、このアカウントを削除できます。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    IAM に移動

  2. gke-quickstart-service-account という名前の IAM アカウントのチェックボックスをオンにします。
  3. [削除] をクリックして、削除を確定します。

このクイックスタートで有効にした API を使用しない場合は、無効にすることができます。

  • このクイックスタートで有効にした API:
    • Compute Engine API
    • Cloud SQL Admin API
    • Google Kubernetes Engine API
    • Artifact Registry API
    • Cloud Build API
  1. Google Cloud コンソールの [API] ページに移動します。

    [API] に移動

  2. 無効にする API を選択し、[API を無効にする] ボタンをクリックします。

次のステップ

必要に応じて、Cloud SQL インスタンスの作成で詳細をご確認ください。

Cloud SQL インスタンスの PostgreSQL ユーザーデータベースの作成についても学習できます。

Cloud SQL の料金情報もご覧ください。

以下の詳細を確認する

また、他の Google Cloud アプリケーションから Cloud SQL インスタンスへの接続についても確認できます。