AWS Türkçe Blog

Amazon RDS’te Veritabanı Bulut Sunucusu Durdurma ve Başlatma Uygulaması

Orijinal makale: Link (Marc Teichtahl)

Bu gönderi AWS iş ortağı Kloud’dan Matt Merriel’den ve AWS Partner Solutions Architecture Avustralya ve Yeni Zelanda yöneticisi Marc Teichtahl’dan. Kloud, projelerinin test ve geliştirme aşamalarında veritabanlarına 7 gün 24 saat erişim gerektirmeyen müşterilerin maliyetlerini düşürmek için Amazon RDS’teki yeni durdurma ve başlatma özelliklerini kullanır.

Kloud, buluta geçiş yapan şirketlere profesyonel ve yönetilen hizmetler sunar. Amazon Relational Database Service (Amazon RDS), Kloud müşterilerinin yüksek düzeyde ölçeklenebilir, uygun maliyetli, kullanılabilir ve dayanıklı bir şekilde proje konseptinden dağıtıma geçmesini kolaylaştırır.

Bu gönderi, ortamınızda DB bulut sunucusu durdurma ve başlatma özelliğini uygulamanıza yardımcı olmak için güvenlik politikaları, filtreleme ve otomasyon dahil olmak üzere devreye almayla ilgili hususları özetlemektedir.

Veritabanı sunucusunu durdurma ve başlatma—nasıl çalışır

Amazon RDS’de yakın zamanda piyasaya sürülen veritabanı bulut sunucusu durdurma ve başlatma özelliğiyle, artık veritabanı bulut sunucularını bir seferde yedi güne kadar durdurabilir ve başlatabilirsiniz. Bu özellik, veritabanının her zaman çalışması gerekmediğinde Amazon RDS veritabanlarını geliştirme ve test amacıyla kullanmayı daha kolay ve daha uygun maliyetli hale getirir. Bu özellik Amazon EC2 bulut sunucuları için sağlanan özelliğe benzer.

Otomasyon ve yönetim kolaylığı sağlamak için Amazon RDS veritabanlarının durdurma ve başlatma özelliği önceki yedeklemeleri, anlık görüntüleri (snapshots) veya işlem günlüklerini silmez. Veritabanı durdurulduğunda yerinde kalırlar. Ek bir dayanıklılık düzeyi olarak Amazon RDS servisi veritabanı bulut sunucusunu durdururken otomatik olarak yedekler. Bu, yapılandırılmış otomatik yedekleme saklama aralığınızdaki herhangi bir noktaya belirli bir zamanda veritabanı geri yüklemesi yapmanızı sağlar ve veritabanı bulut sunucusu başlatıldıktan sonra ilk yedekleme için gereken süreyi azaltır. Veritabanı sunucusu durdurulurken sizden ücret alınmaz.

Bir sunucunun başlatılması, sunucunun durdurulduğu zaman noktasında bu sunucuyu yapılandırmaya geri yükler. Buna uç nokta yapılandırması, DB parametre grupları, seçenek grubu üyeliği ve güvenlik grupları dahildir.

Durdurulmuş bir veritabanı bulut sunucusuyla ilişkili bir seçenek grubunda değişiklik yapmak mümkündür. Bu değişiklikler hemen uygulanırsa Amazon RDS, değişiklikleri veritabanı bulut sunucusunun bir sonraki başlatılışında uygular. Aksi takdirde Amazon RDS, durdurulan veritabanı sunucusu başlatıldıktan sonraki bakım döneminde değişiklikleri uygular.

Tüm Amazon RDS veritabanlarında sunucular bir seçenek grubuyla ilişkilendirilmişse, hem kalıcı hem de sürekli seçeneklerinin bu seçenek grubundan kaldırılamayacağını anlamak önemlidir. Bu işlevsellik durdurulan örnekler için de geçerlidir. Örneğin, rds_remove_option_from_option_group komutunun çağrılması, durduruluyor (stopping), durduruldu (stopped) veya başlatılıyor (starting) durumundaki bir DB bulut sunucusuyla ilişkili bir seçenek grubundaki kalıcı bir seçenekte başarısız olur.

Durdurulmuş bir veritabanı sunucusuyla ilişkili bir parametre grubunda değişiklik yapmak da mümkündür. Bu değişiklikler hemen uygulanırsa Amazon RDS durdurulan veritabanı sunucusunun bir sonraki başlatılışında değişiklikleri uygular. Aksi takdirde Amazon RDS, durdurulan veritabanı sunucusu başlatıldıktan sonraki bakım döneminde değişiklikleri uygular.

Bir Amazon RDS DB bulut sunucusu bir seferde yedi güne kadar durdurulmuş durumda olabilir ve ardından otomatik olarak başlatılır. Bu, durdurulan sunuculara gerekli bakımın uygulanmasını sağlamak içindir. Bulut sunucusunun yeniden durdurulması gerekiyorsa yaşam döngüsü kancalarını (lifecycle hooks), Amazon CloudWatch‘ı ve AWS Lambda‘yı kullanarak bunu yapabilirsiniz. Tüm Amazon RDS veritabanı bulut sunucusu türleri durdurma ve başlatma özelliğini destekler. Bu özellik şu anda Amazon Aurora için desteklenmemektedir.

Dağıtımla ilgili hususlar

Kloud’un müşterileri için uyguladığı birincil kullanım örnekleri test ve geliştirme ortamlarında maliyet optimizasyonu ve operasyonel verimliliklere odaklanır. Bu nedenle okuma kopyaları kullanan, Multi-AZ dağıtımları aracılığıyla yüksek kullanılabilirlik gerektiren veya SQL Server aynalamaya ihtiyaç duyan konfigürasyonları dağıtmak gerekli değildir.

Bir veritabanı sunucusu durdurulmuş bir durumdayken de, sunucunun anlık görüntüsü alınabilir. Ayrıca bir Amazon EC2 bulut sunucusunu durdurmak gibi, durumdan bağımsız olarak veritabanı bulut sunucusunun depolanması ve yedeklenmesi için yine de ücret alındığını belirtmekte fayda var.

Veritabanı bulut sunucusunun ve onunla ilişkili verilerin tutarlılığını ve dayanıklılığını sağlamak için bir Amazon RDS veritabanı bulut sunucusu durdurulduktan sonra değiştirilemez. Bu değişiklikler durdurulan bir sunucunun bir Multi-AZ dağıtımına geçirilmesini, bir okuma kopyası oluşturmayı veya bir parametre ya da seçenek grubunu silmeyi içerir.

Mevcut bir veritabanının Multi-AZ olması gerekiyorsa, bir okuma-kopyası gerektiriyorsa veya bir parametre ya da seçenek grubunun silinmesini gerektiriyorsa durdurulan veritabanının anlık görüntüsünü geri yükleyerek gerekli yeteneklere sahip ikinci bir veritabanı bulut sunucusu oluşturabilirsiniz.

Güvenlik politikaları

AWS Identity and Access Management (IAM), AWS kaynaklarına erişimin ayrıntılı yönetimini sağlamanın yanı sıra AWS’teki kullanıcıları ve kullanıcı izinlerini yönetmenize yardımcı olan bir web hizmetidir.

Tüm AWS hizmetlerinde olduğu gibi Amazon RDS durdurma ve başlatma özelliğine uygun erişimi zorunlu kılmak için bir politika yapılandırması gerekir. Bunu uygun IAM politikasıyla rds:startDBInstance ve rds:stopDBInstance eylemlerine izin vererek yapabilirsiniz. Aşağıdaki örnek böyle bir politikanın basit bir örneğini göstermektedir:

{
    "STATEMENT": [{
            "EFFECT": "ALLOW",
            "ACTION": [
                "RDS:DESCRIBEDBINSTANCES",
                "RDS:STARTDBINSTANCE",
                "RDS:STOPDBINSTANCE"
            ]
            "RESOURCE": [
                "*"		
Policy

DB sunucusu filtreleme

Birçok AWS müşterisi ortamlarında meydana gelen olayları belirlemek ve bunlara yanıt vermek için etiketleri (tags) ve CloudWatch’ı kullanır. Bu yaklaşım describe-DB-instances komut satırı arabirimi (Command Line Interface – CLI) komutunu kullandığınızda Amazon RDS DB bulut sunucuları için de geçerlidir. Durup başlayabilen olarak etiketlenen sunucuları belirlemek istediğinizde kullanışlıdır. Bir etiket değerine (örneğin, stopstart) göre filtreleyerek bu sunucuları belirleyebilir ve uygun eylemi gerçekleştirebilirsiniz. Alternatif olarak belirli bir sunucuya tahsis edilen tüm etiketleri listelemek için list-tags-for-resource CLI komutunu kullanabilirsiniz. Ancak bu yaklaşım sorgulamadan önce sunucuyu zaten bilmenizi gerektirir.

Tüm AWS CLI tabanlı yaklaşımlarda olduğu gibi THROTTLED hatasını önlemek için yapılan AWS API çağrılarının hızının farkında olmanız önemlidir. Bir THROTTLED olayından sonra bile bir CLI çağrısının yürütülmesini sağlamanın bir yolu, üstel bir geri çekilme yeteneği oluşturmaktır. API yeniden denemeleri aracılığıyla bunun nasıl başarılacağı hakkında bilgi için AWS’de Hata Yeniden Denemeleri ve Üstel Geri Alma‘ya bakınız.

Durdurma ve başlatmanın otomatikleştirilmesi

Amazon EC2 bulut sunucularının (bir CloudWatch olayının hedefi olarak kullanılabilir) başlatılmasını ve kapatılmasını planlamanın aksine, tetikleyici olarak bir zamanlama (cron) olay kaynağı kullanarak AWS Lambda ve API çağrılarıyla Amazon RDS durdurma ve başlatma özelliğini otomatikleştirebilirsiniz. Bu nispeten önemsiz bir görevdir. Gerekli API çağrıları hakkında daha fazla bilgi edinmek için StopDBInstance’a bakınız.

Aşağıda böyle bir Lambda işlevine bir örnek verilmiştir:

exports.handler = (event, context, callback) => {

  if (hasFilterKey(callback)) {
    getDayTime()
  }

  rds.describeDBInstances(params, function (rdserr, rdsdata) {
    if (rdserr)
      callback(rdsdata, null)

    rdsdata.DBInstances.forEach(function (dbInstance) {
      var rdstagParams = {
        ResourceName: dbInstance.DBInstanceArn
      }

      rds.listTagsForResource(rdstagParams, function (tagerr, tagdata) {
        var toStartup = 0
        var toShutdown = 0
        var isInEnvironment = 0

        // an error occurred
        callback({
          error: tagerr,
          stack: tagerr.stack
        }, null)

        var tags = tagdata.TagList || []
        tags.forEach(function (tag) {
          if (tag.Key == 'Environment' && tag.Value == event.FilterValue) {
            isInEnvironment = 1
          }

          if (tag.Key == 'StartUp') {
            var StartupSchedule = tag.Value.split(' ')
            if (StartupSchedule[current_day] == current_hour) {
              toStartup = 1
            }
          }

          if (tag.Key == 'Shutdown') {
            var ShutdownSchedule = tag.Value.split(' ')
            if (ShutdownSchedule[current_day] == current_hour) {
              toShutdown = 1
            }
          }
        })

        if (isInEnvironment) {
          if (toStartup) {
            var startparams = {
              DBInstanceIdentifier: dbInstance.DBInstanceIdentifier /* required */
            }
            rds.startDBInstance(startparams, function (starterr, startdata) {
              if (starterr)
                callback(starterr, null)
              else
                callback(null, startdata)
            })
          }

          if (toShutdown === 1) {
            var shutdownparams = {
              DBInstanceIdentifier: dbInstance.DBInstanceIdentifier
            }
            rds.stopDBInstance(shutdownparams, function (stoperr, stopdata) {
              if (stoperr)
                callback(stoperr, null)
              else
                callback(null, stopdata)
            })
          }
        }
      })
    })
  })
}
C#

Amazon RDS DB bulut sunucularının planlı bir şekilde durdurulmasını veya başlatılmasını otomatikleştirmek için AWS Lambda’yı planlanmış olaylarla birlikte de kullanabilirsiniz. Daha fazla bilgi için AWS Lambda’yı Planlanmış Olaylarla Kullanma‘ya bakınız.

Sonuç

Kloud, Amazon RDS durdurma ve başlatma özelliğini müşterilerinin birkaç ortamında devreye aldı. Kısa bir süre sonra bile bu müşteriler geliştirme/test maliyetlerinde yüzde 50’ye varan azalma görüyorlar. Tüm AWS hizmetlerinde olduğu gibi özellikler ve yetenekler zaman içinde geliştirilecek ve zenginleştirilecek; uygulama süreci daha basit ve daha hızlı hale gelecektir.

Bu gönderide özetlenen güvenlik politikalarını, filtrelemeyi ve otomasyonu uygulayarak test ve geliştirme ortamları için iyileştirilmiş dağıtım hızı, daha düşük maliyetler ve daha iyi operasyonel verimlilikler elde edebilirsiniz. AWS çözüm ortağı Kloud, müşterilerinin daha düşük maliyetle çalıştırabilecekleri eşzamanlı geliştirme ortamlarının sayısını büyük ölçüde artırdığını ve bunun sonucunda daha hızlı ve daha sık dağıtımlar elde ettiğini gördü. Bu da bu müşterilerin pazar taleplerine ve teknoloji değişikliklerine daha hızlı ve güvenle yanıt vermelerini sağladı.