Bugün bir önceki yazıya takvime yapmak istediğim için tekrar klavyemin başına geçiyorum. Yakın zamanda paylaştığım “Ajandada Bugün: AWS CloudFront” yazımda CloudFront üzerine detaylıca konuşmuştuk. Bugün ise bir coğrafi konuma görre kişiselleştirdiğimiz bir website içeriğini nasıl CloudFront ve Lambda@Edge kullanarak deploy edebileceğimize bakalım istiyorum. Çaylar hazırsa haydi başlayalım 🐸
Gereksinimler:
Öncelikle bu demo için bir AWS hesabınız ve console erişiminiz olması gerektiğini belirtmek isterim. Sırayla gerçekleştireceğimiz adımlar şu şekilde:
1. S3 Bucket Oluşturma ve Statik İçerik Yükleme
2. Lambda@Edge Fonksiyonu Oluşturma
3. CloudFront Dağıtımı Oluşturma
4. CloudFront Dağıtımını Test Etme
Demo adımlarıyla başayalım öyleyse 👇🏻
Adımlar:
1. S3 Bucket Oluşturma ve Statik İçerik Yükleme
- AWS Management Console‘a giriş yapalım.
- S3 servisini açıp yeni bir bucket oluşturacağız.
- Bucket Name:
kubikolog-demo-website - Region: Size en yakın bölgeyi seçin.
- Bucket Name:

3. Bucket’ı oluşturduktan sonra, bucket’ın içine girelim ve Permissions sekmesine gidelim.
4. Bucket Policy eklememiz gerekiyor. Aşağıdaki gibi ekleyebilirsiniz.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::kubikolog-demo-website/*"
}
]
}

5. Properties sekmesine gidelim ve Static website hosting bölümünde Use this bucket to host a website seçeneğini işaretleyelim
- Index document:
index.html

6. Aşağıdaki içeriği bilgisayarınızda index.html olarak kaydedip ardından Upload sekmesine gidelim ve index.html adlı basit bir HTML dosyası yükleyelim.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Geolocation Demo</title>
</head>
<body>
<h1 id="greeting">Welcome!</h1>
<p>This website uses CloudFront and Lambda@Edge to personalize content based on your location for kubikolog demo.</p>
</body>
</html>
2. Lambda@Edge Fonksiyonu Oluşturma
- AWS Management Console‘da Lambda servisini açalım.
- Create function butonuna tıklayıp aşağıdaki gibi kendinize göre kutuları doldurun.
- Function name:
GeoGreetingFunction - Runtime:
Node.js 20.x - Role:
Create a new role with basic Lambda permissions
- Function name:

3. Fonksiyon oluşturulduktan sonra, aşağıdaki kodu Function code bölümüne yapıştıralım ve fonksiyonu kaydedelim.
exports.handler = async (event) => {
const request = event.Records[0].cf.request;
const response = event.Records[0].cf.response;
const headers = request.headers;
const country = headers['cloudfront-viewer-country'] ? headers['cloudfront-viewer-country'][0].value : 'unknown';
let greeting = 'Welcome!';
if (country === 'US') {
greeting = 'Hello World!!';
} else if (country === 'FR') {
greeting = 'Bonjour de la France!';
} else if (country === 'JP') {
greeting = 'こんにちは、日本から!';
}
const modifiedResponse = {
status: response.status,
statusDescription: response.statusDescription,
headers: response.headers,
body: response.body.replace('<h1 id="greeting">Welcome!</h1>', `<h1 id="greeting">${greeting}</h1>`),
bodyEncoding: 'text',
};
return modifiedResponse;
};
3. CloudFront Dağıtımı Oluşturma
- AWS Management Console‘da CloudFront servisini açalım.
- Create Distribution butonuna tıklayıp , Web seçeneğini seçelim ve devam edelim.
- Origin Settings bölümünde:
- Origin Domain Name: S3 bucket adınızı seçin (
kubikolog-demo-website.s3.amazonaws.com). - Origin Path: Boş bırakın.
- Name:
kubikolog-geo-origin(varsayılan olarak gelir).
- Origin Domain Name: S3 bucket adınızı seçin (
- Default Cache Behavior Settings bölümünde:
- Viewer Protocol Policy:
Redirect HTTP to HTTPSseçin. - Lambda Function Associations:
Origin Responseseçeneği altında, oluşturduğunuz Lambda fonksiyonunu ekleyin (GeoGreetingFunction).
- Viewer Protocol Policy:
- Distribution Settings bölümünde:
- Price Class:
Use Only North America and Europe(maliyeti düşük tutmak için). - Alternate Domain Names (CNAMEs): Boş bırakın (örneğinizi basit tutmak için).
- SSL Certificate:
Default CloudFront Certificate(TLS kullanımı için).
- Price Class:
- Create Distribution butonuna tıklayıp kaydediyoruz.

4. CloudFront Dağıtımını Test Etme
- CloudFront dağıtımınızın durumunun
Deployedolmasını bekleyin (Bu birkaç dakika sürebilir). Yanında deploying olarak yazıyor. - Dağıtımın Domain Name‘ini kopyalayalım. (örneğin:
d1234567890abcdef.cloudfront.net) ve bir web tarayıcısında bu domain name’i açalım.
Eğer her şey doğru yapılandırılmışsa, web sayfanız kullanıcıların coğrafi konumuna göre kişiselleştirilmiş bir mesaj gösterecektir. Örneğin, ABD’den erişen kullanıcılar “Hello World !!” mesajını görecektir.

Sonuç olarak; bu adımları tamamladığınızda, AWS CloudFront ve Lambda@Edge kullanarak coğrafi konuma göre kişiselleştirilmiş içerik sunan bir web uygulaması oluşturmuş olacaksınız. Bu demo, CloudFront’un Lambda@Edge ile entegrasyonunu ve bu kombinasyonun sağladığı yapıyı anlamamız daha da kolaylaştığını düşünüyorum.
Yazının sonuna doğru gelirken KubikFM’den bugün sizlere dinlerken her duyguya girdiğim bir şarkıyı armağan ediyorum 🐸🦋
“Biraz neşe biraz hüzün, biraz öyle biraz da böyle”
