Statik bir Web Sitesini AWS CloudFront ve S3 kullanarak CDN Üzerinden Yayına almak

Amaç

Tüm dünyadan giriş yapılan sitelerin sunucularının veya dosya sunucularının fiziksel konumlandırılması ciddi emek gerektirmekte. Bu noktada, CDN yapıları kullanıcıları kendilerine en yakın konumdaki sunucuya yönlendirme işini DNS yardımıyla yaparak kullanıcıların içeriklere çok daha hızlı erişebilmesini sağlıyor. Böylece her kullanıcı, dünyanın farklı yerlerinde bulunan sunuculardan kendisine en yakın olanına otomatik olarak yönlendiriliyor. Bu hem bağlantı kurulmasını hızlandırıyor hem de tepki süresini RTT’yi düşürdüğü için daha kısa bir hale getirerek kullanıcı deneyimini iyileştiriyor.

Bu yazıda, statik bir web sitesinin içerik dağıtım ağı - content distribution network (CDN) - üzerinden yayına alınmasını göreceğiz. CDN olarak Amazon Web Services üzerindeki CloudFront’u kullanacağız. CDN’e dosyaları aktarmak için yine AWS üzerindeki Simple Storage Service(S3) üzerinde bir bucket oluşturacak ve CDN’in tüm lokasyonlarda buna senkron ilerlemesini sağlayacağız.

Kullanıcı Hesabı

Kullanıcı Oluşturmak

Bu bölümde, AWS üzerinde sadece kullanacağımız S3, CloudFront ve daha sonra DNS girmek istersek işimize yarayacak Route53 için yetkisi olan bir kullanıcı oluşturacağız.

Öncelikle IAM ekranına giriyoruz:

IAM Screen

Daha sonra yukarıdaki ‘Add User’ butonuna tıklıyoruz. Karşımıza kullanıcı adı ve erişim bilgileri soran bir ekran gelecek. Bu alanda kullanıcı adını belirledikten sonra, ‘AWS Management Console access’i seçin. Komut satırı üzerinden işlem yapmayı planlıyorsanız, bu ekranda ‘Programmatic access’i de seçebilirsiniz.

Kullanıcı ilk giriş yaptığında zorunlu olarak parola değiştirmesini istersek ‘Require password reset’i seçili bırakabiliriz. Bu uygulamada basitlik açısından bu zorunluluğu kullanmıyoruz. Bizim örneğimiz için son durum şu şekilde:

IAM User Detail Screen

Varsayılanda oluşturulan kullanıcı üzerinde, biz yetki vermedikçe servislere erişim sağlanmaz. Bu yüzden, kullanacağımız servisleri seçip yetkilendirme yapmamız gerekiyor. Bu örnekte, oluşturduğumuz kullanıcıya S3, Route53 ve CloudFront üzerinde tam yetki vereceğiz. Normal şartlarda eğer gerçek bir yayına alma senaryosu gerçekleştiriyorsanız bu tür yerlerde bir politika hazırlayıp onu yüklemek daha sağlıklı bir yöntem olabilir. Şu anki haliyle hesapta bulunan ve bizim yayına alacağımız dosyalardan bağımsız olarak bu servislerdeki tüm yetkileri vermiş oluyoruz. Örneğin, S3’te bulunan her Bucket üzerinde yetki sahibi olmasının yanısıra, istediği Bucket’i herkes tarafından okunabilir yapmak gibi yetkileri ve hatta silme yetkisini dahi vermiş oluyoruz. Özet olarak yetkilendirme gibi konularda bu yazıda belirtmediğimiz ancak yapmanız önerilen birçok konu mevcut. Bu konuda detayı araştırma yapmak isterseniz IAM Policy olarak arayabilir ve detaylarına, dosya formatına bakabilirsiniz.

Karşımıza gelen ekrandan, Attach existing policies directly seçeneğine gelip açılan listeden AmazonS3FullAccess, AmazonRoute53FullAccess, CloudFrontFullAccess kutularını işaretliyoruz:

IAM add user permission select

İlerlediğimizde şöyle bir özet görmemiz gerekiyor:

IAM permission summary

Son olarak oluşturmak istediğimiz kullanıcının özetini görüp onaylamak istersek Create user butonunu kullanıyoruz.

IAM add user review

Onayladığımızda karşımıza parolayı belirten bir ekran gelecek. Komut satırı ile alakalı yukarıda belirttiğimiz değişikliği kullanıcı oluştururken yaptıysanız, sizde de görüntüde bulunan Access key ID ve Secret access key alanları yer alacaktır. Bu yazıda parola dışındaki alanları kullanmayacağımız için bunu tercihinize bırakıyoruz. Parolayı bir yere kaydedelim.

Üst kısımda bir de giriş yapabilmek için kullanılacak adres yer alıyor. Onu da kaydederek, oluşturduğumuz kullanıcı adı ve burdan aldığımız parolayla giriş yapılarak belirlediğimiz yetkilere sahip bir kullanıcının istediğimiz yerleri kontrol etmesini sağlayabiliyoruz:

IAM added user

Kullanıcıyı Test Etmek

Devam etmeden önce, oluşturduğumuz kullanıcı ve bize verilen adresle giriş yapmayı deneyerek her şeyin yolunda gittiğine emin olalım. Linke girince alttaki gibi bir ekran gelecek. Burda kullanıcı adı ve parolayı doldurup giriş yapıyoruz.

AWS login page

Amazon S3 Bucket Oluşturmak

Yönetim ekranına girdiğimizde, sol üstten arama yaparak Amazon S3’ü bulalım:

AWS Console search

Amazon S3 ekranına geldiğimizde, yeni bir bucket oluşturmak için Create bucket butonunu kullanıyoruz:

Amazon S3 intro screen

Gelen ekranda bizden bir buket ismi istiyor. Bu örnekte yayına alacağımız içerik bir statik web sitesi olacağı için buket ismine onun adresini verdik (cloudblog.ray.kim). Bölge olarak normalde kullanıcılara yakın bir yer seçmek istesek de, CDN kullanacağımız için bu seçimin bizim yapacağımız dosya işlemleri dışında çok fazla kalmıyor. Size uygun bir tanesini seçip devam edebilirsiniz:

Amazon S3 create bucket

Oluşturduğumuz buketi ne için kullanmak istediğimizi soracak. Bunlardan herhangi birini seçmemiz bu uygulamada gerekli değil. Ne işe yaradıkları da kendi altlarında kısaca yazıyor. Detay için de Learn more linklerine bakabilrisiniz. İlerliyoruz:

Amazon S3 create bucket

Bu ekranda oluşturacağımız bucket için izinleri soruyor. İzinleri nasıl değiştireceğimizi bir örnek üzerinden göstereceğiz, bu yüzden olduğu gibi bırakıyor ve dışarıdan erişim izni vermiyoruz. İsterseniz Manage public permissions seçeneklerinden doğrudan bu aşamada da izin verebilirsiniz:

Amazon S3 create bucket

Ardından bir özet ekranı gelecek ve devam etmek için Create bucket butonuna basmamız gerekecek:

Amazon S3 create bucket

Bu işlemler tamamlandığında bucketı görmemiz gerekiyor:

Amazon S3 see buckets

CloudFront ile CDN Oluşturmak

AWS panelinde bu sefer S3 yerine CloudFront’u seçerek başlıyoruz:

Select CloudFront from AWS Console

Bu ekranda, Create Distribution butonuna basarak yeni bir dağıtım oluşturuyoruz.

Amazon CloudFront Getting Started

Karşımıza gelen seçeneklerden, bu uygulamada web üzerinden bir dosya sunumu yapılacağı için Web’i seçerek Get Started butonuna basıyoruz.

CloudFront Web distribution

Gelen ekranda içerik dağıtım detaylarını girmemiz gerekiyor. Origin Domain Name alanına tıkladığmızda altta bucketlarımızın listesi gelecek. Biraz önce oluşturduğumuz bucketı seçiyoruz.

CloudFront create distribution

Ardından Default Root Object yerine index.html yazıyoruz. Buraya yazacağımız isim, adrese girildiğinde bucket içerisinde otomatik olarak gönderilecek dosyayı temsil ediyor:

CloudFront default root object

İstediğimiz başka ayarlar varsa onları da düzenledikten sonra süreci tamamlıyoruz:

CloudFront distribution status in progress

Bu aşama tamamlandığında, ilgili bucket içerisindeki nesneler seçili olan tüm konumlarla senkronize edilir. Bu aşamada senkronize işlemi bitene kadar In Progress yazısı gözükür. Bu işlem tamamlandığında tüm kullanıcılar son haline ulaşabilirler.

Son olarak, Domain Name alanındaki adrese dikkat edelim. İçeriği burdan görebileceğimiz gibi, kendi alan adımıza da CNAME türünde bir DNS kaydı girerek siteyi doğrudan ulaşılabilir hale getirebiliriz. Bir sonraki aşamada bu adresi kullanacağız.

İçeriğin yüklenmesi

Bu aşamada site içeriğini S3 üzerine yükleyeceğiz. Bunu daha sonra da tekrarlayabileceğiniz için en sona bıraktık. Şimdi, S3 ekranına geri dönelim ve oluşturduğumuz bucketı seçerek açalım:

Amazon S3 select bucket

İçinde yer alan Upload butonu ile dosyaları yükleyebiliriz:

Amazon S3 upload button

Yüklemek istediğimiz dosyaları seçelim.

Amazon S3 upload files

Ardından, izinleri ayarlayabileceğimiz şu ekran karşımıza geliyor.

Amazon S3 uploaded files

Manage public permissions altından dışarıdan ulaşılabilir hale getiriyoruz:

Amazon S3 public permissions

Sonraki ekranlarda bir değişiklik yapmadan dosyaları yüklüyoruz.

Sonuç

Bu işlemin ardından, CloudFront ekranına dönerseniz tekrardan senkronizasyonun başladığınız göreceksiniz. Senkronizasyon tamamlandıktan sonra orda yer alan adresten sitenize ulaşabilirsiniz. Bu örnekte karşımıza çıkan sonuç(örnekte adresimiz dx8m7eiirmp8b.cloudfront.net idi):

CloudFront Result

Sonrası

Sonraki yazılarda fırsat buldukça bu tür dağıtımların TLS üzerinden nasıl yapılacağı, komut satırından aktarılması, alan adı için TLS sertifikasının Amazon üzerinden ücretsiz olarak nasıl alınıp otomatik yenilenecek şekilde el değmeden yaşayabilecek hale getirilmesi gibi konulara değineceğiz.

 
comments powered by Disqus