RedashのデータソースへMySQL(Amazon RDS)追加時にハマったことについて書いてみた

RedashにてAthenaのデータとAmazon RDSのデータを突き合わせて集計しようと思い、データソースにRDSを追加してみました。接続テストは時間掛かりつつ通ったと安心したのがハマりの始まりでした。
2021.06.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

RedashでAmazon AthenaのデータとMySQL(Amazon RDS) - 以下 RDS - のデータを結びつけて集計を掛けるため、既に設定済みのAthenaに加えてRDSの設定を行いました。接続テストは成功とでたものの、問題はクエリ実行時に毎回タイムアウトになってしまうこと。

結果としては接続テスト未完でしたが、正常に完了していたと誤認に至った点を交えて備忘録としてまとめました。

RedashによるRDSの接続テスト仕様

データソース指定において、RDSはカッコ付きで専用に分かれています。ですが、基本動作はあくまで汎用です。接続テストも正常にレスポンスが帰ってきていれば、実際には疎通していなくても完了とみなされます。

以下、実際の判定処理。

  testConnection = callback => {
    const { dataSource } = this.state;
    DataSource.test({ id: dataSource.id })
      .then(httpResponse => {
        if (httpResponse.ok) {
          notification.success("Success");
        } else {
          notification.error("Connection Test Failed:", httpResponse.message, { duration: 10 });
        }
        callback();
      })
      .catch(() =>; {
        notification.error(
          "Connection Test Failed:",
          "Unknown error occurred while performing connection test. Please try again later.",
          { duration: 10 }
        );
        callback();
      });
  };

実際に疎通しているかどうかはクエリを書くときにテーブル一覧が読み込まれるかどうかをもって見た方が無難です。

回線の都合でタイムアウトが度々発生する場合

今回は念の為指定したものの無関係でしたが、タイムアウトで上手くいかないのだと予想した場合には環境変数にて猶予を伸ばしましょう。接続テストでは60秒固定の猶予がありますが、クエリ実行時はそうでもありません。なお、重いクエリを中断させる場合にも用いれるので、状況次第です。

REDASH_ADHOC_QUERY_TIME_LIMIT=60

あとがき

今回の原因は異なるVPC間の接続にてピアリング設定が完了していないことでした。接続テストはそのエラーが返ってきたことをもって疎通完了としていましたが、実際には疎通が出来ておらず、結果クエリ実行時にテーブル一覧を取得しようとしてタイムアウトが発生していました。

接続テストは完了していなくても設定自体の保存は可能なため、接続テストのみで安心せずに実際にクエリが問題なく実行できるかどうかで判断しましょう。