AWS Türkçe Blog

Amazon CloudFront ile Web Sitenizin Kullanılabilirliğini İyileştirin

Orijinal makale: Link (Yutaka Oka, Specialist Solutions Architect)

Bu blog gönderisinde, Amazon CloudFront‘un beklenmedik arızalardan kaçınmanıza ve web sitesi kullanılabilirliğini iyileştirmenize yardımcı olan özellikleri hakkında bilgi edineceksiniz. AWS ile uç ağ oluşturma hakkında daha fazla bilgi edinmek için burayı tıklayın.

CloudFront’u web sitenizle kullanırken, doğal avantajlardan biri içeriği önbelleğe alma yeteneğidir. Bu, kaynak sunucudaki (CloudFront’un içeriği aldığı web sunucusu) yükü azaltmaya yardımcı olur ve içerik dağıtım performansını iyileştirir. Ayrıca, hizmeti kullanmanın en önemli avantajlarından biri olan web sitenizin kullanılabilirliğini de artırır. Web sitenizin kullanılabilirliğini iyileştirmek için, web sitesini barındıran kaynak sunucu AWS Cloud içindeyse Elastic Load Balancing ve Multiple Availability Zones kullanmak gibi birçok farklı yaklaşım olsa da, CloudFront web sitenize daha da yüksek kullanılabilirlik sağlar.

Web sitesi kullanılabilirliği en yaygın olarak bir ağ arızasından veya sunucu kesintilerinden etkilenir, ancak web sitenizin kullanılabilirliğini etkileyebilecek bir dizi faktör vardır. Örneğin, bir web sitesi kesintisi beklenmedik bir donanım arızasından kaynaklanıyor olabilir. Tüm bileşenleri tamamen yedekli yaparak bu tür bir riski azaltabilirken, maliyet aynı zamanda tipik bir şirket içi ortamdaki her ek artıklık noktası için önemli ölçüde artacaktır. Ayrıca, web sunucusunu ve ağı aşırı yükleme riskleri vardır ve bu da trafikte beklenmedik bir artış meydana geldiğinde çalışmayı durdurmalarına neden olur.

Ayrıca, bir web sitesinin kullanılabilirliğini etkileyen harici Dağıtılmış Hizmet Reddi (Distributed Denial of Service – DDoS) saldırıları riski vardır. Çeşitli DDoS saldırı türleri vardır, ancak en yaygın DDoS saldırı vektörü, büyük trafik oluşturan UDP yansıtma saldırısıdır (Gözlemlerimizi burada görebilirsiniz.). Bir saldırgan, hedef web sitesine saldırmak için birden çok kaynak (örneğin, kötü amaçlı yazılım bulaşmış bilgisayarlar, yönlendiriciler veya IoT cihazları gibi dağıtılmış bot grupları) kullanır. Bu botlar, büyük miktarda paket ve hedef web sitesini aşırı yükleme isteği oluşturur. Kötü amaçlı trafik, sunucu / ağ kapasitesini aşırı yükleyerek web sitesinin çalışmamasına neden olabilir.

Kullanılabilirliği ve yanıt hızını artırmak, web sitenizi çalıştırmada kritik bir faktördür. Bir e-ticaret web sitesinin kesinti süresi doğrudan satışları etkilerken, kurumsal veya ürünle ilgili bir web sitesinin aksama süresi kötü bir marka / ürün imajına yol açabilir.

Bu blog gönderisinin geri kalanında, kaynak yük devretme, özel hata sayfaları ve kaynak sunucuyu bir flash kalabalığına ve DDoS saldırılarına karşı nasıl koruyacağınız dahil olmak üzere web sitenizin kullanılabilirliğini iyileştirmek için temel özelliklerden bahsedilecektir.

Bu özelliklerin nasıl uygulanacağı hakkında ek bilgi için lütfen CloudFront Geliştirici Kılavuzu‘na bakınız.

Kaynak Yük Devretme

Amazon CloudFront, kaynak sunucu yük devretmeyi sağlar. Bu özellik, birincil kaynak sunucu kullanılamadığında otomatik olarak önceden yapılandırılmış bir ikincil kaynak sunucuya yönlendirilmeyi sağlar. Bu özelliği kullanarak, birincil kaynak sunucu çökse veya kararsız bir duruma girse bile, CloudFront tutarlı bir kullanıcı deneyimi sağlamak için önceden yapılandırılmış ikincil kaynağa geçer. CloudFront yük devretme, bir kaynak uygulama yanıt kodunu ve zaman aşımlarını tetikleyerek kaynak sunucular arasında geçiş yapmanıza olanak tanır. Sonuç olarak, bir uygulama hatası beklenmedik faktörlerden kaynaklansa bile, uygulamanız kesintiye uğramadan devam edecektir.

Yük devretme özelliğini kullanmak için, bir kaynak grup (origin group) oluşturun ve ikincil kaynağı belirtin, böylece CloudFront, birincil kaynaktan belirli bir HTTP durum kodu içeren bir hata yanıtı aldığında otomatik olarak ona geçsin. Kaynak gruptaki iki kaynak, Amazon S3 bucket’larının herhangi bir kombinasyonu veya özel bir kaynak olabilir. Birincil kaynak belirtilen hata durum kodlarından birini — görüntüleyici isteğinin HTTP yöntemi GET, HEAD veya OPTIONS olduğunda — döndürürse, birincil kaynağa bağlantı başarısız olursa veya bir zaman aşımı yaşarsa CloudFront ikincil kaynağa devreder.

Kaynak yük devretmeyi tetikleyen zaman aşımı ayarları şunları içerir (Haziran 2020 güncellemesi artık uzatılmış zaman aşımı ayarları sağlamaktadır):

  • Origin Connection Attempts: Kaynağa bağlantı girişimlerinin sayısı (1-3 kez aralığında değiştirilebilir)
  • Origin Connection Timeout: Kaynak ile bağlantı kurulurken beklenecek süre (1-10 saniye aralığında değiştirilebilir)
  • Origin Response Timeout: Kaynaktan bir yanıt için beklenecek süre (1-60 saniye aralığında değiştirilebilir — yalnızca özel kaynaklar için geçerlidir)

Canlı akış içeriği gibi bazı kullanım durumları için, CloudFront’un bir video segmenti süresinin yarı ömrü gibi daha az denemeyle ikincil kaynağa daha hızlı devretmesini isteyebilirsiniz. Örneğin, segmentleriniz 4 saniyeyse, zaman aşımını yeniden deneme olmadan 2 saniyeye ayarlayın. İşlenmesi uzun süren bir veritabanını sorgulama gibi diğer kullanım durumları için daha uzun bir zaman aşımı değeri isteyebilirsiniz. Bu değerleri, uygulamanızın veya kaynak sunucunuzun yapısına bağlı olarak ayarlayabilirsiniz.

Amazon Route 53 Durum Denetimleriyle Kaynak Yük Devretme

Kaynağınızdaki bir hata nedeniyle CloudFront’un yeniden denemesini veya zaman aşımını tetiklemeden ikincil özel kaynak sunucusuna ağırlık vererek veya bağlanarak üç veya daha fazla özel kaynak sunucu kullanıyorsanız, CloudFront ile özel kaynak arasında Route 53’ü kullanarak yük devretmenin bir yolu vardır. Route 53 sağlık kontrolleri, kaynak uygulamalarınızın sağlığını ve performansını izler. Durum denetimi, temeldeki kaynağın sağlıksız olduğunu belirlerse, Route 53 trafiği ilişkili kayıttan uzağa yönlendirir. Bu durumda, Route 53, CloudFront kaynak grubu gibi işlev görür ve CloudFront, Route 53’ün durum denetimleri aracılığıyla uygun kökene çözümlediği tek bir kaynak sunucu CNAME ile yapılandırılır. Lütfen tüm özel kaynak sunucuların aynı ana sunucu başlığıyla yanıt verecek şekilde ayarlanması gerektiğini unutmayın.

Özel Hata Sayfalarını Görüntüleme

Amazon CloudFront, kaynak sunucu yanıt veremediğinde alternatif içerik sağlayan “Özel Hata Yanıtı” adlı bir özelliğe sahiptir. Hatalar oluştuğunda, yalnızca varsayılan sunucu veya istemci hata sayfalarından daha “markalı” veya tutarlı bir deneyim yaşamak isteyebilirsiniz. Örneğin, aşağıdaki özelleştirilmiş bir hata mesajıdır:

Yalnızca tek bir özel kaynağınız varsa, ancak kaynak sunucunuz çöktüğünde veya kararsız bir duruma girdiğinde tutarlı bir kullanıcı deneyimi sağlamak istiyorsanız, bu yararlı bir çözüm olabilir.

Bunu, web sitesi tasarımınıza uygun özel hata sayfaları hazırlayarak ve her HTTP hata durum kodu için “Özel Hata Yanıtı” davranışını yapılandırarak yapabilirsiniz. Özel Hata Yanıtı, kaynak sunucu tarafından döndürülen her HTTP hata durum kodu için S3 klasöründe depolanan benzersiz içeriğe sahip özel bir hata sayfası belirlemenize olanak tanır. Örneğin, “404 Bulunamadı” hatası için, belirtilen içeriğin bulunmadığını veya silindiğini belirten bir sayfa döndürebilir ve 5xx hata kodları için sunucunun meşgul veya geçici olarak kullanılamadığını belirten bir sayfa döndürebilir. Alternatif olarak, tüm durum kodları için aynı özel hata sayfasını belirtebilir veya yalnızca bazı durum kodları için özel hata sayfaları belirtebilir, diğerleri için belirtmeyebilirsiniz.

Her bir hata durum kodu için kaynak yük devretme ve özel hata yanıtı arasında seçim yapabilirsiniz. Ayrıca, ne kaynak yük devretme ne de özel hata sayfalarını yapılandırmadıysanız, CloudFront nesneye süresi dolmuş olsa bile uç önbelleğinde olduğu sürece hizmet verir. Minimum TTL hata önbelleğe alma süresi boyunca (varsayılan: 10 saniye), CloudFront nesneyi uç önbelleğinden sunarak izleyici isteklerine yanıt vermeye devam eder. Her bir hata durum kodu için farklı bir hata önbelleğe alma minimum TTL değeri belirtebilirsiniz. Hata durum kodu yanıtları için önbelleğe alma süresini en aza indirmek istiyorsanız, hata önbelleğe alma minimum TTL’si için küçük bir değer ayarlayın. Ancak bu, hata durum kodlarını döndürürken kaynak sunucunuza aktarılan isteklerin sayısını artırır, bu nedenle değeri uygulamanızın veya kaynak sunucunuzun kaynaklarına göre ayarlayın.

Kaynak Sunucuyu Flash Kalabalığına Karşı Koruma

Amazon CloudFront, ani bir kalabalığa karşı koruma sağlamak için bağlantı daraltma işlevine sahiptir (örneğin, aynı içeriği tekrar tekrar isteyen bir web sitesine gelen ziyaretçilerde beklenmedik bir artış). CloudFront, aynı isteklerin büyük bir bölümünü kaynak sunucuya iletmez; yalnızca ilk isteği kaynak sunucuya aktarır ve sonraki istekler için yanıtı kullanır. Bu, yeni bir ürün veya hizmet piyasaya sürüldüğünde bir flash kalabalık oluştuğunda bile kaynak sunucunun aşırı yüklenmesi ve çalışmama riskini azaltır.

Önceki özelliklerle bile, arka uç kaynak uygulamanız sınırlı kaynaklara sahipse, flash kalabalık hizmetinizin kullanılabilirliğini etkileyebilir. Örneğin, bir e-ticaret sitesinde sınırlı süreli bir satış veya tamamlayıcı bir uygulama ile etkileşimli bir TV oyun programı gibi normalden farklı çok sayıda istek alma olasılığı vardır. Bu durumda, Lambda@Edge ile özel bir kaynağa ileten istekleri koordine ederek ve taşan kullanıcıları Amazon S3’te barındırılan bekleme odası sayfasına yönlendirerek arka uç uygulamalarının bozulmasını önleyebilirsiniz. Bu, daha önce açıklanan özel hata sayfasına benzer, ancak aralarındaki fark, S3 klasörüne aktarımı kendiniz kontrol edebilmenizdir. Örneğin, yalnızca premium kullanıcılar (belirli bir çerezi olan kullanıcılar) özel bir kaynağa yönlendirilebilir ve diğer kullanıcılar hangi kaynağın kura ile yönlendirileceğini kontrol edebilir. Lütfen ayrıntılar için bu bloga bakın.

DDoS Saldırılarına Karşı Koruma

Bir DDoS koruma hizmeti olan AWS Shield, Amazon CloudFront’ta varsayılan olarak etkindir ve Ağ / Aktarım (Network / Transport) katmanı DDoS saldırılarına karşı otomatik olarak koruma sağlar. AWS Shield Standard tarafından sağlanan otomatik koruma özelliği, tüm AWS müşterileri tarafından ek ücret olmaksızın kullanılabilir. Müşteriler ayrıca uygulama katmanı DDoS saldırılarına karşı koruma sağlamak için AWS WAF’ı (Web Uygulaması Güvenlik Duvarı) kullanabilir. Protokol perspektifinden bakıldığında, yaygın bir uygulama katmanı DDoS saldırısı olan HTTP GET flood, yasal trafikten ayırt edilemez ve web siteniz büyük miktarda HTTP GET istekleriyle dolup çalışmayı durdurabilir. AWS WAF, oran tabanlı kurallar kullanarak böylesine büyük hacimli HTTP GET saldırılarını azaltabilir. Oran tabanlı bir kural, istekler için bir koşul tanımlamanıza veya web sitenize erişimi sınırlandırmak için bir eşik tanımlamanıza olanak tanır. Herhangi bir beş dakikalık süre içinde aynı IP adresinden gelen istek sayısı, tanımladığınız sınırı aşarsa, kural, IP adresinden gelen istekleri engellemek gibi bir eylemi tetikleyebilir. Orana dayalı kurallar hakkında daha fazla bilgi için, Geliştirici Kılavuzu‘na bakın. Web sunucusu kaynaklarını tüketmek amacıyla uzun süre TCP oturumlarını işgal etmek için kasıtlı olarak yavaşça okuyan ve yazan Yavaş Saldırı (ör. Slowloris) adı verilen uygulama katmanını hedefleyen bir DoS saldırısı türü vardır. CloudFront, bu tür saldırılara karşı koruma sağlamak için bağlantıları otomatik olarak kapatır.

Ayrıca AWS Shield Advanced, DDoS saldırılarının durumunu görselleştirmenize veya yardım için AWS DDoS Yanıt Ekibi (DDoS Response Team — DRT) ile iletişime geçmenize olanak tanır. DDoS saldırılarına karşı en iyi uygulamalar hakkında daha fazla bilgi için bu teknik incelemeye bakın.

Sonuç

Bu blog gönderisinde, web sitenizin kullanılabilirliğini artırmanıza yardımcı olacak Amazon CloudFront özelliklerinden bahsettim. Kaynak sunucunuz AWS ortamında değil şirket içinde barındırılsa bile, site yük devretmeden yararlanmak, DDoS saldırılarına karşı koruma sağlamak ve web sitenizin kullanılabilirliğini artırmak için CloudFront’u kullanmaya devam edebilirsiniz.