はじめに
Botpress
サーバーを立てる際は、デフォルトで内部のsqlite
を使用して様々なデータを管理しています。
しかし、早いうちにPostgreSQL
を使用するよう公式サイトより推奨されています。
耐障害性、安定性、拡張性、安全性が上がるから、とのこと。良いことだらけですね。
本記事では、Azure環境で上記のようなデータベースの移行を行おうとした際に激詰まりした内容を、戒めがてら紹介します。
※Botpressサーバーを立ち上げるまでの流れはこちらで紹介しております。
発生したエラー
今回はAzure Container Registry
に保存したDockerイメージを使用して、Azure App Service
にBotpressサーバーを立てておりました。
ここから、Azure Database for PostgreSQL
を使用し、データベースを外部に移そうと試みました。
移行後の構成図は以下のようになります。
移行する方法は公式サイトに記載しているように、App Service
の「構成 > アプリケーション設定」に以下のパラメータを追加します。
key | value |
---|---|
DATABASE | postgres |
DATABASE_URL | postgres://dbuser:password@your-db-host.com:5432/your-db-name |
※データベース側のファイヤーウォール設定などは割愛します。
これらの設定を行い再起動しましたが、以下のようなエラーが発生しました。
error: no pg_hba.conf entry for host "XX.XXX.XX.XXX", user "postgres", database "botpressdb", no encryption
XX.XXX.XX.XXX
はApp ServiceのIPアドレスです。
no encryption
とあるように、通信を行う際に暗号化が行われておらず、接続できないとのことです。
結論
接続文字列にssl=true
というパラメータを追加します。
key | value |
---|---|
DATABASE | postgres |
DATABASE_URL | postgres://dbuser:password@your-db-host.com:5432/your-db-name?ssl=true |
もう少し詳しく
Azure Database for PostgreSQL
では、デフォルトでクライアント側にSSLを使用した暗号化を使用した通信を強制します。
(公式より。)
こちらのトラブルシューティングでも同じような記載があります。
なので暗号化を行うよう調整すればよいとアタリはつきましたが、具体的な方法が分からず右往左往しておりました、、。
ところで、この「暗号化の強制」は解除することができます。
上記のキャプチャにもある通り、「PostreSQL > サーバーパラメーター > require_secure_transport」をOFFにすることで暗号化を使用しない通信ができます。
こちらをOFFにして接続ができた場合は、接続文字列自体は合っていると判断できるかと思います。
最後に
今回のエラーの解決のためにかなりの時間を費やしてしまいました、、。
だれかの助けになれば幸いです。
ご紹介
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area