View a markdown version of this page

Aurora Global Database での外部テーブルの使用 - Amazon Aurora

Aurora Global Database での外部テーブルの使用

Aurora Global Database は、リージョンごとのセットアップによる分析クエリの実行をサポートしています。このセクションでは、リージョン間で分析クエリを設定する方法、自動的にレプリケートされるリソース、ディザスタリカバリシナリオの計画方法について説明します。

Global Database での aurora_analytics の使用

外部テーブルとは、Amazon S3、Amazon S3 Tables、または AWS Glue Data Catalog の Apache Iceberg または Parquet データを指す PostgreSQL のテーブル定義のことです。データは Aurora にコピーされません。プライマリ DB クラスターから各セカンダリ DB クラスターにレプリケートされるのは、次のもののみです。

  • aurora_analytics 拡張機能のインストール

  • 外部テーブル定義 (DDL)

以下はレプリケートされないため、セカンダリ DB クラスターが存在する各リージョンで個別にプロビジョニングする必要があります。

  • DB クラスターへの IAM ロールの関連付け。

  • Amazon S3、AWS Glue、または Amazon S3 Tables へのアクセスを許可する IAM ポリシー

  • これらのサービスに到達するために使用する VPC ネットワーク (エンドポイントまたは NAT)

Global Database のセットアップ

ステップ 1: 各リージョンに IAM ポリシーとロールを作成する

IAM ロールの関連付けは、プライマリ DB クラスターとセカンダリ DB クラスター間でレプリケートされません。プライマリまたはセカンダリ DB クラスターが存在するすべてのリージョンで、機能名 AuroraAnalytics を指定した IAM ロールを作成してアタッチする必要があります。

  1. データへの読み取りアクセスを許可する IAM ポリシーを作成します。必要なアクセス許可は、データ形式によって異なります。詳細については、「IAM ポリシーのリファレンス」を参照してください。

  2. rds.amazonaws.com を信頼する IAM ロールを作成して、ポリシーをアタッチします。

  3. そのリージョンの DB クラスターにロールを関連付けます。

    aws rds add-role-to-db-cluster \ --db-cluster-identifier <cluster-in-this-region> \ --role-arn arn:aws:iam::<account-id>:role/AuroraAnalyticsRole \ --feature-name AuroraAnalytics
  4. ロールのステータスが [アクティブ] と表示されるまで待ちます。

注記

ロールがアタッチされた直後 (またはインスタンスが起動または昇格された直後) に、外部テーブルに対するクエリが一時的にエラー credential to access AWS service is unavailable を返すことがあります。ロールのステータスが [アクティブ] になるまで待ってから、外部テーブルでクエリを実行します。

ステップ 2: 各リージョンでネットワークを設定する

VPC 設定もレプリケートされません。各 DB クラスター (プライマリおよびすべてのセカンダリ) の VPC で、クエリを解決するために DB クラスターが外部テーブルデータにアクセスできるよう、必要なサービスへのネットワークパスを提供します。各セカンダリのクラスターネットワーク設定で、外部テーブルのリージョンに到達できることを確認します。

各リージョンに必要な VPC エンドポイント
サービス エンドポイントタイプ 必要な用途
Amazon S3 (com.amazonaws.<region>.s3) ゲートウェイ Amazon S3 および Amazon S3 Tables のすべてのデータアクセス
AWS Glue (com.amazonaws.<region>.glue) インターフェイス AWS Glue Data Catalog アクセス (Iceberg テーブル)
AWS STS (com.amazonaws.<region>.sts) インターフェイス IAM ロールの認証情報の取得

AWS Glue および AWS STS のインターフェイスエンドポイントで、プライベート DNS を有効にし、VPC CIDR からのインバウンド TCP 443 を許可します。

ステップ 3: 拡張機能をプライマリにインストールする

プライマリ DB クラスターのライター DB インスタンスに接続し、外部テーブルを作成する各データベースに拡張機能をインストールします。

CREATE EXTENSION aurora_analytics;

拡張機能は、各セカンダリ DB クラスターに自動的にレプリケートされます。

ステップ 4: プライマリに外部テーブルを作成する

プライマリ DB クラスターのライター DB インスタンスで、データを指す外部テーブルを作成します。

-- Parquet via S3 URI CREATE FOREIGN TABLE ft_orders () SERVER aurora_analytics_server OPTIONS (location 's3://my-bucket/orders/', format 'parquet', region 'us-east-1'); -- Iceberg via Glue ARN CREATE FOREIGN TABLE ft_transactions () SERVER aurora_analytics_server OPTIONS (location 'arn:aws:glue:us-east-1:123456789012:table/mydb/transactions', format 'iceberg');

Aurora は DDL を各セカンダリ DB クラスターにレプリケートします。外部テーブルをクエリに使用できます。

ステップ 5: セカンダリで検証する

セカンダリ DB クラスターに接続し、レプリケーションと読み取りアクセスを確認します。

SELECT extname, extversion FROM pg_extension WHERE extname = 'aurora_analytics'; SELECT count(*) FROM ft_orders;

外部テーブルのリージョンのピン留め

外部テーブルを作成すると、そのデータの location と Region がテーブル定義に保存され、グローバルデータベース内のすべての DB クラスターにレプリケートされます。すべての DB クラスターは同じ場所から読み取りを行います。

これは、以下を意味します。

  • 各セカンダリ DB クラスターは、テーブル定義で指定されたリージョンから外部テーブルデータを読み取ります。

  • そのリージョンがセカンダリのリージョンと異なる場合、読み取りはクロスリージョンになり、データ転送コストとレイテンシーが増加します。

  • 各セカンダリの IAM ロールとネットワークにより、外部テーブルのリージョンへのアクセスが許可されます。

注記

Amazon S3 マルチリージョンアクセスポイント (MRAP) は、外部テーブルの場所としてサポートされていません。Aurora PostgreSQL では、location オプションで s3:// URI、AWS Glue テーブル ARN、Amazon S3 Tables ARN のみを受け入れます。MRAP ARN と MRAP ホスト名は、location オプションでは無効です。

DR への備えに関する一般的なガイダンス

セカンダリ DB クラスターのステップ 1~2 のリージョンごとの設定を完了し、DB クラスターが外部テーブルデータにアクセスする方法を決定します。

  • クロスリージョン読み取りを許可する: このアプローチは、元のリージョンが正常な状態にある、計画的なスイッチオーバーシナリオにのみ適しています。

  • リージョンローカルコピーを事前に準備する: Amazon S3 クロスリージョンレプリケーションを使用して、元のリージョンが使用できない場合でも、分析クエリをローカルで読み取ることができます。リージョンローカルコピーを指すように外部テーブルの場所を更新する ALTER FOREIGN TABLE ... OPTIONS (SET ...) ステートメントを準備します。

注記

スイッチオーバーまたはフェイルオーバーが発生した場合、ディスク上の読み取りキャッシュは保持または転送されません。イベント後の最初のクエリは Amazon S3 からデータを読み取るため、キャッシュがウォームアップされるまでレイテンシーが高くなります。

スイッチオーバーとフェイルオーバーの処理

Aurora Global Database のスイッチオーバーまたはフェイルオーバー中、外部テーブルクエリには、標準データベースクライアント接続とは別に、追加の依存関係が生じます。各外部テーブルによって指定されたリージョンの Amazon S3、AWS Glue、および AWS STS に到達できる必要があります。

Global Database スイッチオーバー

スイッチオーバー時に、プライマリ DB クラスターとセカンダリ DB クラスターはどちらも正常です。新しいプライマリ DB クラスターが利用可能になった後も、クエリは各外部テーブルで指定されたリージョンから読み取りを続けます。そのリージョンが新しいライターのリージョンと異なる場合、クロスリージョンの読み取りが発生し、データ転送コストとレイテンシーが増加します。クロスリージョン読み取りレイテンシーを回避するには、準備済みの ALTER FOREIGN TABLE ... OPTIONS (SET ...) ステートメントを実行して、外部テーブルをリージョンローカルコピーに再ポイントします。

スイッチオーバー後のオペレーションの再開

  1. クライアントが新しいプライマリ DB クラスターのライターエンドポイントに再接続できるようにします。

  2. IAM ロールのステータスが [アクティブ] になるまで待ちます。再試行ロジックを使用したテストクエリを (例: SELECT count(*) FROM ft_orders) 外部テーブルに対して実行し、分析クエリが動作していることを確認します。

  3. リージョンローカルコピーを使用する場合は、新しいプライマリ DB クラスターで準備済みの ALTER ステートメントを実行して、外部テーブルの場所を更新します。

    ALTER FOREIGN TABLE ft_orders OPTIONS (SET location 's3://dr-region-bucket/orders/', SET region 'us-west-2'); ALTER FOREIGN TABLE ft_transactions OPTIONS (SET location 'arn:aws:glue:us-west-2:123456789012:table/mydb/transactions');
注記

ALTER FOREIGN TABLE ... OPTIONS (SET ...) はカタログメタデータのみを変更する操作です。データ移動なしですぐに完了します。対象の単一の外部テーブルに対して、短時間の ACCESS EXCLUSIVE ロックを取得します。そのため、同じテーブルに対する処理中のクエリによってブロックされます。

Global Database フェイルオーバー

元のリージョンに障害が発生したり、アクセスできない状態にある可能性があります。外部テーブルが障害のあるリージョンを参照している場合、そのリージョンが回復するか、外部テーブルを正常なリージョンのデータに再ポイントするまで、クエリに高いレイテンシーが発生するか、タイムアウトエラーで失敗することになります。リージョンローカルコピーを事前に準備しておいた場合は、準備済みの ALTER FOREIGN TABLE ... OPTIONS (SET region ...) ステートメントを実行して、外部テーブルがそのリージョンローカルコピーを指すように設定します。

元のプライマリリージョンへの復帰

元のプライマリリージョンが利用可能になると、Aurora はそれをセカンダリ DB クラスターとしてグローバルデータベースに自動的に再追加します。スイッチオーバーまたはフェイルオーバー中に行われた ALTER FOREIGN TABLE による変更は、グローバルレプリケーションを通じてレプリケートされます。元のプライマリリージョンを復元するには、スイッチオーバーを実行します。スイッチオーバーが完了したら、外部テーブルの場所を、復元されたプライマリリージョンのデータを指すように戻すかどうかを決定します。

Global Databaseのエラーメッセージ

スイッチオーバーまたはフェイルオーバー後、新しいプライマリリージョンのクエリは、セカンダリ DB クラスターを実行しているリージョンで発生するものと同じ、IAM ロールの関連付け、IAM アクセス許可、ネットワークに関するエラーによって失敗する可能性があります。これらのエラーとその解決方法については、「モニタリングとトラブルシューティング」の Global Database のスイッチオーバーとフェイルオーバーについてのページで説明されています。IAM ロールの関連付け、IAM ポリシー、VPC ネットワークはレプリケートされないため、各セカンダリリージョンで前提条件を満たす必要があります。

  • 外部テーブルの location および region は、単一の定義としてレプリケートされ、リージョンごとに上書きすることはできません。どちらのクラスターも、同じテーブルに対して異なるリージョンを保持することはできません。

  • Amazon S3 マルチリージョンアクセスポイントと Amazon S3 アクセスポイント ARN は、外部テーブルの場所としてサポートされていません。

  • VPC ゲートウェイエンドポイントはリージョン固有のものであり、別のリージョンの Amazon S3 に到達できません。クロスリージョンネットワークパスには、NAT/インターネット出力またはトランジットゲートウェイが必要です。

  • スイッチオーバー後、外部テーブルの場所を新しいプライマリ DB クラスターのリージョンに更新すると、以前のプライマリ DB クラスターでは、代わりにクロスリージョン読み取りが発生します。

  • 外部テーブル DDL と拡張機能は、セカンダリがアタッチされ、同期された後にのみレプリケートされます。セカンダリが接続された後、プライマリで aurora_analytics 拡張機能をインストールし、外部テーブルを作成します。そうすることで、それらが伝播されます。