Google Kubernetes Engine(GKE)から AlloyDB for PostgreSQL に接続する

このチュートリアルでは、Google Kubernetes Engine Autopilot クラスタで実行されているアプリケーションから AlloyDB インスタンスへの接続を設定する方法について説明します。

AlloyDB は、 Google Cloudで利用できる、PostgreSQL 互換のフルマネージド データベース サービスです。

Google Kubernetes Engine を使用すると、Kubernetes を自動的にデプロイ、スケーリング、管理できます。

目標

  • AlloyDB 用の Docker イメージをビルドします。
  • Google Kubernetes Engine でアプリケーションを実行する。
  • AlloyDB Auth Proxy と内部 IP を使用して AlloyDB インスタンスに接続します。

料金

このチュートリアルでは、 Google Cloudの課金対象コンポーネントを使用します。

  • AlloyDB
  • Google Kubernetes Engine
  • Artifact Registry

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

始める前に

コンソール

  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. AlloyDB for PostgreSQL の作成と接続に必要な Cloud API を有効にします。

    API を有効にする

    1. [プロジェクトを確認] の手順で、[次へ] をクリックして、変更するプロジェクトの名前を確認します。

    2. [API を有効にする] の手順で、[有効にする] をクリックして、次の機能を有効にします。

      • AlloyDB API
      • Artifact Registry API
      • Compute Engine API
      • Cloud Resource Manager API
      • Cloud Build API
      • Container Registry API
      • Kubernetes Engine API
      • Service Networking API

このチュートリアルでは、gke-alloydb-app という名前のサンプルの投票収集ウェブ アプリケーションを使用します。

Cloud Shell を起動する

Cloud Shell は、Google Cloudでホストされているリソースを管理するためのシェル環境です。

Cloud Shell には、Google Cloud CLIkubectl コマンドライン ツールがプリインストールされています。gcloud CLI は、 Google Cloudの主要なコマンドライン インターフェースを提供します。kubectl は、Kubernetes クラスタに対してコマンドを実行するためのコマンドライン インターフェースを提供します。

コンソール

Cloud Shell を起動するには、次の手順を行います。

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソール

  2. Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] ボタン [Cloud Shell をアクティブにする] をクリックします。

  3. [Cloud Shell の承認] ダイアログで、[承認] をクリックします。

    コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルを使用して、gcloud コマンドと kubectl コマンドを実行します。

    1. コマンドを実行する前に、Google Cloud CLI で次のコマンドを使用してデフォルト プロジェクトを設定します。

      gcloud config set project PROJECT_ID

      PROJECT_ID を実際のプロジェクト ID に置き換えます。

AlloyDB クラスタとそのプライマリ インスタンスを作成する

AlloyDB クラスタは、Google Virtual Private Cloud(VPC)内の複数のノードで構成されます。クラスタを作成する際、使用している VPC のうち 1 つと、新しいクラスタを含む Google マネージド VPC との間で、プライベート サービス アクセスも構成します。データベースが一般公開のインターネットに公開されないように、内部 IP アクセスを使用することをおすすめします。

構成済みの VPC の外部から AlloyDB for PostgreSQL クラスタに接続するには、AlloyDB の VPC でプライベート サービス アクセスを構成し、デフォルトの VPC ネットワークを使用して、GKE クラスタにデプロイされたアプリケーションからクエリを実行します。

gcloud

  1. Cloud Shell で、未使用の IP アドレス(IPv4)範囲がサービス ピアリングの割り当てに使用されていないことを確認します。

    gcloud services vpc-peerings list --network=default

    出力が次のようになる場合は、次のステップをスキップします。

    network: projects/493573376485/global/networks/default
    peering: servicenetworking-googleapis-com
    reservedPeeringRanges:
    - default-ip-range
    service: services/servicenetworking.googleapis.com
    

    この出力では、reservedPeeringRanges の値は default-ip-range です。これは、IP_RANGE_NAME として使用して、手順 3 でプライベート接続を作成できます。

  2. (デフォルト値 reservedPeeringRanges を使用する場合はスキップ)VPC で未使用の IP アドレスを割り当てるには、次のコマンドを使用します。

    gcloud compute addresses create IP_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=16 \
        --description="VPC private service access" \
        --network=default

    IP_RANGE_NAME は、AlloyDB サブネット内で使用可能な内部 IP アドレスの名前(alloydb-gke-psa-01 など)に置き換えます。

  3. 割り振られた IP 範囲を使用してサービス アクセスを構成するには、次のコマンドを実行します。

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=IP_RANGE_NAME \
        --network=default
  4. AlloyDB クラスタをデプロイするには、次のコマンドを実行します。

    gcloud alloydb clusters create CLUSTER_ID \
        --database-version=POSTGRES_VERSION \
        --password=CLUSTER_PASSWORD \
        --network=default \
        --region=REGION \
        --project=PROJECT_ID

    次のように置き換えます。

    • CLUSTER_ID: 作成するクラスタの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます(例: alloydb-cluster)。
    • VERSION: クラスタのデータベース サーバーの互換性を確保する PostgreSQL のメジャー バージョン。次のいずれかを選択します。

      • 14: PostgreSQL 14 との互換性のため

      • 15: サポートされているデフォルトの PostgreSQL バージョンである PostgreSQL 15 との互換性を確保するため

      • 16: PostgreSQL 16(プレビュー)との互換性を確保するため

        プレビュー版 PostgreSQL 16 の使用に適用される制限事項の詳細については、プレビュー版 PostgreSQL 16 の互換性をご覧ください。

    • CLUSTER_PASSWORD: デフォルトの postgres ユーザーに使用するパスワード。

    • PROJECT_ID: クラスタを配置する Google Cloud プロジェクトの ID。

    • REGION: AlloyDB クラスタが作成されるリージョンの名前(us-central1 など)。

  5. AlloyDB プライマリ インスタンスをデプロイするには、次のコマンドを実行します。

    gcloud alloydb instances create INSTANCE_ID \
        --instance-type=PRIMARY \
        --cpu-count=NUM_CPU \
        --region=REGION \
        --cluster=CLUSTER_ID \
        --project=PROJECT_ID

    次のように置き換えます。

    • INSTANCE_ID は、任意の AlloyDB インスタンスの名前(alloydb-primary など)に置き換えます。
    • CLUSTER_ID は、AlloyDB クラスタの名前(alloydb-cluster など)に置き換えます。
    • NUM_CPU は、仮想処理ユニットの数(2 など)に置き換えます。
    • PROJECT_ID は、 Google Cloud プロジェクトの ID に置き換えます。
    • REGION は、AlloyDB クラスタが作成されるリージョンの名前(us-central1 など)に置き換えます。

    AlloyDB インスタンスの作成が完了するまで待ちます。これには数分かかることがあります。

プライマリ インスタンスに接続して AlloyDB データベースとユーザーを作成する

コンソール

  1. 新しく作成したクラスタの [概要] ページにない場合は、 Google Cloud コンソールで、[クラスタ] ページに移動します。

    クラスタに移動

  2. クラスタの [概要] ページを表示するには、CLUSTER_ID クラスタ名をクリックします。

  3. ナビゲーション メニューで [AlloyDB Studio] をクリックします。

  4. [Sign in to AlloyDB Studio] ページで、次の操作を行います。

    1. [データベース] リストで [postgres] を選択します。

    2. [ユーザー] リストで postgres を選択します。

    3. [パスワード] フィールドに、AlloyDB クラスタとそのプライマリ インスタンスを作成するで作成した CLUSTER_PASSWORD を入力します。

    4. [認証] をクリックします。[エクスプローラ] ペインに、データベースにあるオブジェクトのリストが表示されます。

  5. [エディタ 1] タブで、次のことを行います。

    1. AlloyDB データベースを作成します。

      CREATE DATABASE DATABASE_NAME;
      

      DATABASE_NAME は、任意の名前(tutorial_db など)に置き換えます。

    2. [実行] をクリックします。[結果] ペインに Statement executed successfully メッセージが表示されるまで待ちます。

    3. [消去] をクリックします。

    4. AlloyDB データベース ユーザーとパスワードを作成します。

      CREATE USER USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
      

      次のように置き換えます。

      • USERNAME: AlloyDB ユーザーの名前(tutorial_user など)。

      • DATABASE_PASSWORD: AlloyDB データベースのパスワード(tutorial など)。

    5. [実行] をクリックします。[結果] ペインに Statement executed successfully メッセージが表示されるまで待ちます。

  6. AlloyDB Studio の [エクスプローラ] ペインで、 [ユーザー/データベースを切り替える] をクリックします。

  7. [Sign in to AlloyDB Studio] ページで、次の操作を行います。

    1. [データベース] リストで、tutorial_db などの DATABASE_NAME を選択します。

    2. [ユーザー] リストで postgres を選択します。

    3. [パスワード] フィールドに、AlloyDB クラスタとそのプライマリ インスタンスを作成するで作成した CLUSTER_PASSWORD を入力します。

    4. [認証] をクリックします。[エクスプローラ] ペインに、データベースにあるオブジェクトのリストが表示されます。

  8. [エディタ 1] タブで、次のことを行います。

    1. AlloyDB データベース ユーザーにすべての権限を付与します。

      GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";
      
    2. [実行] をクリックします。[結果] ペインに Statement executed successfully メッセージが表示されるまで待ちます。

    3. [消去] をクリックします。

    4. AlloyDB データベース ユーザーに公開スキーマに対する権限を付与します。

      GRANT CREATE ON SCHEMA public TO "USERNAME";
      
    5. [実行] をクリックします。[結果] ペインに Statement executed successfully メッセージが表示されるまで待ちます。

  9. データベース名、ユーザー名、パスワードをメモします。この情報は、Kubernetes Secret を作成するで使用します。

GKE Autopilot クラスタを作成する

クラスタには、少なくとも 1 つのクラスタ コントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンが含まれます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。

コンソール

  1. Google Cloud コンソールで、[Kubernetes クラスタ] ページに移動します。

    Kubernetes クラスタに移動

  2. [作成] をクリックします。

  3. [クラスタの基本] ページの [名前] フィールドに、Autopilot クラスタの GKE_CLUSTER_ID を指定します(例: ap-cluster)。

  4. [リージョン] フィールドで、REGIONus-central1 など)を選択します。

  5. [作成] をクリックします。

    GKE クラスタが作成されるまで待ちます。これには数分かかることがあります。

gcloud

Autopilot クラスタを作成します。

gcloud container clusters create-auto GKE_CLUSTER_ID \
    --location=REGION

次のように置き換えます。

  • GKE_CLUSTER_ID: Autopilot クラスタの名前(ap-cluster など)。
  • REGION: GKE クラスタがデプロイされているリージョンの名前(us-central1 など)。

GKE クラスタが作成されるまで待ちます。これには数分かかることがあります。

AlloyDB Auth Proxy を使用して AlloyDB に接続する

AlloyDB に接続するには、AlloyDB Auth Proxy を使用することをおすすめします。AlloyDB Auth Proxy は、Identity and Access Management(IAM)を使用した強力な暗号化と認証を提供します。これにより、データベースを安全に保つことができます。

AlloyDB Auth Proxy を使用して接続すると、sidecar コンテナ パターンを使用して Pod に追加されます。AlloyDB Auth Proxy コンテナはアプリケーションと同じ Pod にあるため、アプリケーションは localhost を使用して AlloyDB Auth Proxy に接続できます。これにより、セキュリティとパフォーマンスが向上します。

Google サービス アカウントを作成してロールを付与する

Google Cloudでは、アプリケーションはサービス アカウントを使用して、サービス アカウント自体として認証することで、承認された API 呼び出しを行います。アプリケーションがサービス アカウントとして認証されると、アプリケーションはサービス アカウントにアクセス権が付与されているすべてのリソースにアクセスできます。

Google Kubernetes Engine で AlloyDB Auth Proxy を実行するには、アプリケーションを表す Google サービス アカウントを作成します。どこでも同じサービス アカウントを使用するのではなく、各アプリケーションに固有のサービス アカウントを作成することをおすすめします。このモデルは、アプリケーションごとに権限を制限できるため、より安全です。

コンソール

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

    [IAM] に移動

  2. [プロジェクト「PROJECT_ID」の権限] ページで、デフォルトのコンピューティング サービス アカウント PROJECT_NUMBER-compute@developer.gserviceaccount.com を含む行を見つけ、その行の [プリンシパルを編集します] をクリックします。

    プロジェクトに対して自動的に生成される一意の識別子である PROJECT_NUMBER を取得するには、次の操作を行います。

    1. Google Cloud コンソールの [ダッシュボード] ページに移動します。

      ダッシュボードに移動

    2. ページ上部の [選択元] プルダウン リストをクリックします。表示された [選択元] ウィンドウで、プロジェクトを選択します。

    PROJECT_NUMBER は、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。

  3. [別のロールを追加] をクリックします。

  4. roles/artifactregistry.reader ロールを付与するには、[ロールを選択] をクリックし、[プロダクトまたはサービス] から Artifact Registry を選択し、[ロール] から Artifact Registry Reader を選択します。

  5. [保存] をクリックします。プリンシパルにロールが付与されます。

  6. GKE サンプル アプリケーションのサービス アカウントを作成するには、[サービス アカウント] ページに移動します。[サービス アカウント] に移動

  7. プロジェクトを選択します。

  8. [プロジェクト「PROJECT_ID」のサービス アカウント] ページで、[サービス アカウントを作成] をクリックします。

  9. [サービス アカウントを作成] ページの [サービス アカウントの詳細] セクションで、[サービス アカウント名] フィールドに GSA_NAME を入力します(例: gke-alloydb-gsa)。

  10. [作成して続行] をクリックします。

    [サービス アカウントを作成] ページの [このサービス アカウントにプロジェクトへのアクセスを許可する(省略可)] セクションが表示されます。

  11. roles/alloydb.client ロールを付与するには、次のようにします。

    1. [ロールを選択] をクリックします。
    2. [プロダクトまたはサービスごと] から [Cloud AlloyDB] を選択します。
    3. [ロール] から Cloud AlloyDB Client を選択します。
  12. [別のロールを追加] をクリックします。

  13. roles/serviceusage.serviceUsageConsumer ロールを付与するには、[ロールを選択] をクリックし、[プロダクトまたはサービス] から Service Usage を選択し、[ロール] から Service Usage Consumer を選択します。

  14. [完了] をクリックします。Google サービス アカウントにロールが付与されます。

gcloud

  1. Compute Engine が Artifact Registry から読み取れるように、デフォルトの Google サービス アカウントに必要な権限を付与するには、次のコマンドを実行します。

    PROGECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    gcloud projects add-iam-policy-binding PROJECT_ID  --member="serviceAccount:$PROGECT_NUM-compute@developer.gserviceaccount.com"  --role="roles/artifactregistry.reader"
  2. アプリケーションの Google サービス アカウントを作成するには、IAM サービス アカウントを作成します。

    gcloud iam service-accounts create GSA_NAME \
    --display-name="gke-tutorial-service-account"

    GSA_NAME は、新しい IAM サービス アカウントの名前に置き換えます(gke-alloydb-gsa など)。

  3. アプリケーションの GSA に alloydb.client ロールと serviceusage.serviceUsageConsumer ロールを付与するには、次のコマンドを使用します。

    gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/alloydb.client"
    gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/serviceusage.serviceUsageConsumer"

サンプル アプリケーションに Workload Identity Federation for GKE を構成する

Workload Identity Federation for GKE 機能を使用して、AlloyDB Auth Proxy にサービス アカウントを提供するように GKE を構成する必要があります。この方法では、Kubernetes サービス アカウントを Google サービス アカウントにバインドできます。一致する Kubernetes サービス アカウントを使用するアプリケーションは、Google サービス アカウントにアクセスできるようになります。

Google サービス アカウントは、 Google Cloudで自身のアプリケーションを表す IAM ID です。Kubernetes サービス アカウントは、Google Kubernetes Engine クラスタ内のアプリケーションを表す ID です。

Workload Identity Federation for GKE は、Kubernetes サービス アカウントを Google サービス アカウントにバインドします。このバインディングにより、その Kubernetes サービス アカウントを使用するデプロイメントは、 Google Cloudとのやり取りで Google サービス アカウントとして認証されます。

gcloud

  1. Google Cloud コンソールで、Cloud Shell を開きます。

    Cloud Shell を開く

  2. Cloud Shell で、クラスタの認証情報を取得します。

    gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_ID

    このコマンドは、作成した GKE クラスタを使用するように kubectl を構成します。

  3. 任意のエディタで、次の手順を行います。

    1. nano を使用して service-account.yaml を開きます。次に例を示します。

      nano service-account.yaml
    2. エディタに次の内容を貼り付けます。

        apiVersion: v1
        kind: ServiceAccount
        metadata:
          name: KSA_NAME
      

      KSA_NAME は、サービス アカウント名(ksa-alloydb など)に置き換えます。

    3. Ctrl+O キー、Enter キーの順に押して変更を保存し、Ctrl+X キーを押してエディタを終了します。

  4. サンプル アプリケーション用の Kubernetes サービス アカウントを作成します。

    kubectl apply -f service-account.yaml
  5. 2 つのサービス アカウントの間に IAM ポリシー バインディングを作成して、Kubernetes サービス アカウントが Google サービス アカウントの権限を借用できるようにします。

    gcloud iam service-accounts add-iam-policy-binding \
       --role="roles/iam.workloadIdentityUser" \
       --member="serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]" \
       GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
  6. Google サービス アカウントのメールアドレスを使用して、iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID アノテーションを Kubernetes サービス アカウントに追加します。

    kubectl annotate serviceaccount \
      KSA_NAME \
      iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com

Artifact Registry にサンプル アプリケーションのイメージを登録する

gcloud

  1. Cloud Shell で、次のコマンドを使用して、GitHub からサンプルの gke-alloydb-app アプリケーション コードを含むリポジトリのクローンを作成します。

     git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/go
  2. Artifact Registry に Docker イメージ用のリポジトリを作成します。

    gcloud artifacts repositories create REPOSITORY_ID --location REGION --repository-format=docker --project PROJECT_ID

    次のように置き換えます。

    • PROJECT_ID: オブジェクトの ID。
    • REPOSITORY_ID: リポジトリの名前(例: gke-alloydb-sample-app)。
  3. [Cloud Shell の承認] ダイアログで、[承認] をクリックします。この手順をすでに行っている場合は、このプロンプトが表示されません。

  4. Docker コンテナをビルドして Artifact Registry に公開するには、次のコマンドを使用します。

     gcloud builds submit --tag  REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_ID

    次のように置き換えます。

    • PROJECT_ID: オブジェクトの ID。
    • REPOSITORY_ID: リポジトリの名前(例: gke-alloydb-sample-app)。
    • SAMPLE_APPLICATION: サンプル ウェブ アプリケーションの名前(gke-alloydb-app など)。

Kubernetes Secret を作成する

サンプル アプリケーションで使用するデータベース、ユーザー、ユーザー パスワードの Kubernetes Secret を作成します。各 Secret の値は、このチュートリアルのプライマリ インスタンスに接続して AlloyDB データベースとユーザーを作成する手順で指定した値に基づいています。詳細については、シークレットをご覧ください。

gcloud

gke-alloydb-secret などの Kubernetes SECRET を使用して、接続情報を保存します。

kubectl create secret generic SECRET \
  --from-literal=database=DATABASE_NAME \
  --from-literal=username=USERNAME \
  --from-literal=password=DATABASE_PASSWORD

サイドカー パターンで AlloyDB Proxy をデプロイして実行する

次の理由から、AlloyDB Proxy を sidecar パターンで(Pod をアプリケーションと共有する追加のコンテナとして)実行することをおすすめします。

  • SQL トラフィックがローカルで公開されないようにします。AlloyDB Proxy は送信接続を暗号化しますが、受信接続の公開を制限する必要があります。
  • 単一障害点を防ぐことができます。各アプリケーションのデータベースへのアクセスは他のアプリケーションから独立しているため、復旧しやすくなります。
  • AlloyDB Proxy へのアクセスを制限し、データベースをクラスタ全体に公開するのではなく、アプリケーションごとに IAM 権限を使用できるようにします。
  • リソース リクエストをより正確にスコープできます。AlloyDB Proxy はリソースを使用量に比例して消費するため、このパターンにより、アプリケーションのスケーリングに合わせて、リソースをより正確にスコープして、リクエストできます。
  • コマンド セクションで指定した DB_PORT127.0.0.1 を使用して接続するように、アプリケーションを構成できます。

GKE クラスタを作成してアプリケーションのコンテナ イメージをビルドしたら、コンテナ化されたアプリケーションを GKE クラスタにデプロイします。

gcloud

このチュートリアルでは、AlloyDB をデータストアとして使用する投票収集サンプル ウェブ アプリケーション gke-alloydb-app をデプロイします。

  1. AlloyDB プロキシが接続する AlloyDB プライマリ インスタンスのインスタンス接続 INSTANCE_URI を取得します。

       gcloud alloydb instances describe INSTANCE_ID \
       --cluster=CLUSTER_ID \
       --region=REGION \
       --format="value(name)"

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの名前(alloydb-primary など)。
    • CLUSTER_ID: クラスタの名前(alloydb-cluster など)。

    出力には、このセクションのステップ 2.b の proxy_sidecar_deployment.yaml 定義ファイルで指定した INSTANCE_URI が含まれます。

  2. 任意のエディタ(nano など)で、次の手順を完了します。

    1. 任意のエディタ(nano など)を使用して proxy_sidecar_deployment.yaml を開きます。

      nano proxy_sidecar_deployment.yaml
    2. エディタに次の内容を貼り付けます。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: gke-alloydb
      spec:
        selector:
          matchLabels:
            app: SAMPLE_APPLICATION
        template:
          metadata:
            labels:
              app: SAMPLE_APPLICATION
          spec:
            serviceAccountName: KSA_NAME
            containers:
            - name: SAMPLE_APPLICATION
              # Replace <PROJECT_ID> and <REGION> with your project ID and region.
              image: REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION:latest
              imagePullPolicy: Always
              # 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 NAME 
              # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1)
              - name: INSTANCE_HOST
                value: "127.0.0.1"
              - name: DB_PORT
                value: "5432"
              # To use Automatic IAM Authentication (recommended)
              # use DB_IAM_USER instead of DB_USER
              # you may also remove the DB_PASS environment variable
              - name: DB_USER
                valueFrom:
                  secretKeyRef:
                    name: SECRET
                    key: username
              - name: DB_PASS
                valueFrom:
                 secretKeyRef:
                    name: SECRET
                    key: password
              - name: DB_NAME
                valueFrom:
                  secretKeyRef:
                    name: SECRET
                    key: database
           # If you are using the Go connector (recommended), you can
            # remove alloydb-proxy (everything below this line)
            - name: alloydb-proxy
              # This uses the latest version of the AlloyDB Auth proxy
              # It is recommended to use a specific version for production environments.
              # See: https://github.com/GoogleCloudPlatform/alloydb-auth-proxy
              image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1
              command:
                - "/alloydb-auth-proxy"
                #AlloyDB instance name as parameter for the AlloyDB proxy
                # Use <INSTANCE_URI> 
                - "INSTANCE_URI"
              securityContext:
                # The default AlloyDB Auth proxy image runs as the
                # "nonroot" user and group (uid: 65532) by default.
                runAsNonRoot: true
              resources:
                requests:
                  # The proxy's memory use scales linearly with the number of active
                  # connections. Fewer open connections will use less memory. Adjust
                  # this value based on your application's requirements.
                  memory: "2Gi"
                  # The proxy's CPU use scales linearly with the amount of IO between
                  # the database and the application. Adjust this value based on your
                  # application's requirements.
                  cpu:    "1"
      

      INSTANCE_URI は、ステップ 1 の AlloyDB プライマリ インスタンスのパスに置き換えます(projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances/INSTANCE_ID など)。

    3. Ctrl+O キー、Enter キーの順に押して変更を保存し、Ctrl+X キーを押してエディタを終了します。

  3. gke-alloydb-app アプリケーションをデプロイするには、前の手順で作成した proxy_sidecar_deployment.yaml 定義ファイルを適用します。

    kubectl apply -f proxy_sidecar_deployment.yaml
  4. Pod 内の両方のコンテナのステータスが running であることを確認します。

    kubectl get pods

    出力例:

     NAME                          READY   STATUS    RESTARTS   AGE
     gke-alloydb-8d59bb4cc-62xgh   2/2     Running   0          2m53s
    
  5. サンプルの gke-alloydb-app アプリケーションに接続するには、サービス(外部 HTTP ロードバランサなど)を使用します。任意のエディタで、次の手順を行います。

    1. nano を使用して service.yaml を開きます。次に例を示します。

      nano service.yaml
    2. nano エディタに次のコンテンツを貼り付けます。

      apiVersion: v1
      kind: Service
      metadata:
        name: SAMPLE_APPLICATION
      spec:
        type: LoadBalancer
        selector:
          app: SAMPLE_APPLICATION
        ports:
        - port: 80
          targetPort: 8080
      

      SAMPLE_APPLICATION は、サンプル ウェブ アプリケーションの名前(gke-alloydb-app など)に置き換えます。

    3. Ctrl+O キー、Enter キーの順に押して変更を保存し、Ctrl+X キーを押してエディタを終了します。

  6. サービス gke-alloydb-app アプリケーションをデプロイするには、service.yaml ファイルを適用します。

     kubectl apply -f service.yaml
  7. Service の外部 IP アドレスなどの Service の詳細を取得するには、次のコマンドを使用します。

    kubectl get service

    出力例:

    NAME              TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
    gke-alloydb-app   LoadBalancer   34.118.229.246   35.188.16.172   80:32712/TCP   45s
    kubernetes        ClusterIP      34.118.224.1     <none>          443/TCP        85m
    
  8. 前の手順の外部 IP の値を使用して、次の URL のサンプル アプリケーションにアクセスします。

    http://EXTERNAL-IP
    

設定ファイルの例

proxy_sidecar_deployment.yaml

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <YOUR-DEPLOYMENT-NAME>
spec:
  selector:
    matchLabels:
      app: <YOUR-APPLICATION-NAME>
  template:
    metadata:
      labels:
        app: <YOUR-APPLICATION-NAME>
    spec:
      serviceAccountName: <YOUR-KSA-NAME>
      containers:
      # Your application container goes here.
      - name: <YOUR-APPLICATION-NAME>
        image: <YOUR-APPLICATION-IMAGE-URL>
        env:
        - name: DB_HOST
          # The port value here (5432) should match the --port flag below.
          value: "localhost:5342"
        - 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
      # The Auth Proxy sidecar goes here.
      - name: alloydb-auth-proxy
        # Make sure you have automation that upgrades this version regularly.
        # A new version of the Proxy is released monthly with bug fixes,
        # security updates, and new features.
        image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1
        args:
          # If you're connecting over public IP, enable this flag.
          # - "--public-ip"

          # If you're connecting with PSC, enable this flag:
          # - "--psc"

          # If you're using auto IAM authentication, enable this flag:
          # - "--auto-iam-authn"

          # Enable structured logging with Google's LogEntry format:
          - "--structured-logs"

          # Listen on localhost:5432 by default.
          - "--port=5432"
          # Specify your instance URI, e.g.,
          # "projects/myproject/locations/us-central1/clusters/mycluster/instances/myinstance"
          - "<INSTANCE-URI>"

        securityContext:
          # The default AlloyDB Auth Proxy image runs as the "nonroot" user and
          # group (uid: 65532) by default.
          runAsNonRoot: true
        # You should use resource requests/limits as a best practice to prevent
        # pods from consuming too many resources and affecting the execution of
        # other pods. You should adjust the following values based on what your
        # application needs. For details, see
        # https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
        resources:
          requests:
            # The proxy's memory use scales linearly with the number of active
            # connections. Fewer open connections will use less memory. Adjust
            # this value based on your application's requirements.
            memory: "2Gi"
            # The proxy's CPU use scales linearly with the amount of IO between
            # the database and the application. Adjust this value based on your
            # application's requirements.
            cpu:    "1"

service.yaml

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: Service
metadata:
  name: <YOUR-SERVICE-NAME>
spec:
  type: LoadBalancer
  selector:
    app: <YOUR-APPLICATION-NAME>
  ports:
  - port: 80
    targetPort: 8080

service-account.yaml

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: <YOUR-KSA-NAME> # TODO(developer): replace this value

クリーンアップ

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

プロジェクトの削除

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

プロジェクトを削除するには、次の操作を行います。

  1. Google Cloud コンソールで、[リソースを管理] ページに移動します。

    リソースを管理する

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。

  3. ダイアログに PROJECT_ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ