Amazon RDS Üzerinde SQL Server Instance Kurmak

Selamlar, bu yazımda RDS üzerinde SQL Server instance açarken karşımıza çıkan tercihleri toparlamaya çalıştım. .NET tarafında bir uygulama AWS'ye taşınıyorsa ya da SSRS, SSIS gibi SQL Server'a özgü işler işin içindeyse yol genelde RDS'e çıkıyor. Lisans, yama, backup gibi sıkıcı tarafı AWS halletsin diye bu yola giriyoruz zaten. Lafı uzatmadan başlayalım.

Edition seçimi: hangisi yeter?

RDS tarafında dört edition var ve aralarındaki fiyat farkı ciddi. Şahsi kanaatim, çoğu ekibin gerçekten ihtiyacı olan şey Standard. Ama önce dördünü kısa kısa konuşalım:

  • Express: Ücretsiz, ama veritabanı başına 10 GB sınırı var. Test ortamı veya küçük iç araçlar için biçilmiş kaftan.
  • Web: Yalnızca public web iş yükleri için lisanslanıyor. Standard'a kıyasla yaklaşık yarı fiyat. SaaS arka uçlarınız için mantıklı olabilir, ama lisans şartlarını mutlaka okuyun.
  • Standard: OLTP iş yüklerinin büyük kısmı için fazlasıyla yeterli. Production'da varsayılan tercihim genelde bu.
  • Enterprise: Always On availability groups, gelişmiş güvenlik, TDE gibi şeyler isterseniz buraya geçiyorsunuz. Standard'ın 4-5 katı pahalı, o yüzden bu özelliklere gerçekten dokunacaksanız anlamlı.

Ben bir keresinde küçük bir iç panelde Enterprise açıldığını gördüm, sırf 'her ihtimale karşı' diye. Aylık fatura geldiğinde de tabii ki gözler büyüdü. Size tavsiyem, gerçekten dokunmayacağınız özellik için para vermeyin.

License Included mi, BYOL mi?

İki seçenek var: License Included (LI) ve Bring Your Own License (BYOL). LI'da AWS lisansı saatlik instance ücretine katıyor, hayatınız basit. BYOL ise mevcut SQL Server lisanslarınızı taşımanız demek; ama bu Software Assurance ve Microsoft tarafında license mobility süreçlerini gerektiriyor.

Bana sorarsanız, elinizde atıl duran Enterprise + SA lisansı yoksa LI seçin, baş ağrıtmayın. BYOL kâğıt üzerinde ucuz görünür, gerçek hayatta süreç maliyetiyle birlikte çoğu zaman LI'yi geçemiyor.

Instance açarken pratik tarafı

CLI üzerinden Standard edition için tipik bir komut şöyle:

aws rds create-db-instance \
  --db-instance-identifier my-app-sqlserver \
  --db-instance-class db.r6i.large \
  --engine sqlserver-se \
  --license-model license-included \
  --master-username admin \
  --master-user-password 'GucluParola123!' \
  --allocated-storage 200 \
  --storage-type gp3 \
  --multi-az \
  --backup-retention-period 7 \
  --storage-encrypted \
  --kms-key-id alias/rds-sqlserver \
  --deletion-protection

Birkaç noktayı vurgulayayım. Engine adı edition'a göre değişiyor; sqlserver-ex Express, sqlserver-web Web, sqlserver-se Standard, sqlserver-ee Enterprise. Master username olarak sa kullanamıyorsunuz, RDS izin vermiyor; admin ya da kendi belirleyeceğiniz başka bir isim olur. Bir de SQL Server, RDS'de data ve log dosyaları için tek EBS volume kullanıyor; on-prem'de yaptığımız gibi ayıramıyoruz, dolayısıyla IOPS seçimine biraz daha dikkat edin.

Parameter group, Multi-AZ ve backup

Default parameter group'la yola çıkmayın. Yeni bir parameter group açıp en azından max degree of parallelism (MAXDOP) ayarını uygulamanıza göre ayarlayın; iyi bir başlangıç değeri vCPU sayısının yarısı, üst sınır 8 olacak şekilde. cost threshold for parallelism da default 5 gelir, üretim için bunu 50 civarına çekmek genelde mantıklı.

Multi-AZ tarafında Standard'da Database Mirroring, Enterprise'da Always On çalışıyor. Failover saniyeler mertebesinde değil, dakika seviyesinde olabiliyor; canlıda bunu unutup SLA yazıp altına imza atmayın. Backup tarafında 7 günlük retention çoğu durumda yeterli, ama compliance gereksinimleriniz varsa 35 güne kadar çıkabilirsiniz.

KMS encryption'ı (--storage-encrypted ve --kms-key-id) instance oluştururken açın. Sonradan açmak isterseniz snapshot alıp encrypted olarak restore etmeniz gerekiyor, yani downtime ile gelen bir göç. Baştan halletmek hem ucuz hem ağrısız.

Sık karşılaşılan tuzaklar

  • Edition'ı sonradan değiştirememek: Express'ten Standard'a geçiş için snapshot + restore yolu var, ama bu downtime demek. Edition seçimini başta doğru yapın.
  • sa kullanıcısını master sanmak: RDS'de master kullanıcı sa olamaz, ama bu kullanıcının izinleri de tam sa değildir; bazı sistem prosedürlerine erişemezsiniz. Migration sırasında bu sürpriz olabiliyor.
  • Encryption'ı sonraya bırakmak: Yukarıda dedim ama tekrar edeyim, çünkü en sık tökezlenen yer burası. Baştan açın.
  • Default parameter group ile production'a çıkmak: MAXDOP ve cost threshold ayarsız bırakılınca sorgular planner'da garip yerlere savruluyor. Custom parameter group şart.
  • Backup window'u trafik saatine denk getirmek: Snapshot alımı I/O'yu etkiliyor; preferred-backup-window'u sakin saatlere alın.

Kapanış

Bu yazıda RDS üzerinde SQL Server instance açarken edition, lisans, parametre grubu, Multi-AZ ve encryption tarafında dikkat edilecek noktalara baktık. Bence en kritik karar edition seçimi; geri kalan her şey sonradan ince ayar ile düzelir, ama edition'ı yanlış seçtiyseniz ya pahalıya bekleyeceksiniz ya da downtime ile geri döneceksiniz. Umarım faydalı olur, bir sonraki yazıda görüşmek üzere.