🚨 Yaygın AWS Hataları
Yaygın AWS Hataları: AWS hataları neredeyse her zaman üç temel nedenden birinden kaynaklanır — ve kalıbı tanımak saatlerce debug süresinden kurtarır.
AWS hataları neredeyse her zaman üç temel nedenden birinden kaynaklanır — ve kalıbı tanımak saatlerce debug süresinden kurtarır. Java'nın exception hiyerarşisi gibi düşün: `AccessDeniedException`, IAM izninin eksik olmasına karşılık gelir (security manager hayır dedi); `NoSuchElementException`, yanlış region veya yazım hatasına karşılık gelir (beklediğin nesne baktığın scope'ta yok); `OutOfMemoryError`, kota aşımına karşılık gelir (JVM'in heap'i, hesap limitidir). Ama bu hatalar ilk geldiğinde neden bu kadar şifreli görünür? Çünkü AWS API hata mesajları, ağ/API katmanında neyin kırıldığını anlatır — niyetinin neden başarısız olduğunu değil. Bu, bir `NullPointerException` stack trace'inin satır numarasını söylemesi ama hangi upstream çağrısının null döndürdüğünü söylememesiyle tamamen aynıdır. AWS hatasını yanlış okumanın QA maliyeti gerçektir: `s3:PutObject` adımında sessizce `AccessDenied` ile başarısız olan bir pipeline rapor bucket'ına hiçbir şey yüklemez, test suite çalışmış gibi görünür ama hiç artifact üretmez — ve ekip 3 gün sonra fark eder ki 72 saatlik CI sonuçları yok olmuştur, testler başarısız olduğu için değil, kimse hata logunu okumadığı için.
IAM kullanıcısı veya rolünün gerekli izni yok. Kullanıcıya bağlı policy'de "ec2:RunInstances" action'ı eksik.
AWS CLI veya SDK credential bulamıyor. "aws configure" hiç çalıştırılmamış, ya da credential süresi dolmuş, ya da AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY environment variable'ları set edilmemiş.
S3 bucket adları TÜM AWS hesaplarında dünya genelinde benzersiz olmak zorunda. Başka biri (başka bir hesaptaki sen de olabilir) bu bucket adını zaten almış.
AMI ID'leri region'a özgüdür. us-east-1'de var olan bir AMI, eu-west-1'de bulunmaz. Farklı region hedefleyen bir tutorial'dan AMI ID kopyalanmış.
Yeni AWS hesapları için region başına varsayılan EC2 instance limiti 5'tir. Bu, kontrolden çıkan script'lerden kaynaklanan beklenmedik faturaları önlemek için güvenlik kotasıdır.
2023'ten itibaren S3 Block Public Access varsayılan olarak etkin. Object ACL'ini "public-read" olarak ayarlasan bile bucket seviyesindeki Block Public Access tüm genel istekleri reddeder.
AWS SigV4 request signature'ları 15 dakika sonra sona erer. Sistem saatin 5 dakikadan fazla yanlışsa tüm AWS API çağrıları bu hatayla başarısız olur.
EC2 Security Group'unda (güvenlik duvarı) senin IP'nden gelen SSH (port 22) bağlantısına izin veren inbound kuralı yok. Varsayılan olarak tüm gelen trafik engellenir.
AWS API'nin servis başına hesap başına rate limiti var. EC2 DescribeInstances'ı döngü içinde çağırmak veya binlerce S3 nesnesini paralel yüklemek throttling'e neden olur.
🎬 Sessiz AccessDenied: 72 Saatlik CI Sonucu Nasıl Kaybolur?
s3:PutObject Çağrısı
AccessDenied (sessiz)
CI pipeline'ı her gece çalışır ve "başarılı" görünür — testler gerçekten geçmiştir.