AWS'ye giriş: backend geliştirici için
Region ve AZ, IAM, VPC ve subnet'ler, EC2-ECS-EKS-Lambda seçimi, S3, RDS-Aurora-DynamoDB, SQS-SNS-EventBridge, secret yönetimi, gözlemlenebilirlik, yüksek erişilebilirlik ve maliyet tuzakları. Spring Boot servisini AWS'de çalıştıran bir geliştiricinin bilmesi gerekenler.
Konu özeti
Backend mülakatlarında AWS soruları sertifika sınavı gibi servis ezberi ölçmez. Beklenen şudur: bir Spring Boot servisini AWS'de nerede çalıştıracağını, veriyi nerede tutacağını, servislerin birbirine nasıl güvenli eriştiğini ve bir AZ çöktüğünde ne olacağını anlatabilmek. Aşağıdaki özet bu çerçeveye odaklanır. Fiyat ve limitler değişebilir; buradaki sayılar yazım tarihindeki AWS dokümantasyonuna göredir ve kesin değer için ilgili servis sayfası kontrol edilmelidir.
Region, AZ ve edge
- Region: coğrafi bir bölge (örneğin
eu-central-1Frankfurt). Veri, siz taşımadıkça region dışına çıkmaz; KVKK ve bankacılık düzenlemeleri region seçimini belirler. - Availability Zone (AZ): bir region içinde birbirinden fiziksel olarak ayrı, kendi enerji ve ağ altyapısı olan veri merkezi grupları. Region'lar genelde en az üç AZ içerir. AZ'ler arası gecikme düşük (tek haneli milisaniye) olduğu için senkron replikasyon yapılabilir.
- Edge location: CloudFront (CDN) ve Route 53 gibi servislerin kullanıcıya yakın uç noktaları.
Yüksek erişilebilirliğin temel kuralı: en az iki, tercihen üç AZ'ye yay. Tek AZ'de çalışan bir sistem, o AZ'deki bir arızada tamamen durur.
IAM: kim neye erişebilir
| Kavram | Ne işe yarar |
|---|---|
| User | Bir insan ya da (kaçınılması gereken) uzun ömürlü erişim anahtarı |
| Role | Üstlenilen (assume) kimlik; STS'den kısa ömürlü kimlik bilgisi verir |
| Policy | JSON belge: hangi Action, hangi Resource, hangi Condition |
| Trust policy | Bir role'ü kimin üstlenebileceğini söyler |
Değerlendirme kuralı: varsayılan ret; bir Allow erişim verir; açık bir Deny her şeyi ezer. Uygulamalar asla kod ya da ortam değişkeninde access key taşımaz; EC2'de instance profile, ECS'te task role, EKS'te IRSA ya da EKS Pod Identity ile role üstlenir ve AWS SDK kimlik bilgisini kendisi alır. CI/CD de OIDC ile kısa ömürlü role üstlenir. En az yetki ilkesi: s3:* ve Resource: "*" yerine belirli eylem ve belirli kaynak.
Ağ: VPC
Bir VPC, kendi IP aralığın (örneğin 10.0.0.0/16) olan özel ağdır. İçinde her AZ'de subnet'ler açılır:
- Public subnet: route table'ında Internet Gateway'e çıkış vardır; load balancer ve NAT gateway burada durur.
- Private subnet: internetten doğrudan erişilemez; uygulama ve veritabanı burada durur. Dışarı çıkış NAT gateway üzerinden yapılır.
Internet
│
Internet Gateway
│
┌─────── public subnet (AZ a/b/c) ───────┐
│ ALB NAT gateway │
└────┬──────────────────▲────────────────┘
│ │ dışarı çıkış
┌─── private subnet (AZ a/b/c) ──────────┐
│ ECS/EKS servisleri ──► RDS / Aurora │
└────────────────────────────────────────┘
Security group kaynak (ENI) seviyesinde, durumlu (stateful) bir güvenlik duvarıdır: sadece izin kuralı yazılır, dönen trafiğe otomatik izin verilir; kaynak olarak başka bir security group gösterilebilir ("sadece uygulama SG'sinden gelen 5432"). Network ACL subnet seviyesindedir, durumsuzdur (dönüş trafiğine ayrıca izin gerekir), izin ve ret kuralı yazılabilir ve kurallar numara sırasıyla değerlendirilir. Günlük işte asıl araç security group'tur.
AWS servislerine (S3, DynamoDB, Secrets Manager, ECR) private subnet'ten erişirken trafiği NAT'tan geçirmek yerine VPC endpoint kullanılır: S3 ve DynamoDB için gateway endpoint ücretsizdir, diğerleri için interface endpoint (PrivateLink) saatlik ücretlidir.
Compute: nerede çalıştırmalı
| Seçenek | Ne yönetirsin | İyi olduğu yer | Dikkat |
|---|---|---|---|
| EC2 | İşletim sistemi, yama, ölçekleme | Tam kontrol, özel donanım | En çok operasyon yükü |
| ECS + Fargate | Sadece container ve task tanımı | Basit container servisleri | Kubernetes ekosistemi yok |
| EKS | Kubernetes nesneleri, node'lar (ya da Fargate) | Çok servisli platform, taşınabilirlik | Öğrenme ve işletme maliyeti |
| Lambda | Sadece fonksiyon kodu | Olay odaklı, düzensiz yük, kısa işler | 15 dk sınırı, cold start |
Lambda limitleri: en fazla 900 saniye (15 dakika) çalışma süresi, 128 MB ile 10.240 MB arası bellek (CPU bellekle orantılı artar), senkron çağrıda 6 MB istek ve cevap, bölge başına varsayılan 1.000 eşzamanlı çalışma. Java'da cold start birkaç saniyeye çıkabilir; SnapStart başlatılmış ortamın anlık görüntüsünü alıp oradan devam ederek bunu ciddi azaltır, provisioned concurrency ise ortamları önceden sıcak tutar.
Depolama ve veritabanı
S3 nesne deposudur: dosya sistemi değil, anahtar-değer gibi çalışır. Tüm işlemlerde güçlü okuma-sonrası-yazma tutarlılığı vardır (2020 sonundan beri). Depolama sınıfları erişim sıklığına göre seçilir (Standard, Intelligent-Tiering, Standard-IA, Glacier sınıfları) ve lifecycle kurallarıyla nesneler otomatik taşınır. Yeni bucket'larda Block Public Access varsayılan olarak açıktır ve nesneler varsayılan olarak şifrelenir. Büyük dosya yüklemelerinde dosyayı uygulamadan geçirmek yerine istemciye kısa ömürlü presigned URL verilir.
| İhtiyaç | Seçenek |
|---|---|
| İlişkisel, transaction, karmaşık sorgu | RDS for PostgreSQL ya da Aurora PostgreSQL |
| Anahtarla erişim, çok yüksek ölçek, öngörülebilir gecikme | DynamoDB |
| Cache, oturum, rate limit sayacı | ElastiCache (Redis/Valkey) |
| Arama | OpenSearch |
RDS'te Multi-AZ yüksek erişilebilirlik içindir: başka bir AZ'de senkron bir yedek tutulur ve arızada otomatik failover olur (klasik Multi-AZ instance'ta yedek okunamaz). Read replica okuma ölçeği içindir ve asenkron çalışır, yani replikada gecikme (lag) olabilir. Aurora depolamayı üç AZ'de altı kopya olarak tutar ve replikalar aynı depolamayı paylaştığı için failover genelde daha hızlıdır.
DynamoDB'de tasarım erişim desenlerinden başlar: partition key yükü dağıtır, sort key aralık sorgusu sağlar. Bir öğe en fazla 400 KB'tır. Koşullu yazma (ConditionExpression) ile idempotency ve iyimser kilitleme yapılır; JOIN yoktur.
Mesajlaşma
| Servis | Model | Kullanım |
|---|---|---|
| SQS | Kuyruk; bir mesajı bir tüketici işler | İş dağıtımı, yük tamponu |
| SNS | Pub/sub; bir mesaj birçok aboneye | Fan-out (genelde SNS → birden çok SQS) |
| EventBridge | Kurallara göre olay yönlendirme | Servisler ve SaaS arası olay yolu |
| Kinesis / MSK | Sıralı, tekrar okunabilir akış (log) | Yüksek hacim, replay, Kafka uyumluluğu |
SQS standard kuyruk en az bir kez teslim eder ve sıra garantisi vermez; tüketici idempotent olmalıdır. FIFO kuyruk mesaj grubu içinde sıra ve tekilleştirme penceresi içinde tek işlem sağlar ama throughput sınırı daha düşüktür. Bir mesaj alındığında visibility timeout süresince diğer tüketicilere görünmez; bu sürede silinmezse tekrar görünür. Belirli sayıda başarısız alımdan sonra mesaj DLQ'ya taşınır (redrive policy, maxReceiveCount). Mesaj boyutu sınırı 2025'te 256 KiB'tan 1 MiB'a çıktı; daha büyük yükler S3'e konup kuyruğa referansı yazılır.
Secret, konfigürasyon ve şifreleme
- Secrets Manager: veritabanı şifresi, API anahtarı; otomatik rotation desteği; secret başına ücretli.
- SSM Parameter Store: konfigürasyon ve basit secret'lar (
SecureString); standart parametreler ücretsiz. - KMS: şifreleme anahtarları; anahtarın kendisi dışarı çıkmaz, envelope encryption ile veri anahtarı şifrelenir. Erişim key policy ve IAM ile kontrol edilir ve her kullanım CloudTrail'e düşer.
Spring Boot'ta Spring Cloud AWS ile spring.config.import=aws-secretsmanager:... ya da aws-parameterstore:... kullanılabilir; ECS ve EKS'te secret'lar container'a ortam değişkeni olarak da enjekte edilebilir.
Gözlemlenebilirlik ve denetim
- CloudWatch Logs / Metrics / Alarms: log toplama, metrik, eşik ve anomali alarmları.
- X-Ray ya da OpenTelemetry (AWS Distro for OpenTelemetry): dağıtık trace.
- CloudTrail: hesap üzerindeki her API çağrısının kaydı ("bu security group'u kim değiştirdi?"). Bankacılıkta denetim izi için vazgeçilmezdir.
Maliyet tuzakları
Faturayı şaşırtıcı biçimde büyüten kalemler genelde compute değildir:
- NAT gateway: saatlik ücret artı işlenen GB başına ücret (us-east-1'de ikisi de 0,045 USD). S3'e giden yoğun trafik NAT'tan geçiyorsa gateway endpoint ile ücretsiz hâle gelir.
- AZ'ler arası veri transferi: her yönde GB başına ücretlidir; konuşkan servisler AZ'ler arasında çok veri taşır.
- Genel IPv4 adresi: Şubat 2024'ten beri her genel IPv4 adresi saatlik ücretlidir (0,005 USD).
- CloudWatch Logs: yüksek hacimli debug logu alım ücretiyle pahalıya patlar.
- Boşta kalan kaynaklar: unutulmuş EBS diskleri, snapshot'lar, ölçeği küçültülmemiş ortamlar.
Sorular (20)
IAM'de user, role ve policy arasındaki fark nedir? Uygulama AWS'ye nasıl erişmeli?
Public ve private subnet arasındaki fark nedir? Veritabanı hangisinde durur?
Security group ile Network ACL arasındaki fark nedir?
Bir Spring Boot servisini EC2, ECS/Fargate, EKS ya da Lambda'da çalıştırmak arasında nasıl seçim yaparsın?
S3 nedir, dosya sisteminden farkı ne? Güvenli kullanım için nelere dikkat edersin?
CloudWatch, X-Ray ve CloudTrail ne işe yarar?
ALB ile NLB arasındaki fark nedir? Health check neden önemli?
RDS Multi-AZ ile read replica arasındaki fark nedir? Aurora ne zaman tercih edilir?
SQS, SNS, EventBridge ve Kinesis arasında nasıl seçim yaparsın?
SQS'te visibility timeout ve DLQ nasıl çalışır? Mesajın iki kez işlenmesini nasıl önlersin?
Lambda'da cold start nedir? Java ile Lambda kullanırken nelere dikkat edersin?
Secret'ları AWS'de nerede tutarsın? Secrets Manager, Parameter Store ve KMS arasındaki fark nedir?
Bir Spring Boot servisini AWS'de uçtan uca nasıl çalıştırırsın? Temel mimariyi anlat.
Kuyruktan iş tüketen bir servisi nasıl ölçeklersin?
Kullanıcıların büyük dosyaları güvenli şekilde yüklemesi için S3 presigned URL akışını nasıl kurarsın?
CI/CD pipeline'ı AWS'ye nasıl güvenli erişir? Cross-account erişim nasıl kurulur?
DynamoDB'de tabloyu nasıl modellersin? Hot partition nedir, idempotency nasıl sağlanır?
Yüksek erişilebilir bir sistemi AWS'de nasıl tasarlarsın? RTO ve RPO kararı mimariyi nasıl etkiler?
AWS faturası beklenenden yüksek geldi. Nerelere bakarsın, nasıl düşürürsün?
Çoktan seçmeli (12)
Bir ECS servisinin S3'e erişmesi için en doğru yöntem hangisidir?
Tek doğru cevap var.
Security group için hangisi doğrudur?
Tek doğru cevap var.
Private subnet'teki bir uygulama sunucusu internetteki bir API'yi nasıl çağırır?
Tek doğru cevap var.
Sürekli trafik alan, gecikmeye hassas bir Spring Boot REST API'si için en uygun başlangıç seçeneği genelde hangisidir?
Tek doğru cevap var.
RDS Multi-AZ (klasik instance dağıtımı) için hangileri doğrudur?
Birden fazla doğru olabilir.
SQS standard kuyruk için hangileri doğrudur?
Birden fazla doğru olabilir.
Bir olayı bildirim, fraud ve raporlama servislerinin bağımsız olarak işlemesi gerekiyor. Hangi desen en uygundur?
Tek doğru cevap var.
Java ile yazılmış bir Lambda fonksiyonunda cold start süresini azaltmak için hangileri işe yarar?
Birden fazla doğru olabilir.
Private subnet'teki servislerin S3'e yaptığı yoğun trafik NAT gateway maliyetini artırıyor. En doğrudan çözüm hangisidir?
Tek doğru cevap var.
GitHub Actions'tan OIDC ile üstlenilen bir prod deploy role'ünün trust policy'si için hangileri doğru uygulamalardır?
Birden fazla doğru olabilir.
DynamoDB'de aynı transferId ile gelen tekrarlı isteklerin ikinci kez kayıt oluşturmasını önlemenin doğru yolu hangisidir?
Tek doğru cevap var.
Bir geliştirici yanlışlıkla production tablosundan kayıt sildi. Aşağıdakilerden hangisi veriyi geri getirmeye yardımcı OLMAZ?
Tek doğru cevap var.
Kaynaklar
- AWS Documentation: Regions and Availability Zones; AWS Well-Architected Framework (Reliability, Security, Cost Optimization)
- AWS Lambda Developer Guide: Lambda quotas; Improving startup performance with Lambda SnapStart
- AWS What's New (Ağustos 2025): Amazon SQS increases maximum message payload size to 1 MiB
- AWS What's New (Kasım 2024): AWS Lambda now supports SnapStart for Python and .NET functions
- Amazon SQS Developer Guide: visibility timeout, dead-letter queues; AWS Lambda ile SQS kullanımı
- Amazon VPC User Guide: security groups, network ACLs, NAT gateways, gateway endpoints
- Amazon RDS ve Aurora User Guide: Multi-AZ deployments, read replicas
- Amazon DynamoDB Developer Guide: partition key design, condition expressions
- AWS IAM User Guide: policy evaluation logic; GitHub Actions için OIDC
- AWS VPC fiyatlandırması ve genel IPv4 ücretlendirmesi (Şubat 2024'ten itibaren); güncel fiyat için aws.amazon.com/vpc/pricing
- Kitap Bölüm 13 (saga, outbox ve idempotency), Bölüm 14 (dayanıklılık), Bölüm 15 (Kubernetes ve teslimat), Bölüm 21 (DLQ), Bölüm 23 (loglama ve tracing)