問題の概要
ISSUE - 課題
データベース接続時に以下のエラーが発生しました。
PostgresError: no pg_hba.conf entry for host "10.0.x.x",
user "postgres", database "database_name", no encryption
code: '28000'
no encryption
はSSL接続が使用されていないとのこと。
原因
AWS RDSなどのマネージドPostgreSQLサービスは、セキュリティのためSSL接続を要求します。Drizzle ORMのデフォルト設定はSSLを使用しないため、接続が拒否されます。
解決方法
設定ファイルの修正
もしくはjsonも対象
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
schema: './src/db/schema.ts',
out: './drizzle',
dialect: 'postgresql',
dbCredentials: {
host: process.env.DB_HOST!,
port: parseInt(process.env.DB_PORT!),
user: process.env.DB_USER!,
password: process.env.DB_PASSWORD!,
database: process.env.DB_NAME!,
ssl: {
rejectUnauthorized: false // SSL有効化
}
},
});
アプリ側
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
const client = postgres({
host: process.env.DB_HOST!,
port: parseInt(process.env.DB_PORT!),
user: process.env.DB_USER!,
password: process.env.DB_PASSWORD!,
database: process.env.DB_NAME!,
ssl: {
rejectUnauthorized: false // SSL有効化
}
});
export const db = drizzle(client);
接続文字列を使用する場合
const connectionString = `postgresql://${user}:${password}@${host}:${port}/${database}?sslmode=require`;
const client = postgres(connectionString);
export const db = drizzle(client);
動作確認
修正後、以下のコマンドでmigrationが成功することを確認します。
# npmの場合
npm run drizzle-kit migrate
注意事項
rejectUnauthorized: false
は証明書検証を省略- 本番環境では適切な証明書検証の実装を推奨
- 設定ファイルとコードの両方でSSL設定が必要