書き込みエンドポイントを使用してデータベース接続を管理する

このページでは、AlloyDB for PostgreSQL の書き込みエンドポイントを使用して、アプリケーションのデータベース接続管理を簡素化する方法について説明します。

エンドポイント は、アプリケーションが AlloyDB インスタンスに接続するために使用できる安定したドメイン名サービス(DNS)名を提供する AlloyDB リソースです。エンドポイントを使用すると、アプリケーションをインスタンスの特定の IP アドレスまたは Uniform Resource Identifier(URI)から切り離すことができます。この抽象化により、オペレーション イベント(障害復旧、バックアップの復元、移行など)中の接続管理が簡素化されます。アプリケーションの構成を変更せずに、エンドポイントの DNS 名を別のインスタンスにリダイレクトできるためです。

AlloyDB エンドポイントは WRITE_ENDPOINT タイプをサポートしています。書き込みエンドポイントは、トラフィックを単一の AlloyDB プライマリ インスタンスに転送し、読み取りトラフィックと書き込みトラフィックの両方を処理します。

DNS 名はグローバル リソースとして機能しますが、エンドポイント リソース自体はリージョン リソースです。それでも、各エンドポイントはインスタンスにグローバルにリンクでき、その DNS 名はどのロケーションからでも解決できます。

エンドポイントを使用するメリット

書き込みエンドポイントを使用すると、次のメリットがあります。

  • 障害復旧の簡素化: セカンダリ クラスタにスイッチオーバー またはクロスリージョン フェイルオーバー を実行すると、AlloyDB は新しいプライマリ インスタンスを指すようにエンドポイントを自動的に更新します。アプリケーションは同じエンドポイント DNS 名を使用して再接続できるため、目標復旧時間(RTO)を短縮できます。
  • シームレスなバックアップ復旧: バックアップからインスタンスを復元すると、AlloyDB は新しい IP アドレスを持つ新しいインスタンスを作成します。新しく復元されたインスタンスを指すようにエンドポイントを更新できます。これにより、アプリケーションは構成を変更せずにオペレーションを再開できます。
  • 移行の簡素化: 移行中に、アプリケーションの中断を最小限に抑えて、エンドポイントをソース データベースから AlloyDB インスタンスに切り替えることができます。

制限事項

  • エンドポイントは、 プライベート サービス アクセス(PSA)を使用するように構成されたインスタンスのみをサポートします。 エンドポイントは、 Private Service Connect(PSC)を使用するように構成されたインスタンスをサポートしていません。
  • AlloyDB 言語コネクタと AlloyDB Auth Proxy のサポートは、書き込みエンドポイントでは使用できません。
  • 同じターゲット インスタンスを指すエンドポイントに対する同時変更オペレーション(同時更新、更新と削除オペレーションなど)はサポートされておらず、失敗する可能性があります。

始める前に

  1. Google Cloud CLI をインストールして初期化します。
  2. Cloud DNS API を有効にします。
  3. エンドポイントのターゲットとして機能する既存の AlloyDB インスタンスがあることを確認します。
  4. エンドポイントを管理するために必要な権限を取得するには、プロジェクトに対する AlloyDB 管理者(roles/alloydb.admin Identity and Access Management(IAM)ロールを付与するよう 管理者に依頼してください。この事前定義ロールには、エンドポイントの管理に必要な権限が含まれています。

    カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。必要な権限は次のとおりです。

    • alloydb.endpoints.create
    • alloydb.endpoints.update
    • alloydb.endpoints.get
    • alloydb.endpoints.list
    • alloydb.endpoints.delete

詳細については、 AlloyDB IAM のロールと権限をご覧ください。

書き込みエンドポイントの作成と管理は、Google Cloud CLI を使用して行えます。

エンドポイントを作成する

書き込みエンドポイントを作成するには、Google Cloud CLI を使用します。エンドポイント タイプは WRITE_ENDPOINT で、単一のプライマリ インスタンスをターゲットにする必要があります。

コンソール

  1. コンソールで、[**エンドポイント**] ページに移動します。 Google Cloud

    エンドポイントに移動

  2. [エンドポイントの作成] をクリックします。

  3. [エンドポイント名] フィールドに、エンドポイントの ID を入力します。 使用できるのは、英小文字(a ~ z)、数字、ハイフンのみです。先頭は英小文字に、末尾は英小文字または数字にしてください

  4. リージョン を選択します。

  5. [**エンドポイントのタイプ**] で [**書き込み**] を選択します。

  6. [ターゲット インスタンス] フィールドで、このエンドポイントが指すプライマリ インスタンスを選択します。

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

gcloud

gcloud beta alloydb endpoints create ENDPOINT_ID \
    --project=PROJECT_ID \
    --region=REGION_ID \
    --endpoint-type=ENDPOINT_TYPE \
    --target-instances=TARGET_INSTANCE_NAME

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

  • ENDPOINT_ID: エンドポイントの固有識別子。この ID は、指定したプロジェクトとロケーション内で一意である必要があります。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • REGION_ID: エンドポイントを作成するリージョンの ID(us-central1 など)。
  • ENDPOINT_TYPE: エンドポイント リソースのタイプ。 WRITE_ENDPOINT のみがサポートされています。
  • TARGET_INSTANCE_NAME: エンドポイントが指す AlloyDB for PostgreSQL インスタンスの完全なリソース名。インスタンスの完全なリソースパスの形式は projects/$PROJECT/locations/$LOCATION/clusters/$CLUSTER/instances/$INSTANCE です。

エンドポイントを使用してインスタンスに接続する

エンドポイントを使用して AlloyDB インスタンスに接続するには、まずエンドポイントに関連付けられた自動生成された DNS 名を取得する必要があります。

DNS 名を取得する

エンドポイントの DNS 名は、Google Cloud CLI を使用して確認できます。

コンソール

  1. コンソールで、[**エンドポイント**] ページに移動します。 Google Cloud

    エンドポイントに移動

  2. 接続するエンドポイントを見つけて、[DNS 名] 列の値をコピーします。

gcloud

  1. gcloud beta alloydb endpoints describe コマンドを実行します。

    gcloud beta alloydb endpoints describe ENDPOINT_ID \
        --project=PROJECT_ID \
        --region=REGION_ID
    

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

    • ENDPOINT_ID: エンドポイントの ID
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • REGION_ID: エンドポイントが存在するリージョンの ID
  2. コマンド出力で dnsName フィールドを見つけて、その値をコピーします。

psql を使用して接続する

DNS 名を取得したら、接続文字列またはクライアント ツールでホストとして使用できます。たとえば、psql クライアントを使用して接続するには、次のコマンドを実行します。

psql -h DNS_NAME -U USERNAME -d DATABASE_NAME

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

  • DNS_NAME: エンドポイントの DNS 名
  • USERNAME: 接続するデータベース ユーザー
  • DATABASE_NAME: 接続先のデータベースの名前

psql の使用方法の詳細については、 psql クライアントを使用して接続するをご覧ください。

エンドポイントを更新する

復元オペレーション後など、エンドポイントが指すインスタンスを変更するには、次のコマンドを使用します。

コンソール

  1. コンソールで、[**エンドポイント**] ページに移動します。 Google Cloud

    エンドポイントに移動

  2. 更新するエンドポイントの行で、 [Actions] をクリックし、 [Edit] を選択します。

  3. [ターゲット インスタンス] フィールドで、このエンドポイントが指す新しいプライマリ インスタンスを選択します。

  4. [更新] をクリックします。

gcloud

gcloud beta alloydb endpoints update ENDPOINT_ID \
    --project=PROJECT_ID \
    --region=REGION_ID \
    --target-instances=NEW_TARGET_INSTANCE_NAME

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

  • ENDPOINT_ID: 更新するエンドポイントの ID
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • REGION_ID: エンドポイントが存在するリージョンの ID
  • NEW_TARGET_INSTANCE_NAME: 新しいターゲット インスタンスの完全なリソース名

エンドポイントを一覧表示する

特定のプロジェクトとリージョン内のすべてのエンドポイントを一覧表示するには、次のコマンドを使用します。

コンソール

  1. コンソールで、[**エンドポイント**] ページに移動します。 Google Cloud

    エンドポイントに移動

    このページには、現在のプロジェクト内のすべてのエンドポイントが一覧表示されます。

gcloud

gcloud beta alloydb endpoints list --project=PROJECT_ID \
    --region=REGION_ID

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • REGION_ID: エンドポイントが存在するリージョンの ID

エンドポイントの詳細を表示

特定のエンドポイントの詳細を表示するには、次の Google Cloud CLI コマンドを使用します。

gcloud

gcloud beta alloydb endpoints describe ENDPOINT_ID \
    --project=PROJECT_ID \
    --region=REGION_ID

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

  • ENDPOINT_ID: 説明するエンドポイントの ID
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • REGION_ID: エンドポイントが存在するリージョンの ID

コンソールで、[エンドポイント] ページにエンドポイントの詳細が表示されます。 Google Cloud

エンドポイントを削除する

エンドポイントを削除するには、次のコマンドを使用します。

コンソール

  1. コンソールで、[**エンドポイント**] ページに移動します。 Google Cloud

    エンドポイントに移動

  2. 削除するエンドポイントの行で、 [Actions] をクリックし、 [Delete] を選択します。

  3. 確認のため、エンドポイント ID を入力して [削除] をクリックします。

gcloud

gcloud beta alloydb endpoints delete ENDPOINT_ID \
    --project=PROJECT_ID \
    --region=REGION_ID

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

  • ENDPOINT_ID: 削除するエンドポイントの ID
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • REGION_ID: エンドポイントが存在するリージョンの ID

スイッチオーバーまたはクロスリージョン フェイルオーバー時の書き込みエンドポイントの動作

エンドポイントの DNS 名は作成時に特定のインスタンスの IP アドレスに解決されますが、これらのエンドポイントは動的です。 クロスリージョン レプリケーション アクティビティ( スイッチオーバークロスリージョン フェイルオーバープレビュー)など)が発生した場合、 AlloyDB 書き込みエンドポイントは手動操作なしで継続的な接続を保証します。セカンダリ クラスタが昇格して新しいプライマリ クラスタになると、エンドポイントは新しいプライマリ インスタンスを指すように DNS レコードを自動的に更新します。この動作により、アプリケーション接続文字列の手動再構成が不要になり、オペレーションの複雑さが大幅に軽減され、目標復旧時間(RTO)を満たすためにダウンタイムが最小限に抑えられます。

オペレーションと DNS 伝播が完了すると、アプリケーションは同じエンドポイント DNS 名を使用して新しいプライマリ インスタンスに再接続できます。

フェイルオーバー中の書き込みの競合を防ぐ

クロスリージョン フェイルオーバー中に書き込みエンドポイントを使用すると、新しい書き込みトラフィックが元のプライマリ クラスタから新しいクラスタに自動的に転送されるため、書き込みの競合を防ぐことができます。フェイルオーバー時の書き込みエンドポイント の動作の詳細については、 書き込みエンドポイントを使用してスプリットブレインを回避するをご覧ください。

次のステップ