つよくなるブログ

その場にとどまるためには、全力で走り続けなければならない

Sequelize PostgreSQL での SSL 接続設定(と主要オプションの紹介)

Heroku でホスティングしている PostgreSQL に
Sequelize から接続しようとしたときに SSL 必須のエラーが出てた.

エラーは解決はしたもののドキュメントに詳しい説明がなく
調査したときに関連する Sequelize のコードを読んだでわかったことをまとめた.

まずはエラー対策の結論

環境.dialect.dialectOptions.ssl: true にすると
SSLでの接続が可能になる.

{
    "production": {
        "dialect": "postgres",
        "dialectOptions": {
            "ssl": true
        }
    }
}

dialectOptions とは?

Sequelize のドキュメントには dialectOptions にどのようなパラメータが設定できるか
といった記述はない.

Sequelize は MySQL は mysql2, PostgreSQL は pg といったように
内部的には DB への接続部分に各 Node.js 実装のライブラリを使用している.

dialectOptions についてドキュメントに記述がないのは
dialectOptions は各ライブラリへそのまま設定値を受け渡すのが役割なためである.

主要な dialectOptions の設定項目

とはいえ今回の ssl のように
主要なパラメータのドキュメントはあった方が親切だと感じたので 調査していく過程で見つけたものをまとめておく.

PostgreSQL

application_name

pg_stat_activity で表示されるログに表示される名前を設定する.
これを使うことで DB 側で接続元ごとの状況を確認することが可能になる.

PostgreSQL: Documentation: 9.3: Error Reporting and Logging

ssl

true で DB に SSL 接続を行う.

client_encoding

接続する際の文字エンコーディングを指定する.
auto を指定すると接続元の環境をそのまま利用する.
Unix システムであれば LC_CTYPE の値を利用.

keepAlive

true でkeepAlive を有効にする.

statement_timeout

クエリをタイムアウトさせる時間(ミリ秒)

ドキュメントにミスみつけたので PR 出した

マージされた🎉

github.com

まとめ

  • SSL 必須のエラーを解決した.
  • Sequelize のコードを読んで主要な dialectOptions をまとめた.
  • ↑を追記する PR もまとめて出そう.