Statik bir Web Sitesini AWS CloudFront ve S3 kullanarak CDN Üzerinden Yayına almak
- January 5, 2018
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:
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:
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:
İlerlediğimizde şöyle bir özet görmemiz gerekiyor:
Son olarak oluşturmak istediğimiz kullanıcının özetini görüp onaylamak istersek Create user butonunu kullanıyoruz.
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:
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.
Amazon S3 Bucket Oluşturmak
Yönetim ekranına girdiğimizde, sol üstten arama yaparak Amazon S3’ü bulalım:
Amazon S3 ekranına geldiğimizde, yeni bir bucket oluşturmak için Create bucket butonunu kullanıyoruz:
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:
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:
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:
Ardından bir özet ekranı gelecek ve devam etmek için Create bucket butonuna basmamız gerekecek:
Bu işlemler tamamlandığında bucketı görmemiz gerekiyor:
CloudFront ile CDN Oluşturmak
AWS panelinde bu sefer S3 yerine CloudFront’u seçerek başlıyoruz:
Bu ekranda, Create Distribution butonuna basarak yeni bir dağıtım oluşturuyoruz.
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.
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.
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:
İstediğimiz başka ayarlar varsa onları da düzenledikten sonra süreci tamamlıyoruz:
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:
İçinde yer alan Upload butonu ile dosyaları yükleyebiliriz:
Yüklemek istediğimiz dosyaları seçelim.
Ardından, izinleri ayarlayabileceğimiz şu ekran karşımıza geliyor.
Manage public permissions altından dışarıdan ulaşılabilir hale getiriyoruz:
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):
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.