OpenTofu ve Terraform, altyapıyı (sunucu, ağ, IAM, veritabanı, DNS, hatta SaaS yapılandırmaları) bildirimsel kod olarak tanımlamayı sağlayan, fiili standart IaC (Infrastructure as Code) araçlarıdır. HashiCorp tarafından 2014’te başlatılan Terraform, 2023’teki BSL lisans değişikliğinin ardından Linux Foundation çatısı altında OpenTofu olarak forklanmıştır.
İkisi de aynı dili (HCL — HashiCorp Configuration Language) kullanır ve sürüm 1.5’e kadar tam uyumludur. Yeni özellikler bu noktadan sonra ayrışmaya başlamış olsa da Mono müşterilerimizin çoğu OpenTofu’ya sorunsuz geçiş yapmıştır.
Mono’nun yaklaşımı
Hangi aracın kullanılacağı tek başına bir karar değil; organizasyon yapısı ve state yönetimi çok daha önemli. Mono’nun standart kurulumu:
- Tek state yerine modüler state’ler: Her ortam (dev/staging/prod) ve her domain (network, data, compute) ayrı state. Blast-radius minimum.
- Remote backend: AWS S3 + DynamoDB veya Mono Cloud üzerinde Garage S3. Locking + versioning + encryption.
- Workspace yerine ortam dizinleri:
terraform workspaceyerine fiziksel klasör ayrımı (daha şeffaf). - Atlantis veya Spacelift: PR otomasyonu için. Manuel
applyüretimde mutlaka approval gerektirir. - Policy as code: OPA/Conftest ile “asla public S3 bucket açma”, “production’da
*resource yasak” gibi kuralları PR aşamasında zorunlu kıl.
Modül stratejisi
Üç katmanlı modül hiyerarşisi kullanırız:
- Kaynak modülleri — tek bir kaynak grubu (örn.
aws-vpc,gcp-cloud-sql). Sürüm pin’li. - Servis modülleri — birden fazla kaynak modülünü birleştiren yapılar (örn.
web-app-stack= ALB + ASG + RDS + Route53). - Ortam kompozisyonu — modüllere değer geçen ince katman (
environments/prod/web/main.tf).
Modüller ayrı Git repo’sunda; ortamlar source = "git::ssh://...?ref=v1.4.0" ile sürüme sabitlenir.
Yaygın sorunlar ve çözümler
- State drift: Manuel değişiklikleri tespit etmek için haftalık
tofu plancron’u. Drift varsa Slack/Teams uyarısı. - Plan’da binlerce satır değişiklik: Genelde provider sürüm yükseltmesi sebebiyledir.
tofu state replace-providervetofu plan -refresh-onlyile ayrıştırın. - Yavaş plan: Workspace’i parçalayın;
-targetresource ile lokal hızlı iterasyon. - Secret sızıntısı: State içinde secret olmasın. Secrets Manager / Vault entegrasyonu,
sensitive = truemarkası ve state’in kesinlikle halka açık olmaması. - Lisans/uyumluluk: Yeni projelerde OpenTofu, eskilerde aşamalı geçiş; Mono geçişlerde state migration’ı sıfır kesintiyle yapar.
İlgili hizmetlerimiz
Sıkça sorulan sorular
OpenTofu mu Terraform mu?
State'i nerede tutmalıyız?
Modülleri nasıl organize etmeliyiz?
Plan/apply pipeline nasıl çalışmalı?
tofu plan, çıktı PR yorumuna eklenir. Plan onaylandıktan sonra manuel approval ile apply. Üretim için ek olarak drift detection (haftalık tofu plan cron’u) ve policy as code (OPA/Conftest).