AWS RedshiftのFederated QueryはRedshiftからRDSやAuroraのPostgreSQLテーブルにアクセスできる機能です。
PostgreSQLにアクセスできるのであれば、似たインターフェースであるRedshiftにもアクセスできるんじゃないかと期待して試しました。Redshift同士のアクセスです。
結論
できない。(2020/12/02現在)
ドキュメントにもRDS PostgreSQLやAurora PostgreSQLにアクセスする方法が書かれていますが、Redshift同士ができるとは書かれていません。
試すと次のようなエラーメッセージが出ました。
3 is outside the valid range for parameter "extra_float_digits" (-15 .. 2)
検証内容
せっかく試したので、作業ログを残しておきます。クラスタBからクラスタAにアクセスしようとしています。
Redshift同士ではなく、PostgreSQLへのFederated Queryであれば、同等の手順で成功します。
- Redshiftクラスタを2つ構築(AとB)。BからAに通信できるようにサブネットやセキュリティグループを適切に設定。
- クラスタAの接続パスワードをAWS Secret Managerに保存。
- AWS Secret ManagerにアクセスできるIAM Roleを作成。IAM Roleの内容は以下参照。
- クラスタBに3で作成のIAM Roleをアタッチ。
- クラスタAに適当なテーブルを作成。
- クラスタBに外部スキーマを作成。作成のSQLコマンドは以下参照。
- クラスタBでSELECTを実行してみる。
手順3で作成のIAM Roleは以下のような内容です。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:SECRETNAME" ] } ] }
手順6で外部スキーマを作成するSQLコマンドは以下の内容です。
DATABASE 'dev' SCHEMA 'public'
の部分はクラスタAでの名前URI
はクラスタAのエンドポイントIAM_ROLE
は手順3で作成したIAM RoleのArnSECRET_ARN
はパスワードを保存した Secret Manager のArn
CREATE EXTERNAL SCHEMA fedtest FROM POSTGRES DATABASE 'dev' SCHEMA 'public' URI 'AAA.xxxxxxxxxxxx.ap-northeast-1.redshift.amazonaws.com' PORT 5439 IAM_ROLE 'arn:aws:iam::123456789012:role/ROLENAME' SECRET_ARN 'arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:SECRETNAME';
以下の通り、エラーになります。
dev=# select * from fedtest.sample1; ERROR: ----------------------------------------------- error: 3 is outside the valid range for parameter "extra_float_digits" (-15 .. 2) code: 25000 context: query: 0 location: pgclient.cpp:666 process: padbmaster [pid=15336] -----------------------------------------------
残念。