irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Yazılım dünyasında kodlarımızı test etmeden canlıya almayı hayal bile edemeyiz. Peki, binlerce dolarlık bulut kaynaklarını yöneten altyapı kodlarımız (Terraform, CloudFormation vb.) neden test edilmesin? Bir yanlış konfigürasyon, sisteminizin çökmesine veya daha kötüsü verilerinizin internete sızmasına neden olabilir.
Altyapı testlerini iki ana kategoride inceleyebiliriz: Statik Analiz (Güvenlik Odaklı) ve Birim/Entegrasyon Testleri (Fonksiyonel Odaklı). Bu iki dünyanın liderleri ise Checkov ve Terratest'tir.
Checkov, altyapı kodunuzu henüz kaynaklar oluşturulmadan tarayan bir statik analiz aracıdır. Kodunuzun içindeki güvenlik açıklarını, hatalı yapılandırmaları ve uyumluluk (compliance) sorunlarını tespit eder.
Örnek Kullanım:
Terratest, Go dili ile yazılmış bir kütüphanedir. Checkov'un aksine, Terratest kodunuzu gerçekten çalıştırır. Geçici olarak altyapıyı oluşturur, beklentilerinizi test eder ve ardından her şeyi siler.
Basit Bir Terratest Örneği (Go):
İdeal bir DevOps boru hattında (pipeline) altyapı kodları şu aşamalardan geçmelidir:
Altyapı testi yapmak zaman kaybı değil, bir sigortadır. Checkov ile "güvenli miyiz?" sorusuna, Terratest ile "çalışıyor mu?" sorusuna yanıt bulursunuz. Altyapınızı test etmek, üretim ortamında (production) çıkacak yangınları henüz kod aşamasındayken söndürmenizi sağlar.
Altyapı testlerini iki ana kategoride inceleyebiliriz: Statik Analiz (Güvenlik Odaklı) ve Birim/Entegrasyon Testleri (Fonksiyonel Odaklı). Bu iki dünyanın liderleri ise Checkov ve Terratest'tir.
1. Checkov: Statik Güvenlik Analizi (SCA)
Checkov, altyapı kodunuzu henüz kaynaklar oluşturulmadan tarayan bir statik analiz aracıdır. Kodunuzun içindeki güvenlik açıklarını, hatalı yapılandırmaları ve uyumluluk (compliance) sorunlarını tespit eder.
- [] Neyi Kontrol Eder? "S3 bucket'ı halka açık mı?", "Şifreleme aktif mi?", "SSH portu herkese açık mı?" gibi 1000'den fazla kuralı denetler. [] Ne Zaman Çalışır? Geliştiricinin bilgisayarında veya CI/CD boru hattının en başında.
Örnek Kullanım:
Bash:
Terraform klasörünü tara
checkov -d /altyapi/kodlarim/
2. Terratest: Altyapı Birim ve Entegrasyon Testleri
Terratest, Go dili ile yazılmış bir kütüphanedir. Checkov'un aksine, Terratest kodunuzu gerçekten çalıştırır. Geçici olarak altyapıyı oluşturur, beklentilerinizi test eder ve ardından her şeyi siler.
- [] Nasıl Çalışır? Terraform kodunuzu terraform apply ile ayağa kaldırır, oluşan kaynağın IP'sine HTTP isteği atar veya SSH ile bağlanıp kontrol yapar. [] Avantajı: Altyapının sadece "kod olarak" değil, "çalışır halde" de doğru olduğunu kanıtlar.
Basit Bir Terratest Örneği (Go):
Kod:
func TestTerraformWebserverExample(t *testing.T) { opts := &terraform.Options{ TerraformDir: "../examples/web-server", }
// Test sonunda her şeyi otomatik sil
defer terraform.Destroy(t, opts)
// Altyapıyı kur
terraform.InitAndApply(t, opts)
// Çıktıyı al ve kontrol et
publicIp := terraform.Output(t, opts, "public_ip")
url := fmt.Sprintf("http://%s:8080", publicIp)
// HTTP 200 dönüyor mu bak
http_helper.HttpGetWithRetry(t, url, nil, 200, "Hello World", 30, 5*time.Second)
}
Checkov vs. Terratest: Hangisi Ne Zaman?
| Özellik | Checkov | Terratest |
|---|---|---|
| Tür | Statik (Kod analizi) | Dinamik (Gerçek kaynak) |
| Hız | Çok Hızlı (Saniyeler) | Yavaş (Dakikalar - Bulut süresi) |
| Maliyet | Sıfır | Düşük (Geçici kaynak ücreti) |
| Ana Odak | Güvenlik ve Standartlar | Fonksiyonel Doğruluk |
Modern Bir Test Akışı Nasıl Olmalı?
İdeal bir DevOps boru hattında (pipeline) altyapı kodları şu aşamalardan geçmelidir:
- [] Linting: Kod yazım kurallarını kontrol et (TFLint). [] Security Scan: Checkov ile güvenlik taraması yap. [] Unit Testing: Terratest ile küçük modülleri doğrula. [] Plan & Review: terraform plan çıktısını incele.
- Deploy: Canlıya al.
Sonuç
Altyapı testi yapmak zaman kaybı değil, bir sigortadır. Checkov ile "güvenli miyiz?" sorusuna, Terratest ile "çalışıyor mu?" sorusuna yanıt bulursunuz. Altyapınızı test etmek, üretim ortamında (production) çıkacak yangınları henüz kod aşamasındayken söndürmenizi sağlar.