VPCピアリング越しのAurora(PostgreSQL)にRedshiftのFederated Queryで接続する
お仕事でRedshiftのFederated Queryを試してみたのでそのメモ。
ネットで見つかるやつは大体パブリックなネットワークとか同じVPC内のやつなので、仕事の環境のようにVPCが分かれている環境の場合に繋ぐのに苦労した。
やることはほぼ参考記事と同じだけど、拡張されたVPCのルーティングを有効にするのがポイント
- Secrets ManagerにAuroraの接続情報を保存
- Secrets Managerを利用できるIAMロールを作成
- Redshiftクラスターの作成
"クラスターのアクセス許可 (オプション)"で上記で作成したIAMロールを追加
"ネットワークとセキュリティ"の"拡張されたVPCのルーティング"を有効にする(重要) - External SCHEMAの作成
CREATE EXTERNAL SCHEMA IF NOT EXISTS apg FROM POSTGRES DATABASE '接続するデータベース名' URI 'Auroraのエンドポイント' PORT 5432 IAM_ROLE '2.のIAMロールのARN' SECRET_ARN '1.のSecrets ManagerのARN';
※ 拡張されたVPCのルーティングを有効にするとRedshiftのコンソールのクエリエディターが利用できなくなるので、別途EC2など立ててpsqlコマンでredshiftに接続します
これでFederated Queryのセットアップが完了したので、RedshiftからSQLでAuroraにアクセスできるようになりました。
(参考)
PostgreSQL への横串検索を使用した開始方法 - Amazon Redshift
[新機能] Amazon Redshift Federated QueryがGAになったので試してみました | DevelopersIO
遭遇したエラー
timeout expired
これは色々な原因が考えられるので特定が難しいです...
今回の場合は、拡張されたVPCのルーティングを有効にするにしないとSQLを実行してもこのエラーになりました。
同じ手順で拡張されたVPCのルーティングを有効にするにしている場合は、ネットワーク設定の不備が有力なのでセキュリティグループの設定などをしっかりと見直しましょう。
ERROR: ----------------------------------------------- error: timeout expired code: 25000 context: query: 0 location: pgclient.cpp:473 process: padbmaster [pid=13916] -----------------------------------------------
ちゃんとDB名指定しているのにdoes not existになる
これも少しハマったのですが、DB名にMyAppDevみたいな大文字小文字が混ざったDB名にしていると何故か全て小文字の"myappdev"でアクセスしようとするのでmy_app_devみたいなDB名にしましょう。
何か回避する方法がありそうですがまだ分かっていません...
(追記)
サポートで教えてもらったのですがSET downcase_delimited_identifier TO OFF;
すると大文字小文字混じりのDB名でもいけるようになりました!
ERROR: ----------------------------------------------- error: FATAL: database "myappdev" does not exist code: 25000 context: query: 0 location: pgclient.cpp:473 process: padbmaster [pid=14497] -----------------------------------------------