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

このページでは、Google Cloud コンソールとクライアント アプリケーションを使用して、MySQL インスタンスに接続された 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. GKE で Cloud SQL サンプルアプリを実行するために必要な Google Cloud APIs を有効にします。
    コンソールgcloud

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

    API を有効にする

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

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

    次のボタンをクリックして 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 インスタンスを作成する

パブリック IP

コンソールgcloud

パブリック IP アドレスを持つインスタンスを作成する

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

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

  2. [インスタンスを作成] をクリックします。
  3. [MySQL] をクリックします。
  4. [インスタンス ID] に「quickstart-instance」と入力します。
  5. root ユーザーのパスワードを入力してこのパスワードはこの後で使用できるように保存してください。
  6. [リージョンとゾーンの可用性の選択] で [シングルゾーン] オプションをクリックします。
  7. [構成を表示] セクションをクリックして開きます。
  8. [マシンタイプ] プルダウン メニューで、[軽量] を選択します。
  9. [インスタンスを作成] をクリックし、インスタンスが初期化されて起動されるまで待ちます。

パブリック IP アドレスを持つインスタンスを作成する

gcloud sql instances create コマンドを実行する前に、DB_ROOT_PASSWORD をデータベース ユーザーのパスワードに置き換えます。

必要に応じて、次のパラメータの値を変更します。

  • --database_version: データベース エンジンのタイプとバージョン。指定しない場合は、API のデフォルトが使用されます。現在利用可能なバージョンを確認するには、gcloud database versions ドキュメントをご覧ください。
  • --cpu: マシンに必要なコア数。
  • --memory: マシンに必要なメモリ量を示す整数。サイズ単位を指定する必要があります(例: 3,072 MB、9 GB)。単位を指定しない場合、GB が使用されます。
  • --region: インスタンスのリージョンのロケーション(例: asia-east1、us-east1)。指定しない場合は、デフォルトで us-central が使用されます。リージョンの一覧をご覧ください。

gcloud sql instances create コマンドを実行して、Cloud SQL インスタンスを作成します。

gcloud sql instances create quickstart-instance \
--database-version=MYSQL_8_0 \
--cpu=1 \
--memory=4GB \
--region=us-central1 \
--root-password=DB_ROOT_PASSWORD

コンソールgcloud

プライベート IP アドレスと SSL を有効にしてインスタンスを作成する

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

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

  2. [インスタンスを作成] をクリックします。
  3. [MySQL] をクリックします。
  4. [インスタンス ID] に「quickstart-instance」と入力します。
  5. root ユーザーのパスワードを入力してこのパスワードはこの後で使用できるように保存してください。
  6. [リージョンとゾーンの可用性の選択] で [シングルゾーン] オプションをクリックします。
  7. [構成オプションを表示] をクリックして開きます。
  8. [マシンタイプ] で [軽量] を選択します。
  9. [接続] で、[プライベート IP] を選択します。
  10. [ネットワーク] プルダウン メニューから [デフォルト] を選択します。
  11. [プライベート サービス アクセス接続は必須です] というダイアログが表示された場合は、[接続の設定] ボタンをクリックします。
    • [Service Networking API を有効化] ダイアログで、[API を有効にする] ボタンをクリックします。
    • [IP 範囲を割り振る] ダイアログで、[自動的に割り当てられた IP 範囲を使用する] を選択し、[続行] をクリックします。
    • [接続の作成] ダイアログで [接続の作成] をクリックします。
  12. プライベート IP のみを使用するインスタンスを作成するには、[パブリック IP] チェックボックスをオフにします。
  13. [インスタンスを作成] をクリックし、インスタンスが初期化されて起動するまで待ちます。
  14. [接続] をクリックします。
  15. [セキュリティ] で [SSL 接続のみ許可] を選択し、SSL 接続を有効にします。
  16. [Enable SSL] ダイアログで、[有効にして再起動] をクリックし、インスタンスが再起動するのを待ちます。

プライベート IP アドレスと SSL を有効にしてインスタンスを作成する

プライベート IP アドレスを使用してインスタンスを作成する場合は、GKE などの他の Google Cloud サービスからの接続を有効にするようにプライベート サービス アクセスを構成する必要があります。

  1. gcloud compute addresses create コマンドを実行して、プライベート サービス アクセス接続の IP 範囲を割り振ります。
  2. gcloud compute addresses create google-managed-services-default \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --description="peering range for Google" \
    --network=default
  3. gcloud services vpc-peerings connect コマンドを実行して、プライベート サービス アクセス接続を作成します。
  4. gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-default \
    --network=default
  5. gcloud sql instances create コマンドを実行して次のようにインスタンスを作成する前に、DB_ROOT_PASSWORD をデータベース ユーザーのパスワードに置き換えます。

  6. 必要に応じて、次のパラメータの値を変更します。

    • --database_version: データベース エンジンのタイプとバージョン。指定しない場合は、API のデフォルトが使用されます。現在利用可能なバージョンのリストについては、gcloud database versions をご覧ください。
    • --cpu: マシン内のコア数。
    • --memory: マシンに搭載するメモリ量を示す整数。サイズの単位を指定できます(例: 3,072 MB、9 GB)。単位を指定しない場合、GB が使用されます。
    • --region: インスタンスのリージョンのロケーション(例: asia-east1、us-east1)。指定しない場合は、デフォルトで us-central1 が使用されます。リージョンの一覧をご覧ください。

    gcloud sql instances create コマンドを実行して、プライベート IP アドレスを持つ Cloud SQL インスタンスを作成します。

     gcloud beta sql instances create quickstart-instance \
    --database-version=MYSQL_8_0 \
    --cpu=1 \
    --memory=4GB \
    --region=us-central1 \
    --root-password=DB_ROOT_PASSWORD \
    --no-assign-ip \
    --network=default
  7. gcloud sql instances patch コマンドを実行して、インスタンスの SSL 接続のみを許可します。

  8. gcloud sql instances patch quickstart-instance --require-ssl

データベースの作成

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

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

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

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

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

ユーザーを作成する

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

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

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

        必要に応じて、[IP アドレスまたはアドレス範囲でホストを制限する] を選択し、[ホスト] セクションに IP アドレスまたはアドレス範囲を入力します。これで、ユーザーは指定した IP アドレスからのみ接続できます。

  5. [追加] をクリックします。

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

gcloud sql users create コマンドを実行してユーザーを作成します。

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

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じであり、MySQL 8.0 以降では 32 文字、それより前のバージョンでは 16 文字です。

GKE クラスタを作成する

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

    Google Kubernetes Engine に移動

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

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 にプリインストールされています。

GoJavaNode.jsPython
  1. Cloud Shell エディタで、サンプルアプリのソースコードを開きます。

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

サンプルアプリの作成

GoJavaNode.jsPython
  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 .
  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
  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 .
  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 .

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

パブリック IP

作成したサンプルアプリの構成を使用して、サンプルアプリをデプロイしてみましょう。

GoJavaNode.jsPython

デプロイされたサンプルアプリは、Kubernetes サイドカー パターンで実行されている Cloud SQL Proxy を使用して Cloud SQL インスタンスに接続します。サイドカー パターンは、サンプルアプリのコンテナと同じ Kubernetes Pod を共有する追加のコンテナでワークロードをデプロイすることで実現されます。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えます。
    • <YOUR_KSA_NAME>: ksa-cloud-sql
    • <LOCATION>: us-central1
    • <YOUR_PROJECT_ID>: プロジェクト ID。
    • <YOUR-DB-SECRET>: gke-cloud-sql-secrets
    • <INSTANCE_CONNECTION_NAME>: 前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Go Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"
            # For Automatic IAM Authentication with the Go Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Go Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL Proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=3306"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

デプロイされたサンプルアプリは、Cloud SQL Java コネクタを使用して Cloud SQL インスタンスに接続します。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えます。
    • <YOUR_KSA_NAME>: ksa-cloud-sql
    • <LOCATION>: us-central1
    • <YOUR_PROJECT_ID>: プロジェクト ID。
    • <YOUR-DB-SECRET>: gke-cloud-sql-secrets
    • <INSTANCE_CONNECTION_NAME>: 前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          # For more information about using Kubernetes service accounts see: 
          # https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts
          serviceAccountName: <YOUR-KSA-NAME> # TODO(developer): replace this value.
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            - name: INSTANCE_CONNECTION_NAME
              value: <INSTANCE_CONNECTION_NAME>
            - name: DB_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"  
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

デプロイされたサンプルアプリは、Kubernetes サイドカー パターンで実行されている Cloud SQL Proxy を使用して Cloud SQL インスタンスに接続します。サイドカー パターンは、サンプルアプリのコンテナと同じ Kubernetes Pod を共有する追加のコンテナでワークロードをデプロイすることで実現されます。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えます。
    • <YOUR_KSA_NAME>: ksa-cloud-sql
    • <LOCATION>: us-central1
    • <YOUR_PROJECT_ID>: プロジェクト ID。
    • <YOUR-DB-SECRET>: gke-cloud-sql-secrets
    • <INSTANCE_CONNECTION_NAME>: 前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"  
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=3306"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

cloud-sql/mysql/mysql/deployment.yaml

デプロイされたサンプルアプリは、Kubernetes サイドカー パターンで実行されている Cloud SQL Proxy を使用して Cloud SQL インスタンスに接続します。サイドカー パターンは、サンプルアプリのコンテナと同じ Kubernetes Pod を共有する追加のコンテナでワークロードをデプロイすることで実現されます。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えます。
    • <YOUR_KSA_NAME>: ksa-cloud-sql
    • <LOCATION>: us-central1
    • <YOUR_PROJECT_ID>: プロジェクト ID。
    • <YOUR-DB-SECRET>: gke-cloud-sql-secrets
    • <INSTANCE_CONNECTION_NAME>: 前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Python Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"
            # For Automatic IAM Authentication with the Python Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Python Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL Proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=3306"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

作成したサンプルアプリの構成を使用して、サンプルアプリをデプロイしてみましょう。

GoJavaNode.jsPython

デプロイされたサンプルアプリは、Kubernetes サイドカー パターンで実行されている Cloud SQL Proxy を使用して Cloud SQL インスタンスに接続します。サイドカー パターンは、サンプルアプリのコンテナと同じ Kubernetes Pod を共有する追加のコンテナでワークロードをデプロイすることで実現されます。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えて編集します。
    • <YOUR_KSA_NAME>ksa-cloud-sql に置き換えます。
    • <LOCATION>us-central1 に置き換えます。
    • <YOUR_PROJECT_ID> をプロジェクト ID で置き換えます。
    • <YOUR-DB-SECRET>gke-cloud-sql-secrets に置き換えます。
    • <INSTANCE_CONNECTION_NAME> を前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名に置き換えます。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    • プライベート IP アドレスを使用して Cloud SQL インスタンスに接続できるように、Cloud SQL Auth プロキシを有効にします。# コメント記号と末尾のホワイト スペースを削除して、"-ip_address_types=PRIVATE" フラグのコメント化解除します。コメント化を解除したフラグは次のようになります。
      - "-ip_address_types=PRIVATE"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Go Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"
            # For Automatic IAM Authentication with the Go Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Go Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL Proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=3306"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

デプロイされたサンプルアプリは、Cloud SQL Java コネクタを使用して Cloud SQL インスタンスに接続します。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えます。
    • <YOUR_KSA_NAME>: ksa-cloud-sql
    • <LOCATION>: us-central1
    • <YOUR_PROJECT_ID>: プロジェクト ID。
    • <YOUR-DB-SECRET>: gke-cloud-sql-secrets
    • <INSTANCE_CONNECTION_NAME>: 前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          # For more information about using Kubernetes service accounts see: 
          # https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts
          serviceAccountName: <YOUR-KSA-NAME> # TODO(developer): replace this value.
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            - name: INSTANCE_CONNECTION_NAME
              value: <INSTANCE_CONNECTION_NAME>
            - name: DB_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"  
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

デプロイされたサンプルアプリは、Kubernetes サイドカー パターンで実行されている Cloud SQL Proxy を使用して Cloud SQL インスタンスに接続します。サイドカー パターンは、サンプルアプリのコンテナと同じ Kubernetes Pod を共有する追加のコンテナでワークロードをデプロイすることで実現されます。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えて編集します。
    • <YOUR_KSA_NAME>ksa-cloud-sql に置き換えます。
    • <LOCATION>us-central1 に置き換えます。
    • <YOUR_PROJECT_ID> をプロジェクト ID で置き換えます。
    • <YOUR-DB-SECRET>gke-cloud-sql-secrets に置き換えます。
    • <INSTANCE_CONNECTION_NAME> を前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名に置き換えます。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    • プライベート IP アドレスを使用して Cloud SQL インスタンスに接続できるように、Cloud SQL Auth プロキシを有効にします。# コメント記号と末尾のホワイト スペースを削除して、"-ip_address_types=PRIVATE" フラグのコメント化解除します。コメント化を解除したフラグは次のようになります。
      - "-ip_address_types=PRIVATE"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"  
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=3306"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

cloud-sql/mysql/mysql/deployment.yaml

デプロイされたサンプルアプリは、Kubernetes サイドカー パターンで実行されている Cloud SQL Proxy を使用して Cloud SQL インスタンスに接続します。サイドカー パターンは、サンプルアプリのコンテナと同じ Kubernetes Pod を共有する追加のコンテナでワークロードをデプロイすることで実現されます。

  1. gcloud sql instances describe コマンドを実行して、Cloud SQL インスタンス接続名を取得します。
    gcloud sql instances describe quickstart-instance --format='value(connectionName)'
  2. Cloud Shell エディタで deployment.yaml ファイルを更新します。次のように置き換えて編集します。
    • <YOUR_KSA_NAME>ksa-cloud-sql に置き換えます。
    • <LOCATION>us-central1 に置き換えます。
    • <YOUR_PROJECT_ID> をプロジェクト ID で置き換えます。
    • <YOUR-DB-SECRET>gke-cloud-sql-secrets に置き換えます。
    • <INSTANCE_CONNECTION_NAME> を前の手順で gcloud コマンドから取得した Cloud SQL インスタンス接続名に置き換えます。形式は project_id:region:instance_name です。インスタンスの接続名は、Cloud SQL インスタンスの [概要] ページにも表示されます。
    • プライベート IP アドレスを使用して Cloud SQL インスタンスに接続できるように、Cloud SQL Auth プロキシを有効にします。# コメント記号と末尾のホワイト スペースを削除して、"-ip_address_types=PRIVATE" フラグのコメント化解除します。コメント化を解除したフラグは次のようになります。
      - "-ip_address_types=PRIVATE"
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gke-cloud-sql-quickstart
    spec:
      selector:
        matchLabels:
          app: gke-cloud-sql-app
      template:
        metadata:
          labels:
            app: gke-cloud-sql-app
        spec:
          serviceAccountName: <YOUR-KSA-NAME>
          containers:
          - name: gke-cloud-sql-app
            # Replace <LOCATION> with your Artifact Registry location (e.g., us-central1).
            # Replace <YOUR_PROJECT_ID> with your project ID.
            image: <LOCATION>-docker.pkg.dev/<YOUR_PROJECT_ID>/gke-cloud-sql-repo/gke-sql:latest
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
            - name: PORT
              value: "8080"
            # This project uses environment variables to determine
            # how you would like to run your application
            # To use the Python Connector (recommended) - use INSTANCE_CONNECTION_NAME (proj:region:instance)
            # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
            # To use Unix, use INSTANCE_UNIX_SOCKET (e.g., /cloudsql/proj:region:instance)
            - name: INSTANCE_HOST
              value: "127.0.0.1"
            - name: DB_PORT
              value: "3306"
            # For Automatic IAM Authentication with the Python Connector
            # use DB_IAM_USER instead of DB_USER (recommended)
            # You may also remove the DB_PASS environment variable if
            # you use Automatic IAM Authentication
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: username
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: password
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: <YOUR-DB-SECRET>
                  key: database
          # If you are using the Python Connector (recommended), you can
          # remove cloud-sql-proxy (everything below this line)
          - name: cloud-sql-proxy
            # This uses the latest version of the Cloud SQL Proxy
            # It is recommended to use a specific version for production environments.
            # See: https://github.com/GoogleCloudPlatform/cloudsql-proxy 
            image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
            args:
              # If connecting from a VPC-native GKE cluster, you can use the
              # following flag to have the proxy connect over private IP
              # - "--private-ip"
    
              # If you are not connecting with Automatic IAM, you can delete
              # the following flag.
              - "--auto-iam-authn"
    
              # tcp should be set to the port the proxy should listen on
              # and should match the DB_PORT value set above.
              # Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
              - "--port=3306"
              - "<INSTANCE_CONNECTION_NAME>"
            securityContext:
              # The default Cloud SQL proxy image runs as the
              # "nonroot" user and group (uid: 65532) by default.
              runAsNonRoot: true
    
  3. Cloud Shell で、次のように kubectl apply コマンドを実行して、サンプルアプリをデプロイします。
    kubectl apply -f deployment.yaml
  4. 次のように kubectl apply コマンドを実行して、デプロイの前にロードバランサを追加し、インターネット経由でロードバランサにアクセスできるようにします。
    kubectl apply -f service.yaml
  5. 次のように kubectl get コマンドを実行して、サービスの詳細を取得します。
    kubectl get services
  6. サービスの詳細で外部 IP アドレスが利用可能になったらコピーします。アドレスが使用可能になるまで数分かかることがあります。
  7. デプロイされたサンプルアプリを表示します。ブラウザ ウィンドウを開き、サービスの外部 IP アドレスに移動します。

    デプロイされたサンプルアプリを表示する

クリーンアップ

このページで使用したリソースについて、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 インスタンスの MySQL ユーザーデータベースの作成についても学習できます。

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

以下の詳細を確認する

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