ローカルから Heroku Postgres に接続する際は SSL 通信にする

拙作の Neo's Hatebu は Node.js 製。Heroku 上にデプロイしており、pg パッケージと sequelize を使って Heroku Postgres と接続している。

このアプリをローカルで開発する際、ローカルサーバから Heroku Postgres の DB に接続したかったのだが、エラーが出たので対処法を調べた。

エラーの内容は次のような感じ。

error: no pg_hba.conf entry for host "00.000.000.00", user "username", database "databasename", SSL off

no pg_hba.conf というのがよく分からないが、なんとなく最後の SSL off が気になって調べたらビンゴ。

sequelize を使う前に、pg パッケージを読み込んで SSL を有効にすると良い。

// ↓ 以下を追加する
require('pg').defaults.ssl = true;

const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');

また、Postgres との接続文字列の最後に sslmode=require を付与するというのも、公式にガイドがあった。コレだけでは解決しなかったのだが、一応。

// 実際は Postgres への接続文字列は環境変数で注入すると思うが、以下のような感じで `sslmode=require` を追加してやる
const sequelize = new Sequelize('postgres://【Host】:5432?sslmode=require');

一番重要なのは pg で SSL を true にしてやることでした。