- Şu tarihte
Postgres: no pg_hba.conf entry for host
Canımız ciğerimiz PostgreSQL'i AWS RDS (Relational Database Service, AWS'in yönetilen veritabanı hizmeti) üzerinde 14. sürümden 15. sürüme yükseltirken
RDS'in şart koştuğu Parameter Group
'un versiyon uyumlu olması gerekliliği doğmakta. Yani 14. sürümün parametre grubu ile 15. sürüme
geçemiyorsunuz. Bu sebeple öncelikle yeni bir parametre grubu oluşturulmalı, bu parametre grubu RDS kaynağımıza (yani PostgreSQL) tanımlanmalı ve ardından yükseltme işlemi gerçekleştirilmelidir. Bu işlemleri AWS Console üzerinden yapabileceğiniz gibi AWS CDK
(Cloud Development Kit) ile de
yapabilirsiniz. Buradaki tanımlamaları yaptıktan sonra kaynağımıza aşağıdaki tanımlamayı yaparak sürümünü AWS CDK ile yükseltebiliyoruz.
rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_15_4 })
Yalnız AWS CDK sizden parametre grubunun versiyonunu da istediği için onu da yükseltiyorsunuz. AWS CDK deploy esnasında bu parametre grubunu oluşturuyor ve ardından senkronize edip PostgreSQL yükseltmesine başlıyor. Buraya kadar her şey güzel ve tıkır tıkır ilerliyor.
Yükseltme işlemi tamamlandığında (AWS CDK deployu tamamlandığında) uygulamalarınız bağlanırken aşağıdaki gibi bir hata alıyor olabilir:
error: no pg_hba.conf entry for host "xx.xx.xx.xx", user "myUser", database "myDatabase", no encryption
Bu hata bize veritabanına erişebilecek IP/CIDR bloklarının doğru tanımlanmadığına veya bağlantıda bu
erişim için gerekli TLS şartlarının sağlanmadığına işaret etmektedir. Bu noktada uygulamalarınız Postgres'e
bağlanamıyor ve downtime yaşıyor olabilirsiniz. Şayet AWS RDS'te olmasaydık bu konfigürasyon dosyasını
(pg_hba.conf
) editlememiz veya incelememiz gerekecekti fakat biz bunları yönetmesi için AWS RDS'i kullanıyoruz.
Peki bu sorunu AWS RDS üzerinde nasıl çözeceğiz? 14. sürümündeyken gayet düzgün çalışan veritabanımız şimdi bize
neden böyle bir erişim kaynaklı hata fırlatıyor bunu düşünelim. Yukarıda da bahsettiğim gibi RDS'te bir Parameter
Group tanımlaması var, bu tanımlamalar veritabanımızın RDS'in izin verdiği ölçüde konfigürasyonları ile oynayabilmemize
imkan tanımakta. Parameter Group'ta bu aslında pg_hba.conf
'u direkt olarak düzenleyebileceğimiz bir yer değil. Bu noktada
yeni oluşturulan Parameter Group ile RDS'in öntanımlı olarak oluşturduğu Parameter Group'u AWS Console üzerinden karşılaştırma
yaparak farklılıkları anlayabiliriz. RDS arayüzünde Parameter groups
kısmında iki Parameter group seçip Compare
dediğinizde
farkları görebileceksiniz. Fakat burada da farkı göremeyeceksiniz çünkü eğer tanımlamadıysanız bu sorunu yaratan konfigürasyon
buradaki ekranda görünmeyecektir. Bu noktada yardımımıza AWS dokümantasyonu yetişmekte. Buradaki dokümanda:
The default rds.force_ssl parameter is set to 1 (on) for RDS for PostgreSQL version 15. All other RDS for PostgreSQL major version 14 and older have the default value for rds.force_ssl parameter set to 0 (off).
Bize PostgreSQL 15. sürümüyle rds.force_ssl
parametresinin 1 (yani açık) hale getirildiği belirtiliyor. Gerçekten de
Parameter grubunda rds.force_ssl
değerinin 1 olduğunu görüyoruz, bu değer değiştirilebilir ve sorunu çözmek için
bu değeri 0 (yani kapalı) hale getirerek sorunu çözebiliriz.
Dokümandan da anlaşılabileceği gibi sorun 15. sürüme geçerken yaşanıyor yani mevcut PostgreSQL sürümünüzün ne olduğunun bir önemi yok.