Cloudfront İle Dünya Turu

careerpath-tnail

Uzakları yakın etmeyi kendine görev bilmiş ve bizleri sunucular aracılığıyla dünyaya yolculuk yapmaya davet eden Cloudfront servisiyle karşınızdayız.

Bilindiği üzere AWS Infrastructure regionlardan, regionlar availability zone(AZ)’lerden, AZ’ler de data centerlardan oluşuyor. (Tam örtüşen bir örnek olmasa da data center’ları bina, AZ’leri il, regionları ülke gibi düşünebiliriz.)

AWS bu uzak mesafeler arası iletişimi hızlı sağlamak için ülkeler hatta okyanuslar arası fiber kablolar çekmiş ve gereken tüm fiziksel altyapıyı bizim için oluşturmuş. Bu durumda bahsettiğimiz hız milisaniye bazında, ama gelişen teknolojilerle bu hızı daha da arttırmak mümkün. İşte AWS Cloudfront servisi temelde daha hızlı bir içerik dağıtımı yapma ihtiyacımızı gidermek için kullanılan bir servis olarak karşımıza çıkıyor. Hatta Cloudfront servisini CDN(Content delivery network) olarak da sıkça görüyoruz.

Bir kullanıcı olarak bir domain name yazarak yolculuğun ilk adımını atıyorum. Örneğin www.aws.com adresini yazdığımı düşünelim. İlk olarak resolver’a gidiyor. Resolver root domain’e gönderiyor. Root sırayla com, aws ve www domain kayıtlarına bakıp DNS server’lardan bir IP adresi döndürüyor ve ilgili site karşıma geliyor. Bu şekilde sürekli bir veri çekme işlemi var. Bu işlemlerin daha hızlı sonuç vermesi için daha önceki bir hesaplamanın sonucu veya başka bir yerde depolanan verilerin bir kopyası maksimum 24 saat önbellekte tutulabiliyor. Bir sonraki istekte uzun uzun hiyerarşiyi takip etmek yerine geçici de olsa kısa yoldan cache deposundaki sonuç dönüyor. 

Bu cacheleme mantığını kullanarak tüm dünyaya içerik dağıtan Aws Cloudfront servisini ele alalım.

Ben bir kullanıcı olarak bulunduğum konumdan dünyanın herhangi bir yerindeki sunucudan veri almak istiyorum diyelim. Amazon CloudFront, son kullanıcılara daha düşük gecikme süresiyle içerik teslim etmek için 48 ülkedeki 90'dan fazla şehirde, 450'den fazla Varlık Noktasından ve 13 tane edge location’dan oluşan küresel bir ağ kullanır. Saniyeler içinde sizi dünya turuna çıkaran bir servis olduğunu söyleyebiliriz.

 (Detaylı bilgi için,

https://aws.amazon.com/cloudfront/features/?nc=sn&loc=2&whats-new-cloudfront.sort-by=item.additionalFields.postDateTime&whats-new-cloudfront.sort-order=desc

)

Kullanıcıdan gelen istek otomatik olarak en yakın Edge locationa gönderiliyor. Veri hangi lokasyondan alınacaksa buradan belirli bir süre içinde bir kereye mahsus getiriliyor ve geçici olarak  edge locationda depolanıyor. Sonraki isteklerde kendinde olan veriyi döndürmesi çok daha hızlı olmuş oluyor.  Kullanıcı herhangi bir lokasyondaki veriyi alacağı zaman, araya kurulan edge locationlar sayesinde cacheleme yapıp daha yakındaki bir veri merkezi gibi çalışarak gecikme süresini azaltmış oluyor. Ayrıca web sunucusundaki yük de azalmış oluyor.

AWS, Edge Location mantığını bir kademe daha geliştirip Regional Edge Cache denilen içeriği kullanıcı için  daha yakına getiren ekstra bir yapı daha oluşturmuş. Bunları da daha geniş alanlarda ihtiyaç duyulan origin web server ile edge location arasında, edge locationlar için yükü azaltan  yapılar olarak düşünebiliriz. Regional Edge Cache, edge location’a göre daha büyük önbellek genişliğine sahiptir, bu nedenle verileriniz bu konumlarda önbellekte daha uzun süre kalır.

 

Ayrıca gecikmeyi azaltarak kullanıcılara daha yakın kod çalıştırmanıza olanak tanıyan Lambda@Edge özelliği ile web uygulamalarınızı küresel olarak dağıtarak ve performanslarını iyileştirerek zenginleştirebilirsiniz. Lambda@Edge, kodunuzu Amazon CloudFront tarafından oluşturulan olaylara yanıt olarak çalıştırır. (Distribution oluştururken function associations bölümünde Lambda@edge seçerek kodunuz ile Cloudfront arasındaki ilişkiyi kurabilirsiniz.) 

Cloudfront Bileşenleri

Origins olarak bahsettiğimiz bileşen Cloudfront tarafından dağıtılacak olan dosyaların kaynağıdır. Bunlar S3 bucket, EC2 instance, Elastic Load Balancer, Route53 ya da AWS dışında bir kaynak olabilir.

Kaynak dosyaların dağıtımını bir Cloudfront distribution oluşturarak yapabiliriz. (AWS Management Console üzerinde Cloudfront servisini seçtikten sonra Create Distribution diyerek bu adımı yapabilirsiniz.) Distribution oluştururken üç ana başlıkta konfigürasyonlar yapmamız gerekiyor. Origins, Cache Behavior ve Settings.

Origins kısmında kaynak olarak kullanacağımız domaini belirtiyoruz. Kaynağımız bir S3 bucket ise ve güvenlik için S3 kaynağına erişim kısıtlaması yapmak istiyorsak Cloudfront Origin Access Identity (OAI) kullanabiliriz. Böylece kullanıcılar S3 URL'sini kullanarak doğrudan ana içeriğe erişemezler. Cloudfront aracılığıyla bağlanmış olurlar.

Cache Behavior kısmında ise bizim gelecek olan requestlerimizin hangi protokolden geleceğini ve metodlarını belirliyoruz. Gerekirse Signed URL veya Signed Cookie seçenekleri de göz önüne alınarak hangi bölgeden ya da nereden request gelebileceği ile ilgili sınırlamalar yapılabiliyor.

Settings kısmında düşünülmesi gereken başlıca konu Edge Location'larda cachelenerek tutulan verinin güvenliğini sağlamak olmalıdır. Uygulama verilerini korumak adına ekstra bir güvenlik katmanı olarak security servislerinden AWS WAF ile entegrasyon sağlanabilir. AWS WAF, CloudFront'a iletilen HTTP ve HTTPS isteklerini izlemenizi ve içeriğinize erişimi kontrol etmenizi sağlayan bir web uygulaması güvenlik duvarıdır. Web ACL ile oluşturulan kurallara bağlı olarak bu kontroller yapılır.  Cloudfront Distribution ile ilişkilendirilme bu kısımdaki konfigürasyonla olur.

Burada yaptğımız bir diğer önemli ayar da domain name ve güvenli bağlantı yapabilmesi için alınmış  SSL/TLS sertifikalarının seçimi. Tüm bu ve buna benzer konfigürasyonlar tamamlanıp distribution deploy edildiğinde bize Cloudfront tarafından sağlanan domain name ile kaynaklara erişim sağlanmış olur. CloudFront genellikle a232323.cloudfront.net gibi bir domain name oluşturur. Bu domain name’i Route53 servisinde alias kaydı oluşturarak da kullanabiliriz.

Burada dikkat edilmesi gereken bir nokta da edge locationda cachelenen veriler anlık değişimlere ayak uyduramayabilir. Normal şartlarda dosyaları CloudFront önbelleğinde tutmak için belirlenen minimum süreye (max. 24 saat) bağlı olarak kontroller yapılır ve son güncel veriler sunulur. Eğer cachelenen veri iki kontrol zamanı arasında değiştirilirse ya da güncellenirse, sisteme henüz yansımadığı için cache’deki eski veriyi getirmiş olur. Kontrol süresinden önce  ‘invalidation’ bölümünde gerekli dosya yolu tanımlamaları yaparak ya da wildcard kullanarak bekleme yapmadan değişiklikleri sisteme yansıtabilir ve güncel veriye erişimi sağlayabiliriz.

Cloudfront servisi bize coğrafi konuma göre bir kısıtlama yapmayı mümkün kılar. Belirli ülkelere kaynakların erişimi sağlanabilir ya da belirli ülkeler engellenebilir. (Geographic Restriction)

Pricing

Sitenizin kullanım yoğunluğunu göz önüne alarak Cloudfront servisini kullanmayı düşünebilirsiniz. CloudFront, edge location’lardan veri aktarımlarının yanı sıra HTTP veya HTTPS istekleri için ücretlendirme yapar. Fiyatlandırma; kullanım türüne, coğrafi bölgeye ve seçilen özelliklere göre değişiklik gösterir. Free Tier kapsamında 12 aylık süreçte belirli bir request sayısına kadar ücret yansıtılmaz.

Ayrıca AWS region’ları ve CloudFront arasındaki veri aktarımı, Regional Edge cache hizmeti, Tanımlanan AWS ACM SSL/TLS sertifikaları ve paylaşılan CloudFront sertifikaları için de bir ücret ödemezsiniz.

Detaylı fiyatlandırma bilgisi için;

https://aws.amazon.com/cloudfront/pricing/

 

Özetle CloudFront, verilerin mümkün olan en yüksek performansla küresel olarak dağıtılmasını sağlar. İçeriğimize kimlerin erişebileceğini düzenlemek için CloudFront'un özelliklerini kullanarak içeriğimizi koruyabiliriz. CloudFront, piyasadaki en kolay ve yüksek oranda erişilebilir içerik dağıtım ağlarından biridir. Statik, dinamik nesneler ve video içerikler için oldukça kullanışlıdır.

Refia Kayaalp

 

 

AWS eğitimleri, bulut bilişim konusundaki bilgi ve becerilerinizi geliştirmeniz için ideal bir fırsattır. Deneyimli eğitmenlerimiz tarafından verilen eğitim programlarına katılmak isterseniz, bize ulaşabilirsiniz.

Yazının tüm hakları Yönetim.Academy’e aittir. İzinsiz olarak, kaynak belirtilerek dahi alıntı yapılması ya da yazının tamamının başka yerde yayınlanması yasaktır.