Bulutta uygulamaları dağıtma
Bir bulut uygulaması tasarlanıp geliştirildikten sonra, istemcilere yayınlanmak üzere dağıtım aşamasına taşınabilir. Dağıtım çok aşamalı bir işlem olabilir ve her bir aşama da uygulama hedeflerinin yerine getirilmesini sağlamak için bir dizi denetimden oluşur.
Bir bulut uygulamasını üretime dağıtmadan önce, uygulamanızı temel ve önerilen en iyi deneyimler listesine karşı değerlendirmenize yardımcı olacak bir denetim listenizin olması yararlı olacaktır. AWS ve Azure’daki dağıtım denetim listeleri örnek olarak verilebilir. Çoğu bulut sağlayıcısı, Azure’daki bu belge gibi, dağıtıma yardımcı olacak kapsamlı bir araç ve hizmet listesi sağlar.
Dağıtım işlemi
Bulut uygulamasının dağıtımı, geliştirmenin sona ermesiyle başlayıp uygulamanın üretim kaynaklarında yayınlanmasına kadar devam eden, yinelemeli bir işlemdir:
Şekil 1: Kod dağıtım işlemi
Bulut geliştiricileri genellikle uygulamalarının çeşitli aşamalara dağıtımının ardışık düzenini oluşturmak için uygulamalarının eşzamanlı olarak çalışan birden çok sürümünü korur:
- Test Etme
- Hazırlama
- Üretim
İdeal olarak, üç aşamanın her biri aynı kaynaklara ve yapılandırmaya sahip olmalıdır; böylece geliştiricilerin uygulamayı test edip dağıtması ve ortam ve yapılandırmadaki bir değişiklikten kaynaklanan tutarsızlıklar oluşması ihtimalinin en aza indirilmesi sağlanır.
Uygulama değişikliklerinin ardışık düzenini oluşturma
Tipik bir çevik uygulama geliştirme senaryosunda (önceki şekilde gösterildiği gibi) uygulamalar, bir tür sorun izleme mekanizmasını kullanarak sorunlar ve hatalar üzerinde çalışan bir dizi mühendis ve geliştirici tarafından korunur. Koddaki değişiklikler, kod yayını için ayrı dalların korunduğu bir kod deposu sistemi (örneğin, svn, mercurial veya git) aracılığıyla korunur. Kod değişiklikleri, incelemeleri ve onaylarından geçtikten sonra kodun test etme, hazırlama ve üretim aşamalarına ardışık düzeni oluşturulabilir. Bu birkaç şekilde yapılabilir:
Özel betikler: Geliştiriciler özel betikleri kullanarak kodun en son sürümünü çekebilir ve uygulamayı oluşturup üretim durumuna getirmek için belirli komutları çalıştırabilir.
Önceden pişirilmiş sanal makine görüntüleri: Geliştiriciler ayrıca uygulamalarını dağıtmak için gerekli tüm ortam ve yazılımlarla bir sanal makine sağlayabilir ve yapılandırabilir. Yapılandırıldıktan sonra sanal makinenin anlık görüntüsü oluşturulup bir sanal makine görüntüsüne dışarı aktarılabilir. Bu görüntü, otomatik olarak dağıtılmak ve bir üretim dağıtımı için yapılandırılmak üzere çeşitli bulut düzenleme sistemlerine sağlanabilir.
Sürekli tümleştirme sistemleri: Dağıtımda yer alan çeşitli görevleri basitleştirmek için sürekli tümleştirme (CI) araçları, üretim altyapısını oluşturan çeşitli makinelerde tamamlanması gereken görevleri (örneğin, bir depodan en son sürümü alma, uygulama ikilileri oluşturma ve test çalışmalarını çalıştırma) otomatikleştirmek için kullanılabilir. Popüler CI araçlarına örnek olarak Jenkins, Bamboo ve Travis verilebilir. Azure Pipelines, Azure dağıtımlarıyla çalışmak için tasarlanmış, Azure’a özgü bir CI aracıdır.
Kapalı kalma süresini yönetme
Uygulamada yapılan bazı değişiklikler, uygulamanın arka ucunda bir değişikliğe yer vermek için uygulama hizmetlerinin kısmi veya tam sonlandırılmasını gerektirebilir. Geliştiricilerin genellikle uygulama müşterilerinin karşılaşacağı kesintileri en aza indirmek için günün belirli bir saatini zamanlaması gerekir. Sürekli tümleştirme için tasarlanan uygulamalar, uygulamanın istemcileri üzerinde hiç kesinti olmadan veya çok az bir kesinti olacak şekilde üretim sistemlerinde bu değişiklikleri canlı olarak gerçekleştirebilir.
Yedeklilik ve hataya dayanıklılık
Uygulama dağıtımındaki en iyi deneyimlerde genellikle bulut altyapısının kısa ömürlü olduğu ve her an kullanılamaz olabileceği veya değişebileceği varsayılır. Örneğin, bir IaaS hizmetinde dağıtılan sanal makineler, SLA türüne bağlı olarak bulut sağlayıcısının takdiriyle sonlandırılmak üzere zamanlanabilir.
Uygulamalar; veritabanları ve depolama uç noktaları gibi çeşitli bileşenler için statik uç noktalar olduğunu varsaymaktan veya sabit kodlamadan kaçınmalıdır. İyi tasarlanmış uygulamalar genellikle ideal olarak kaynakları sorgulayıp keşfetmek ve bunlara dinamik şekilde bağlanmak için hizmet API’lerini kullanmalıdır.
Birdenbire kritik kaynak veya bağlantı hataları oluşabilir. Kritik uygulamalar, bu tür hata olasılıkları dikkate alınarak ve yük devretme yedekliliği için tasarlanmalıdır.
Çoğu bulut sağlayıcısı, veri merkezlerini bölgeler ve alanlar halinde tasarlar. Bölge, bir veri merkezinin tamamını barındıran belirli bir coğrafi sahayı ifade ederken, alanlar ise, bir veri merkezinde hataya dayanıklılık için yalıtılmış olan tek tek bölümlerdir. Örneğin, bir veri merkezinin içinde iki veya daha fazla alanın ayrı güç, soğutma ve bağlantı altyapısı olabilir, böylece bir alandaki hata, başka bir alandaki altyapıyı etkilemez. Bölge ve alan bilgileri genellikle bu yalıtım özelliğini kullanabilen uygulamalar tasarlayıp geliştirmek için bulut hizmeti sağlayıcıları tarafından istemci ve geliştiricilerin kullanımına sunulur.
Böylece geliştiriciler, uygulamalarının kullanılabilirliğini artırmak ve bir alan veya bölgede oluşabilecek hataları tolere etmek için birden çok bölge ya da alandaki kaynakları kullanacak şekilde uygulamalarını yapılandırabilir. Bölgeler ve alanlar arasında trafiği yönlendirebilen ve dengeleyebilen sistemler yapılandırmaları gerekir. DNS sunucuları, isteğin kaynaklandığı yere bağlı olarak, her bir alandaki belirli IP adreslerine yönelik etki alanı arama isteklerini yanıtlayacak şekilde de yapılandırılabilir. Bu, istemcilerin coğrafi yakınlığına göre bir yük dengeleme yöntemi sağlar.
Üretimde güvenlik ve sağlamlaştırma
İnternet uygulamalarının genel bir bulutta çalıştırılması dikkatlice yapılmalıdır. Bulut IP aralıkları, yüksek değerli hedefleriyle bilinen konumlar olduğundan, uç noktaların ve arabirimlerin güvenliğinin sağlanması ve sağlamlaştırılması söz konusu olduğunda bulutta dağıtılan tüm uygulamaların en iyi deneyimleri izlemesinin sağlanması önemlidir. İzlenmesi gereken bazı temel ilkeler şunlardır:
- Tüm yazılımlar, üretim moduna geçirilmelidir. Çoğu yazılım, yerel test için “hata ayıklama modunu” ve gerçek dağıtımlar için de “üretim modunu” destekler. Hata ayıklama modu uygulamaları genellikle kötü amaçlı girişler gönderen saldırganlara büyük miktarda bilgi sızdırır ve böylece bilgisayar korsanları için kolay bir keşif kaynağı sağlar. Django ve Rails gibi bir web çerçevesi mi yoksa Oracle gibi bir veritabanı mı kullandığınıza bakılmaksızın, üretim uygulamalarını dağıtmak için ilgili yönergelerin izlenmesi önemlidir.
- Genel olmayan hizmetlere erişim, yönetici erişimi için belirli iç IP adresleriyle kısıtlı olmalıdır. Yöneticilerin dahili bir başlatma çubuğunu ziyaret etmeden doğrudan İnternetten kritik bir kaynakta oturum açamadığından emin olun. Özellikle de SSH ve diğer uzaktan bağlantı araçları üzerinden, minimum gerekli erişim kümesine izin vermek için IP adresi ve bağlantı noktasına dayalı kurallarla güvenlik duvarlarını yapılandırın.
- En düşük ayrıcalık ilkesini izleyin. Tüm hizmetleri, gerekli rolü gerçekleştirebilecek en az ayrıcalıklı kullanıcı olarak çalıştırın. Kök kimlik bilgilerinin kullanımını, sistemde hata ayıklaması yapması veya bazı kritik sorunları yapılandırması gereken sistem yöneticileri tarafından gerçekleştirilecek belirli el ile oturum açma işlemleriyle kısıtlayın. Veritabanlarına ve yönetim panellerine erişim için de aynı durum geçerlidir. Genellikle uzun ve rastgele bir genel-özel anahtar çifti kullanılarak erişimler korunmalı ve bu anahtar çifti de kısıtlı ve şifrelenmiş bir konumda güvenli şekilde depolanmalıdır. Tüm parolalar, katı zorluk gereksinimlerine sahip olmalıdır.
- Yetkisiz giriş algılama ve önleme sistemleri (IDS/IPS), güvenlik bilgileri ve olay yönetimi (SIEM), uygulama katmanı güvenlik duvarları ve kötü amaçlı yazılımdan koruma sistemleri için iyi bilinen savunma tekniklerini ve araçları kullanın.
- Kullandığınız sistemlerin satıcısı tarafından sunulan yama yayınlarıyla çakışan bir yamalama zamanlaması ayarlayın. Genellikle Microsoft gibi satıcıların, yamalar için sabit bir yayın döngüsü vardır.