iToverDose/Yazılım· 26 MAYIS 2026 · 04:02

AWS Üzerinde Üretim Projesi Nasıl Geliştirilir? Bir Kariyer Değiştiricinin Deneyimi

Kariyerini değiştirmek isteyen Maurice Murphy’nin AWS’de ilk üretim projesini hayata geçirirken karşılaştığı teknik zorluklar ve elde ettiği dersler. Sunucusuz mimari, DynamoDB, API Gateway ve CORS hatasıyla ilgili pratik ipuçları.

DEV Community4 dk okuma0 Yorumlar

Yaklaşık on yıldır React, React Native ve Node uygulamaları geliştirirken, şimdilerde bulut mühendisliğine geçiş yapmaya hazırlanan Maurice Murphy’nin hikayesi, AWS’de ilk üretim projesini gerçekleştirme sürecini anlatıyor. Murphy, tamamen Amazon Web Services altyapısını kullanarak bir URL kısaltma servisi geliştirerek, kariyerindeki bu önemli adımı profesyonel bir seviyeye taşımayı hedefledi. Proje sadece portföyüne eklemek için değil, aynı zamanda AWS’nin sunduğu hizmetleri derinlemesine anlamak ve maliyet etkin bir çözüm oluşturmak amacıyla tasarlandı.

Kim Bu Projenin Arkasında?

Murphy, kendi kendini yetiştiren bir geliştirici olarak, geçmişte yalnızca Amazon S3 gibi temel AWS hizmetleriyle tanışmıştı. Ancak bu proje, onun AWS ekosistemini daha geniş bir ölçekte keşfetmesine olanak tanıdı. Projenin ana hedefleri arasında, yalnızca ihtiyaç duyulan hizmetleri kullanarak maliyetleri minimize etmek ve sistemleri olabildiğince verimli hale getirmek yer aldı. Ayrıca, 2026’nın üçüncü çeyreğinde AWS sertifikasyonuna (SAA-C03) hazırlanan Murphy, proje sırasında karşılaştığı teknik detayları öğrenerek sertifika sınavına da daha iyi hazırlanmayı umuyor.

Geliştirilen Ürün: Basit Ama Etkili Bir URL Kısaltıcı

Murphy’nin geliştirdiği sistem, kullanıcıların uzun URL’leri kopyalayıp yapıştırdığı bir arayüzden oluşuyor. Ardından, sistem kısa bir kod üreterek kullanıcıya geri döndürüyor. Kullanıcı bu kısa kodu tıkladığında ise asıl hedef URL’ye yönlendiriliyor. Proje, tamamen sunucusuz mimari üzerine kurulu olup, AWS’nin Lambda, API Gateway, DynamoDB, S3 ve CloudFront hizmetlerini içeriyor.

Murphy’nin amacı, mevcut tekerleği yeniden icat etmek değil, AWS altyapısını kullanarak sistemler kurmayı ve altyapıyı anlamayı geliştirmekti. Geçmişte tam yığın geliştirme deneyimleriyle karmaşık sistemler oluştururken, bu projeyle birlikte mimariyi bilinçli bir şekilde tasarlamayı öğrendi.

Teknik Detaylar: Hangi Hizmetler Neden Seçildi?

Lambda: Sunucusuz Hesaplama Gücü

Murphy, API katmanı olarak Lambda’yı tercih etti. Sürekli çalışan bir sunucu yerine, yalnızca bir URL kısaltıldığında veya kısa kod kullanıldığında çalışan bir sistem kurmak istedi. Lambda’nın otomatik ölçeklenme özelliği ve düşük maliyeti, bu tercihin temel nedenleriydi. Python bilgisini geliştirmek isteyen Murphy için de bu proje, yeni bir programlama dilini pratik yapma fırsatı sundu.

DynamoDB: Basit Erişim Deseni için NoSQL

DynamoDB, Murphy’nin veri tabanı olarak tercih ettiği hizmet oldu. Sistemde yalnızca bir kısa kodun bir URL’ye karşılık geldiği, basit bir erişim deseni bulunuyordu. Bu nedenle, tek bir anahtar sorgusu yeterliydi. Murphy’nin geçmişte MongoDB/Mongoose ile NoSQL tecrübesi olması da bu tercihte etkili oldu. RDS gibi ilişkisel veri tabanlarına göre, DynamoDB’nin basitliği ve maliyet etkinliği öne çıktı.

API Gateway: Lambda’ya İnternet Erişimi Sağlama

Lambda’nın yalnızca bir fonksiyon olması nedeniyle, doğrudan internete açık bir adresi bulunmuyordu. API Gateway, Lambda’nın internete açılmasını sağlayan köprü görevi gördü. Bu sayede, kullanıcıların Lambda fonksiyonuna HTTP istekleri göndermesi mümkün hale geldi.

S3 ve CloudFront: Statik Arayüzün Barındırılması

Murphy’nin React uygulaması, yalnızca dört dosyadan oluşuyordu: index.html, CSS/JS dosyaları ve iki SVG görsel. Bu statik dosyalar, doğrudan bir S3 bucket’ına yüklendi. S3’ün yalnızca statik dosyaları barındırması nedeniyle, veri tabanı işlemleri arka uçta Lambda ve API Gateway üzerinden gerçekleştirildi. CloudFront ise HTTPS güvenliği ve OAC (Origin Access Control) sayesinde S3 bucket’ının tamamen özel kalmasını sağladı. Murphy, CloudFront’un konfigürasyonunda yaşadığı zorlukları, proje sürecindeki en büyük engellerden biri olarak tanımladı.

IAM: En Az Yetki İlkesi ile Güvenlik

Murphy, Lambda fonksiyonuna yalnızca gerekli yetkileri atamak için IAM’i kullanmayı tercih etti. Örneğin, Lambda’nın yalnızca belirli bir DynamoDB tablosunda PutItem ve GetItem işlemleri yapabilmesi için özel bir politika oluşturuldu. Bu yaklaşım, olası bir ihlal durumunda hasarın sınırlı kalmasını sağladı.

Karşılaşılan Engeller ve Çözümleri

Projenin geliştirilme sürecinde Murphy, hem teknik hem de konfigürasyon kaynaklı birçok zorlukla karşılaştı. Bu engellerden bazıları ve çözümleri şu şekilde özetlenebilir:

  • IAM Yetki Sorunu: Proje için özel olarak oluşturduğu IAM kullanıcısı, Lambda fonksiyonu oluştururken otomatik olarak rol oluşturma yetkisine sahip değildi. Sorunun çözümü, iam:CreateRole yetkisinin eklenmesiyle gerçekleşti. Murphy, bu deneyimden yola çıkarak, kaynak oluşturulmadan önce kullanıcı yetkilerinin dikkatlice incelenmesi gerektiğini öğrendi.
  • Bölge Uyuşmazlığı: Lambda fonksiyonu us-east-2 bölgesinde oluşturulurken, DynamoDB tablosu us-east-1 bölgesindeydi. Bu uyuşmazlık, Lambda’nın bölgesinin değiştirilmesiyle çözüldü. Ancak sorun yalnızca bununla sınırlı kalmadı.
  • Lambda ve DynamoDB Entegrasyonunda Yaşanan Sorunlar: Lambda’nın varsayılan olarak yalnızca CloudWatch loglarına erişim yetkisi bulunuyordu. Bu nedenle, DynamoDB’ye tam erişim yetkisi vermek zorunda kaldı. Ardından, yalnızca gerekli iki işlem (dynamodb:GetItem ve dynamodb:PutItem) için özel bir politika oluşturuldu. Bu süreç, en az yetki ilkesinin önemini vurguladı.
  • Boto3 SDK Bölge Ayarlaması: AWS’nin Python SDK’sı olan boto3, doğru bölgeye ayarlanmamıştı. Sorun, boto3.resource() fonksiyonuna region_name='us-east-1' parametresinin eklenmesiyle çözüldü. Murphy, gelecekte tüm AWS SDK çağrılarında bölgeyi açıkça belirtmenin önemini vurguladı.
  • CORS Hataları: React frontend’inden API Gateway’e yapılan istekler, tarayıcıların gönderdiği OPTIONS ön sorgusu nedeniyle engelleniyordu. Sorunun çözümü için dört ayrı adım izlendi:
  • API Gateway’e OPTIONS rotalarının eklenmesi.
  • Lambda yanıtlarına CORS başlıklarının eklenmesi.
  • Lambda’da OPTIONS işleyicisinin açıkça tanımlanması.
  • API Gateway’in yeniden oluşturulması ve dağıtım değişikliklerinin uygulanması.
  • CloudFront 403 Hataları: S3 bucket politikasının doğru olduğundan emin olunsa da, CloudFront üzerinden erişimde 403 hataları yaşandı. Sorunun kaynağı, S3 websitesi uç noktasının kullanılmasıydı. Doğru çözüm, bucket’ın statik web sitesi barındırma özelliğinin devre dışı bırakılması ve yalnızca CloudFront üzerinden erişimin sağlanması oldu.

Sonuç: Öğrenilen Dersler ve Gelecek Planları

Murphy’nin bu projesi, AWS’nin geniş hizmet yelpazesiyle tanışmasına ve bu hizmetleri nasıl etkili bir şekilde kullanabileceğini öğrenmesine yardımcı oldu. Proje sürecinde karşılaştığı teknik zorluklar, hem kariyer değiştirme yolculuğunda hem de AWS sertifikasyonuna hazırlık sürecinde değerli deneyimler kazandırdı.

Gelecekte Murphy, AWS’de daha karmaşık sistemler geliştirmeye devam edecek ve bu projede edindiği bilgileri, yeni projelerde uygulamayı planlıyor. Ayrıca, sunucusuz mimarilerin avantajlarını ve sınırlarını daha iyi anlamak için farklı AWS hizmetlerini denemeye devam edecek. Bu proje, onun için yalnızca bir başlangıç noktasıydı ve kariyerindeki bu yeni bölümde daha da büyük adımlar atmaya hazırlanıyor.

Yapay zeka özeti

Kariyerini değiştirmek isteyen geliştiriciler için AWS’de ilk üretim projesini hayata geçiren Maurice Murphy’nin deneyimleri ve teknik ipuçları. Sunucusuz mimari, DynamoDB, API Gateway ve CORS hatasıyla ilgili pratik bilgiler.

Yorumlar

00
YORUM BIRAK
ID #GNN9HX

0 / 1200 KARAKTER

İnsan doğrulaması

9 + 5 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.