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 ロールを作成してアタッチする必要があります。
-
データへの読み取りアクセスを許可する IAM ポリシーを作成します。必要なアクセス許可は、データ形式によって異なります。詳細については、「IAM ポリシーのリファレンス」を参照してください。
-
rds.amazonaws.comを信頼する IAM ロールを作成して、ポリシーをアタッチします。 -
そのリージョンの 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 -
ロールのステータスが [アクティブ] と表示されるまで待ちます。
注記
ロールがアタッチされた直後 (またはインスタンスが起動または昇格された直後) に、外部テーブルに対するクエリが一時的にエラー credential to access AWS service is unavailable を返すことがあります。ロールのステータスが [アクティブ] になるまで待ってから、外部テーブルでクエリを実行します。
ステップ 2: 各リージョンでネットワークを設定する
VPC 設定もレプリケートされません。各 DB クラスター (プライマリおよびすべてのセカンダリ) の VPC で、クエリを解決するために DB クラスターが外部テーブルデータにアクセスできるよう、必要なサービスへのネットワークパスを提供します。各セカンダリのクラスターネットワーク設定で、外部テーブルのリージョンに到達できることを確認します。
| サービス | エンドポイントタイプ | 必要な用途 |
|---|---|---|
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 ...) ステートメントを実行して、外部テーブルをリージョンローカルコピーに再ポイントします。
スイッチオーバー後のオペレーションの再開
-
クライアントが新しいプライマリ DB クラスターのライターエンドポイントに再接続できるようにします。
-
IAM ロールのステータスが [アクティブ] になるまで待ちます。再試行ロジックを使用したテストクエリを (例:
SELECT count(*) FROM ft_orders) 外部テーブルに対して実行し、分析クエリが動作していることを確認します。 -
リージョンローカルコピーを使用する場合は、新しいプライマリ 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拡張機能をインストールし、外部テーブルを作成します。そうすることで、それらが伝播されます。