Photo by Taylor Vick on Unsplash

AWS Servisleri

AWS S3 Servisini Nasıl Kullanabilirim?

AWS S3 Servisi ile ilgili ufak tüyolar ve S3 servisini nasıl kullanabileceğinize dair bilgiler içerir.

Onur Dayıbaşı
Cloud And Servers
Published in
14 min readAug 10, 2015

--

Bu yazıda aşağıdaki konuları anlatmaya çalışacağız;

  • AWS S3 Bucket’ ını Nasıl Public Hale Getirebiliriz ?
  • AWS S3 Versioning
  • AWS S3 Event Handling
  • AWS S3 Bucket ındaki Tüm Nesneleri Silme
  • AWS S3 Pricing (S3 Fiyatlandırması)
  • AWS S3 Bucket’larının Yedeğini/Replikasını oluşturma
  • AWS S3 CORS
  • AWS S3 Web Sitenizi Local ile Nasıl Senkronize Edersiniz ?
  • Profil Resmini AWS S3 Nasıl Yükleriz?
  • AWS S3 Spesifik Bucket’a İzin Verme
  • AWS S3 Event Notification to SQS
  • Node.js ile Local’den S3 File Upload Nasıl Yapılır ?
  • AWS S3'deki Dosyayı Local’e Node.js ile Nasıl Alırız ?
  • Node.JS — AWS S3 SDK — Promise.all
  • AWS S3'e Sunucu Olmadan Dosya Yükleme
  • AWS S3 WebSitenizi Local ile Nasıl Senkronize Edersiniz ?
  • S3 üzerinde WebSite Hosting Nasıl Yapılır?

1. AWS S3 Bucket’ ını Nasıl Public Hale Getirebiliriz?

AWS S3 bucket’ ını uygulamalarımıza ait dosyalarımızı key-file şeklinde tutabildiğimiz gibi Static Web Hosting amacıyla da kullanabiliriz. Örneğin uygulamanıza ait html, js, imajlar, videolar S3 bucket atıp bunları public erişimli hale getirebilirsiniz.

Bunun için birinci yöntem public hale getirmek istediğiniz herhangi bir dosyayı seçip bunun ile ilgili Properties/Permission sekmesinden Add More Permission düğmesine basarak herkese açma/indirme yetkisi verilir.

Bu yöntem bucket içerisinde belli bir kaç dosyaya public yetkisi vermek istersek kullanacağımız bir yöntem olmalıdır. Bu işlemi tüm dosyalarda yapmak istiyorsak ve dosya sayısı çok ise bu işlem bizim için işkenceye dönüşmeye başlar.

Bunun için ilgili bucket tıklanır ve Properties/Permission sekmesi seçilir Edit Bucket Policy düğmesine basılarak açılan ekrana bu bucket ile ilgili kural girilir. Kural üretmek için aşağıdaki adresten http://awspolicygen.s3.amazonaws.com/policygen.html kural üretilir.

Permission.JSON

Bu kural sayesinde artık ismi geçen bucket içerisindeki tüm dosyalarınız public halde kullanabilirsiniz.

2. AWS S3 Versioning

Amazon S3 Nesne deposu olarak kullandığımızda karşımıza çıkan sorunlardan bazıları;

  • Nesne üzerinde değişiklikler yapabiliriz. Bu değişikliği yanlışlıkla yapmış isek nasıl eski versiyona döneceğiz.
  • Nesneyi yanlışlıkla sildik. Nesneyi nasıl geri alacağız.
  • Nesne üzerinde ne gibi değişiklikler yapmışız. Nesneleri nasıl karşılaştırabileceğiz.

Bunun için AWS S3 bize versiyonlama özelliği sunuyor. Attığımız bir resmin anahtar=photo.gif aynı iken , versionID(121212, 111111) farklı oluyor. Bu sayede nesnenin tüm versiyonlarını S3'de saklayabiliyoruz.

Versiyon Enabled hale getirmek için ya koddan ya da ekrandan Versioning özelliğini aktif hale getirebilirsiniz.

Veya AWS S3 arayüz Bucket/Properties altından Versioning Enabled hale getirilmesi gerekiyor.

Bundan sonra key ile S3 bucket ile yaptığımız tüm işlemler versiyon olarak tutulmaktadır. Bucket daki version/key ve buradan objelere aşağıdaki koddan erişebilirsiniz.

3. AWS S3 Event Handling

S3 sunduğu güzel bir hizmette S3 Object Store atılan bir nesne veya silinen bir nesne olduğunda bunun eventini yakalayıp işleme imkanı sağlaması. Peki bu Eventi nasıl yakalayacağız.

Bucket/Properties/Event sekmesi altından aşağıdaki değerleri girmeniz gerekiyor. Bu kısımda;

  • Event Notification ismini,
  • hangi Event tipleri için dinlemek istediğinizi,
  • hangi prefix veya Folder altındaki eventleri dinlemek istediğinizi
  • hangi türdeki dosya tiplerini dinlemek istediğinizi
  • ve bu Event Notification nereye bildirmek istediğinizi giriyorsunuz.

Ben aşağıdaki örnekte SQS(Simple Queue Service) üzerinde oluşturmuş olduğum MyQueue kuyruğunu ekledim. SQS aslında RabbitMQ, ActiveMQ Queue sunucusunun verdiği hizmetleri veren bir servis.

Sonrasında ilgili S3 bucket’a herhangi bir dosya attığımızda, bu dosyaya ait Notification’ın MyQueue üzerine 3 tane event düştüğünü görebiliriz. Son 2 event eklediğim resimlerle ilgili Notification Eventleri.

4. AWS S3 Bucketındaki Tüm Nesneleri Silme

Belirlediğiniz bir bucket içerisinde yer alan tüm nesneleri/dosyaları silmek istiyorsunuz. İlk başvuracağınız yöntem

  • AWSClient ile bucket içerisinde yer alan tüm keyleri listelemek
  • AWSClient ile bucket içerisinde yer alan nesneleri silmek.

Bunun için Java, .NET, PHP SDKları ile ilgili kodların yazılması gerekir. Bunun yerine daha kolay bir yöntem olan AWS CLI (Amazon Command Line Interface) kullanmaktır.

AWS CLI kendi makinenizide kurabilirsiniz veya zaten hali hazırda oluşturmuş olduğunuz EC2 makinesinde aws install edilmiş olarak gelecektir.

  1. Adım Konfigurasyonu gerçekleştirin. Güvenlik engellerini aşabilmeniz için aşağıdaki konfigurasyonu yapmanız gerekiyor.
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNNXXXXX
AWS Secret Access Key [None]: wJalrXUtXXX
Default region name [None]: us-west-2
Default output format [None]: ENTER

2. Adım Bucket içerisinde yer alan tüm dosyaların veya bucket’da yer alan bir klasörün içeriğinin boşaltılması

$ aws s3 rm s3://bucket-name --recursive$ aws s3 rm s3://bucket-name/doc --recursive

3. Adım Bucket’in komple silinmesi

$ aws s3 rb s3://bucket-name --force

5. AWS S3 Pricing (S3 Fiyatlandırması)

Free Tier: 5GB alanı 20.000 PUT/GET için bedava hizmet sunar.

Amazon S3 fiyatlandırması şu şekilde gerçekleştirilir .

  • Bölge seçimi yaptıktan sonra
  • Kullandığınız Depolama alanına göre fiyat ödersiniz.
  • Depolama çeşiti ödediğiniz miktarı değiştirir (Standard, Infrequent Access Storage ve Glacier Storage) seçimine göre fiyat farklılığı gösterir.

Aylık 1TB yer kullanırsanız 0.032 x 1000 GB = 32 $

6. AWS S3 Bucket larının Yedeğini/Replikasını oluşturma

AWS S3'de istediğiniz bucket ların replikasyonunu farklı bir region da otomatik olarak oluşturmasını sağlayarak backuplarını alabiliriz.

Bucket’ı seçtikten Properties kısmından Cross-Region Replication sekmesine geçip Enable Cross-Region Replication yaparak backup alma işlemini başlatabilirsiniz.

  • Hangi Region’da backup’layacağınızı seçin
  • Backup’layacağınız bucket ismini belirleyin
  • Bucket Storage kiriterinizi seçin.

7. AWS S3 CORS

Bu yazımızda S3 bir tane JSON koyup bunu Web uygulamasından nasıl çağırabileceğinizi anlatacağım. Bu konunun şöyle bir faydası var. Daha kullanacağınız Sunucu yazılmadan REST api’sinde alacağınız JSON’ları belirleyip önceden frontend kısmını yazabilirsiniz.

  1. İnternetten basit bir json bulalım.
{
“id”: 1,
“name”: “A green door”,
“price”: 12.50,
“tags”: [“home”, “green”]
}

2. Bunu json uzantılı kaydedelim. Uzantının bir önemi yok sadece hatırlamak için json kaydediyorum. Ve bu json dosyasını AWS S3 public hale getirdiğimiz bir bucket içerisine atalım.

3. Basit bir index.html dosyası oluşturalım ve script kısmına JQuery pathini ekliyelim.

<script src=”jquery-2.0.3.min.js”></script>
<script>
$( document ).ready(function() {
$.getJSON( jsonURL, function( data ) {
data=data;
});
});
</script>

Yukarıdaki çağrımdan sonra aşağıdaki şekilde benzer bir hata ile karşılaşırsınız

Bu Http request normal’de Desktop veya Mobil native uygulamalardan yaptığınızda almazsınız. Çalıştığınız Local ve Resource yüklediğiniz yer’in domain’i uyuşmadığı için Web Browser’ı bu hatayı verir.

Bu hatayı gidermek için Bucket’ınıza CORS kuralı eklemeniz gereklidir.

Bucket’ın permission sekmesinin altına gidin ve Add CORS Configuration deyip açılan ekrana aşağıdaki kuralı girmeniz yeterli

CORS Kuralı

<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

8. AWS S3 Web Sitenizi Local ile Nasıl Senkronize Edersiniz?

Baya bir süredir AWS S3 üzerinde tuttuğum web sitesinin local’den S3 atarken FileUpload kullanarak dosya atıyordum. Cyberduck, Bitvise vb araçlar ilede S3 dosya transferi mümkün. Bir diğer önerilen yöntemde AWS Command Line aracını kullanmanız.

http://docs.aws.amazon.com/cli/latest/userguide/installing.html AWS CLI nasıl kuracağınız anlatılmış. Pip sayesinde AWS CLI lokalinize kurun.

sync komutu local klasör ve dosyalarınızı dolaşarak S3 bucketı ile senkronize tutacaktır.

aws s3 sync . s3://mybucket

“Syncs directories and S3 prefixes. Recursively copies new and updated files from the source directory to the destination. Only creates folders in the destination if they contain one or more files.”

9. Profil Resmi AWS S3 Nasıl Yüklenir?

Bir sosyal medya uygulaması, chat uygulaması veya iş uygulaması yapıyor olun. Her şekilde profil resminizi bir dosya sistemine, bir object storage atıp saklama ihtiyacı duyarsınız. Bunun için en iyi yöntemlerden birisi de AWS’nin S3 hizmetini kullanmaktır. Bu işlemi sadece profil resimleri değil diğer dosyalar içinde düşünebilirsiniz.

Bu profil resimlerini S3 Bucketına attıktan sonra bunları Lambda ile Thumbnail haline getirmeyi şu yazıda anlatmıştım. yazı

A. Web Sunucu Üzerinden AWS SDK’sı ile Atmak…

Bu kısımda Authentication/Authorization işlemlerini WebApp üzerinden yapan kullanıcı FileUpload işleminde alınan InputStream PutObjectRequest ile S3 atılır. Sunucu tarafında .NET, PHP, Python, Node, Ruby, Go dillerinden birisini de kullanabilirsiniz.

B. Web Sunucu Üzerinden AWS CLI ve CronJob ile Atmak.

Yine WebSunucu üzerinden Authenticate ettikten sonra dosyayı EC2 veya ilgili sunucu üzerine kaydettikten sonra sunucudaki klasörünüzü S3 bucket belli aralıklara senkronize edilmesini sağlatmak için aşağıdaki cronjob kullanabilirsiniz.

C. Serverless (AWS Javascript SDK and Auth0)

Arada bir sunucu olmadan Token-based Authentication yaparak S3 servisini direk erişerek Browser/Cihazdan S3 direk profil resminin atılmasını sağlayarak. Bunu nasıl yapıldığını anlatan yazıyı https://auth0.com/blog/consume-aws-apis-from-the-browser-securely/ adresinden erişebilirsiniz.

10. AWS S3 Spesifik Bucket’a İzin Verme

S3 Bucketlarınızdan sadece bazılarına erişim izni vermek istiyorsanız. Aşağıdaki gibi bir Policy tanımlamanız gerekir.

{
“Version”: “2012–10–17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“s3: GetBucketLocation”,
“s3: ListAllMyBuckets”
],
“Resource”: “arn:aws:s3::: *”
},
{
“Effect”: “Allow”,
“Action”: [
“s3: ListBucket”
],
“Resource”: [
“arn: aws: s3:::bucketname”
]
},
{
“Effect”: “Allow”,
“Action”: [
“s3: PutObject”,
“s3: GetObject”
],
“Resource”: [
“arn:aws:s3:::bucketname/*”
]
}
]
}

11. AWS S3 Event Notification to SQS

S3 Event Notifications

Nereden buraya geldik dersek. yumod sitesinde yazarlara ait bir takım yardımcı araçlar geliştirmeye başladığımdan bahsetmiştim. Medium sayfasına ait bir story nasıl scrap/crawl edeceğimizden bahsetmiştik. Bu kısımda yazarın yazılarını yazıları ile ilgili yaptığı güncellemeler ile ilgili tetiklemeleri gerçekleştirecek bir mekanizmaya ihtiyacımız var.

Sürekli olarak medium sitesinini crawl ederek tüm verilerin güncel tutmaya çalışmak ciddi performans ve maliyet gerektirir. Burdaki amacım yumod sitesine giriş yapan kişilerin veya etkilendikleri yazılar üzerinde bir veri/metin analizini gerçekleştireceğiz.

Bunun için bucketımıza event ekliyoruz. Hangi eventler gerçekleştiğinde hangi hedefe mesajın gönderileceğini vermemiz yeterli.

S3 SQS Event Notification

Burada S3 SQS event yazması için SQS Permission oluşturup bu permission SQS Edit Policy Document eklemeniz gerekiyor.

Bu işlemi yaptıktan sonra ilgili mesajın Worker geldiğini görebilirsiniz.

SQS Gelen Mesaj

Bundan sonraki aşama yazar’ın hikayelerini çekerek bunlar üzerinde metin analizlerini çalıştırmak.

12. Node.js ile Local den S3 File Upload Nasıl Yapılır ?

Node.js araştırma yaptığımda iki kütüphane ilgilimi çekti bir tanesi multer : fileUpload Express.js REST önünde karşılayan bir kütüphane, ikinciside s3fs : Bu s3+fs birleşimini sağlayıp sizin işinizi bir adım kolaylaştıran bir kütüphane. Aşağıdaki linkte hiç s3fs kullanmadan da nasıl yapılacağını anlatmış aslında

  • İlk adım dosyanın Local’e upload edilmesi
  • İkinci adım dosyanın S3 bucket’ına upload edilmesi

Aşağıdaki 2 fonksiyonun bu işlemleri nasıl yaptığını görebilirsiniz.

Peki bu durumu nasıl test edebilirim. Postman pluginini kullanarak çok basit bir şekilde testinizi gerçekleştirebilirsiniz. Burada önemli olan Headers kısmına birşey yazmamanız, zaten arka planda

- Content-Type olarak multipart/form-data gönderecektir.
- İkinci olarak body gönderdiğiniz File için name kısmının sizin kodda form içerisinde aradığınız name ile uyuşması. Ben recFile kullandım örneğin..

Ekstra Not

Elastic Beanstalk Node.js uygulamanızı atıp dosya upload etmeye çalıştığınızda file size upload problemi ile karşılaşabilirsiniz. Bu problemi aşmak için .ebextension klasörünün altına nginx.config dosyası oluşturarak aşağıdaki konfigurasyonu eb deploy ile elasticbeanstalk ortamınıza aktarın.

files:
“/etc/nginx/conf.d/proxy.conf” :
mode: “000755”
owner: root
group: root
content: |
client_max_body_size 20M;

13 AWS S3 deki Dosyayı Locale NodeJS ile Nasıl Alırız ?

Excel dosyalarınızı AWS S3'de sakladığınızı ve bunları local’e çekip okumanız gereken durumda aşağıdaki kod ile istediğiniz path altına kopyalayabilirsiniz __dirname app çalıştığı folder path’ini verecektir.

var AWS = require(“aws-sdk”);
var s3 = new AWS.S3();function readFromS3ToLocal(filePath) {
var key = filePath;
var params = { Bucket: ‘bucketName’, Key: key };
var file = require(‘fs’).createWriteStream(__dirname + “/” + key);
s3.getObject(params).createReadStream().pipe(file).on(‘finish’, function() {
console.log(filePath+ ‘file loaded’);
mapOfFileFromS3[filePath]=true;
});;
}

14. Node.JS — AWS S3 SDK — Promise.all

Kullanım Senaryosu şöyle :

  • S3 bucketınızda klonlamanız gereken dosyalar var.
  • İstemciden size a,b,c… dosyasını a1,b1,c1… olarak klonlama isteği geliyor.
  • Bu klonlamaların asnyc olarak yapmak istiyorsunuz ve toplam sonuca göre İstemci’ye başarılı veya başarırız cevabı dönmek istiyorsunuz.

Promise.all

Bunun için iç içe fonksiyon çağrımı yerine Promise.all fonksiyonu sayesinde tüm fonksiyonları çalışmasını sağlatıp sonuçları tek bir then içerisinde karşılabilirsiniz. S3 ‘de dosya klonlamak için S3fs copyFile metodunu kullanabilirsiniz..

Promise.all fonksiyonu ne sağlıyor peki ;

15. AWS S3e Sunucu Olmadan Dosya Yükleme

Daha önceden bu konuyu profil resmini S3 nasıl yükleriz konusunu yöntemleri ile biraz değinmiştim.

Profil Resmini AWS S3 Nasıl Yükleriz ?

  • Web Sunucu Üzerinden AWS SDK’sı ile Atmak…
  • Web Sunucu Üzerinden AWS CLI ve CronJob ile Atmak.
  • Serverless (AWS Javascript SDK and Auth0)

Bugün 3ncü madde olan Serverless ile Javascript SDK’sı yöntemini biraz daha derinlemesine anlatacağım. Benim böyle bir yapıdan beklentim;

  • Login olmamış birisinin S3 Bucketına dosya upload edememesi…
  • Login olan kişinin dosyasını attığı klasör kendisine özel olmalı, başka hesap ile login olan kişinin attığı dosyalar ile karışmamalı…
  • Kişisel dosyalarına başka birisinin erişememesi…
  • Bu işlemleri sadece Browser Based değilde Mobil Native SDK’lar ile de çalıştırılabilecek şekilde olması

Not: S3 Yükleme işlemini Browser Based Upload Signature V2, V4 olsada 2ci,3ncü ve 4ncü adımlarda maddeleri sağlayan bir yöntem değildi..

Aşağıdaki Linkteki Örneği uyguladığımda yukarıdaki beklentilerimin karşılandığını gördüm..
https://github.com/auth0-samples/auth0-s3-sample

Burada en önemli konu IAM’dan tanımladığımız Policy tanımlama Bu Policy’de ${saml:sub} aslında bir değişken ve RunTime yaptığımız request bu değişkenin yerine userId bilgisi ile değiştirerek dropboxclone klasörü altında userId isminde bir klasör daha oluşturarak dosyayı o klasörün altına atmanı sağlıyor.

Aynı şekilde userId ait klasör içerisindeki dosyaların listelenmesine sadece ilgili userId login olmuş kullanıcıya izin veriyor.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowEverythingOnSpecificUserPath", "Effect": "Allow", "Action": [ "*" ], "Resource": [ "arn:aws:s3:::YOUR_BUCKET/dropboxclone/${saml:sub}", "arn:aws:s3:::YOUR_BUCKET/dropboxclone/${saml:sub}/*"] }, { "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::YOUR_BUCKET"], "Condition":{ "StringEquals": { "s3:prefix":["dropboxclone/${saml:sub}"] } } } ] }

GitHub’dan indirdiğımiz bu dosya içerisinde JS/config.js dosyası içerisinde Auth0 ve AWS Configurasyonları yer alıyor..

bucket S3 bucket ismi

folder_prefix S3 bucket içerisine hangi klasör içerine dosyaları upload edecekseniz bu ismi verin…

role, principal, domain, cliendID ve targetClientID kısmını Role tanımlama, principal tanımlama kısımlarını aşağıdaki linkteki yazıda anlattım.

Serverless Webapp with Auth0, ApiGateway, Lambda, DynamoDB yazımda

Sonuç olarak bu tanımlamarıda yaptıktan sonra S3 üzerine GitHub’dan indirmiş olduğunuz dosyaları js/config.js değiştirerek S3 foldera atın Örnek. S3 üzerinde statik web sayfası

Artık S3 Dropbox hazır. Ben şimdiden kullanmaya başladım :) Süper kolaylık..

16. AWS S3 Fetch All Obj in Bucket With Node.JS

AWS Object Storage olan S3 üzerinde 2 tane listeleme metodu

Bu yazımızda da bucket içerisinde tüm nesneleri/objleri local makinemize nasıl çekeceğimizi anlatacağım. Burada bu işlemi recursive ile sync olacak şekilde yaptım. 2nci bir yöntem olan async kullanabilirsiniz.

Farklı İşleyişler

Tek Tek İndirme

  • Bucket içerisindeki obj key’lerine AWS API üzerinden çek (async)
  • Tek key download et ve anında bir dosyaya yaz

Hepsini İndirip Belgeleri Sonrasında kaydetme

  • Bucket içerisindeki obj key’lerine AWS API üzerinden çek (async)
  • Tek key download et ve bellekte sakla (async)
  • Sonrasında belgeleri kaydet (async)

Ben aşağıda basit olması açısından tek tek indirme yöntemini anlatacağım. Bu yöntemde download edilen obj içerisinde bir status nesnesi tutuyoruz ne zaman bir tanesi için işlem başarılı/başarısız tamamlanıyor sonrasında diğer download işlemini çağırıyor..

17. AWS S3 WebSitenizi Local ile Nasıl Senkronize Edersiniz ?

Baya bir süredir AWS S3 üzerinde tuttuğum websitesinin local’den S3 atarken FileUpload kullanarak dosya atıyordum. Cyberduck, Bitvise vb araçlar ilede S3 dosya transferi mümküm. Bir diğer önerilen yöntemde AWS CommandLine aracını kullanmanız.

http://docs.aws.amazon.com/cli/latest/userguide/installing.html AWS CLI nasıl kuracağınız anlatılmış. Pip sayesinde AWS CLI lokalinize kurun.

sync komutu local klasör ve dosyalarınızı dolaşarak S3 bucketı ile senkronize tutacaktır.

aws s3 sync . s3://mybucket

“Syncs directories and S3 prefixes. Recursively copies new and updated files from the source directory to the destination. Only creates folders in the destination if they contain one or more files.”

18. S3 üzerinde Web Site Hosting Nasıl Yapılır?

AWS S3, Amazon’un sağladığı Simple Storage Servisidir. Bu servis ile istediğiniz türde dosyaları pdf,html,mp3, mpeg4, vb.. bir çok dosyayı objId, dosyaData’sı olacak şekilde bu servis içerisinde saklayabilirsiniz.

Web sayfasının internetten sunulabilmesi için farklı farklı yöntemler bulunur. En genel kullanım Apache HTTP Sunucusu üzerinden Web sayfasının sunumudur. Bilinen en yaygın yöntem olan Apache HTTP static html sayfalarını sunabildiği gibi sunucu tarafında PHP kodunu’da çalıştırarak HTML sayfasıda üretebilir.

Java tarafında Tomcat, Jetty, Glassfish, JBoss, Weblogic Node.js tarafında Express.js, .NET, Phyton, Ruby on Rails ve farklı dillerle implement edilmiş bir çok HTTP sunucusundan kendi web sitesinizi sunabilirsiniz.

Bu işlemi yapabilmek için bir EC2 sanal sunucusu alıp bunun içerisine istediğiniz bir HTTP Sunucusunu kurabilirsiniz. Ama bu sunucu çökerse sitenize girilemez duruma gelir, daha garantili bir sistem için 2 tane EC2 sunucusu alıp önüne bir ELB(Elastic Load Balancer) kurmamız gerekir. En ucuz maliyet 2 tane t2.nano kurulumunun aylık maliyeti 10$ tutacaktır.

Eğer ki web sayfanızın veritabanı ihtiyacı yok ise sadece static html sayfa ve client side js’lerden oluşuyor ise bu işlemi S3 üzerinden hosting işlemini çok çok ucuza ve güvenilir şekilde çözebilirsiniz.

Domain İsmini Alın

İlk yapacağınız işlem Domain ismini belirlemeniz olacaktır. Bu domain ismini farklı sitelerden alabilirsiniz. Hosting ihtiyacınız olmayacak sadece Domain İsmi Register Edeceksiniz.

Ben domain ismini bluehost üzerinden aldım örneğin yumod.com

S3 Bucket’ı oluşturun

AWS Console’undan S3 servisinin içerisine girin ve burada web sitenizin ismin ben www.yumod.com isminde bir bucket oluşturuyorum. Bu bucket sizin web siteniz ile ilgili statik dosyaları host edeceğiniz alan.

Bucket oluştururken size en yakın Region seçmeye dikkat edin. Avrupa’da Frankfurt ve Ireland bölgeleri yakınlık açısından Türkiye için daha uygun.

AWS Region’ları, servislerin sağlandığı bölgelerdir. Bu bölgelerin içerisinde birden fazla Availability Zone ismini verdiğimiz işlemci, disk, network cihazlarının bulunduğu data center’lar yer alır. Bu nedenle S3 bucket’ını hangi region’da açtığınız önemlidir. Fiziksel olarak web siteniz hizmet sağlayacağı bir bölgede olması websitenize erişim hızınızı arttıracaktır.

S3 Bucket’ı Konfigüre Edin.

S3 Bucket’ının içerisine dosyalara attığınızda bu dosyalara dışarıdan erişim yetkiniz bulunmamaktadır. Her dosyanın yanına gidip erişim izni ayarlamak yerine

Bucket’ı seçerek Permission sekmesinden Edit Bucket Policy düğmesine basın. Tüm kova(bucket) için izin ataması gerçekleştirin.

Bucket Özellikleri altından Static Web Hosting sekmesine giderek aşağıdaki ayarlamaları yapın. Burada bucket’ınıza bir websitesi olarak ulaşabilecek Endpoint adresini görebilirsiniz. Enable website hosting seçeneğini aktif hale getirerek Index ve Error Document’larını tanımlayınız. Bu sayede ilgili Endpoint’e bir request olması durumunda AWS index.html sayfasına yönlendirmede bulunacaktır.

index.html ve error.html dosyalarını oluşturup bucket’ın içerisine atmayı unutmayın.

DNS Ayarlaması

Domain ismini aldığınız yere gidin. Bluehost’da cpanel/DNS Zone Editor içerisinden kendinize ait domain ismini seçin buraya yumod.com yazınca AWS’deki endpoint’e yönlendirilmesi için bir CNAME kaydı tanımlayacağız.

www adresini AWS’de üsteki resimde yer alan Endpoint adresini veriyoruz. A* kaydı tanımlamadık. Çünkü elimizde bir IP adresi mevcut değil.

Hop siteniz hazır. Artık arkaplanına istediğiniz gibi sitenizi oluşturabilirsiniz. Böyle S3 kullanarak hosting ihtiyacınızı çok çok ucuza getirebilirsiniz :)

Uzun süredir farklı sektörlerde (Askeri, Telekomünikasyon, Devlet, Bankacılık, Sigortacılık, Tübitak, SaaS) yazılımlar geliştiriyorum. Bu süreçte Havelsan, Milsoft, T2, Cybersoft ve Thundra firmalarında yönetici ve yazılım mühendisi olarak çalıştım. Deneyimlerimi ve teknolojik bilgi birikimi mi olabildiğince OnurDayibasi.com adresinde toplamaya çalışıyorum. Tüm yazılarıma ve daha fazlasını bu site üzerinden erişebilirsiniz.

--

--