Infrastructure Testing: Terratest ve Checkov ile Altyapı Kodunu Test Etme

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

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.

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?​


ÖzellikCheckovTerratest
TürStatik (Kod analizi)Dinamik (Gerçek kaynak)
HızÇok Hızlı (Saniyeler)Yavaş (Dakikalar - Bulut süresi)
MaliyetSıfırDüşük (Geçici kaynak ücreti)
Ana OdakGüvenlik ve StandartlarFonksiyonel Doğruluk

Modern Bir Test Akışı Nasıl Olmalı?​


İdeal bir DevOps boru hattında (pipeline) altyapı kodları şu aşamalardan geçmelidir:

  1. [] 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.
  2. 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.
 
Geri
Üst