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

スイッチオーバー、クロスリージョン フェイルオーバー、バックアップの復元、移行中に、AlloyDB for PostgreSQL プライマリ インスタンスの特定の IP アドレスまたは Uniform Resource Identifier(URI)からアプリケーションを切り離すには、書き込みエンドポイントを構成します。

エンドポイントは、アプリケーションが AlloyDB インスタンスに接続するために使用できる安定したドメイン ネーム システム(DNS)名を提供する AlloyDB リソースです。この抽象化により、運用イベント(障害復旧、バックアップの復元、移行など)中の接続管理が簡素化されます。これは、アプリケーションの構成を変更せずに、エンドポイントの 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. 更新するエンドポイントの行で、 [アクション] をクリックし、[編集] を選択します。

  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. 削除するエンドポイントの行で、 [アクション] をクリックし、[削除] を選択します。

  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 名を使用して新しいプライマリ インスタンスに再接続できます。

フェイルオーバー中に競合する書き込みを防止する

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

次のステップ