Kurs
Altyapı Olarak Kod (Infrastructure as Code, IaC), altyapının sağlanmasını ve yönetimini kod aracılığıyla otomatikleştiren bir süreçtir. Fiziksel donanım yapılandırması ve etkileşimli yapılandırma araçları altyapı sağlamak için kullanılabilse de, IaC; sürüm kontrolü, tekrarlanabilirlik ve ölçeklenebilirlik gibi çeşitli avantajlar sunar. Mevcut en iyi IaC araçlarından biri, HashiCorp tarafından 2014’te geliştirilen ve dünya çapında 500.000’den fazla kuruluş tarafından kullanılan Terraform’dur. Terraform’un nasıl çalıştığını ve modern BT operasyonlarında nasıl kullanılacağını inceleyelim.
Terraform’u öğrenmeye başlarken, en az bir büyük bulut sağlayıcısına (AWS, Azure, Google Cloud vb.) aşina olmanın ön koşul olduğunu unutmayın; çünkü Terraform bulut altyapısını yönetmek için kullanılır. Bulut bilişime yeniyseniz, Cloud Computing’i Anlamak kursumuz sağlam bir temel sunar.
Terraform nedir?
Terraform, altyapı bileşenlerini ve bunların ilişkilerini üst düzey bir yapılandırma diliyle tanımlamanıza olanak tanıyan açık kaynaklı bir araçtır.
Terraform’un insan tarafından okunabilir yapılandırma dosyalarında, altyapınızın istenen durumunu belirtebilir ve Terraform bu duruma nasıl ulaşılacağını otomatik olarak çıkarır. Bu dosyalar sürümlenebilir, paylaşılabilir ve yeniden kullanılabilir; hesaplama ve depolamadan DNS ve SaaS özelliklerine kadar altyapınızı tutarlı bir şekilde yönetmenizi sağlar.
Terraform; çeşitli bulut sağlayıcılarıyla, çoklu bulut altyapılarında ve şirket içi ortamlarda kullanılabilir.
Terraform’un Temel Özellikleri
Terraform’u öne çıkaran temel noktalara yakından bakalım:
HashiCorp Configuration Language
Terraform, özellikle altyapıyı kod olarak tanımlamak için tasarlanmış üst düzey bir dil olan HashiCorp’un Configuration Language’ini (HCL) kullanır. Üst düzey yapılandırma dilleri, düşük seviyeli betik yazımına ve manuel yapılandırmaya kıyasla soyut ve kullanıcı dostu bir bildirime dayalı sözdizimi uygular. Daha önce YAML veya JSON dosyalarında üst düzey dillere rastlamış olabilirsiniz.
HCL bir blok yapısını izler; her iç içe blok, kaynakları ve bunların yapılandırmalarını temsil eder. Kaynaklar, adları ve öznitelikleriyle açıkça tanımlanır.
resource "aws_instance" "example" {
ami = "ami-123456"
instance_type = "t2.micro"
}
Yürütme planı
Altyapınızın istenen durumunu tanımladıktan sonra Terraform bir yürütme planı oluşturur. Bu plan, o duruma ulaşmak için Terraform’un atması gereken adımları listeler; böylece değişiklikler uygulanmadan önce gözden geçirilebilir. Planı uygulamadan önce kontrol etmek, kaynakların silinmesi gibi istenmeyen değişiklikleri önlemeye yardımcı olur.
Durum yönetimi
Terraform, altyapınızın mevcut durumunu otomatik olarak izleyen ve hangi değişikliklerin yapılması gerektiğini belirlerken tek gerçek kaynak olarak kullanılan bir durum dosyası tutar. Varsayılan olarak yerel olarak saklanır ve terraform.tfstate olarak adlandırılır.
Sağlayıcılar
Sağlayıcılar, bulut platformlarının ve diğer hizmetlerin API’leriyle etkileşime giren ve Terraform’un çok çeşitli kaynakları yönetmesine olanak tanıyan eklentilerdir. Resmi sağlayıcılar HashiCorp ve AWS, Azure, Google Cloud, Github, Datadog vb. gibi güvenilir ortakları tarafından geliştirilip korunur. Ayrıca Terraform Registry’de veya Github’da bulunabilen topluluk tarafından geliştirilen eklentiler de vardır.
Kaynak grafiği
Terraform, altyapınızın kaynaklarını ve bunlar arasındaki ilişkileri gösteren bir kaynak grafiği oluşturur. Bu grafik, Terraform’un planları etkili biçimde üretmesini, kaynaklar arasındaki bağımlılıkları ele almasını ve kaynakların doğru sırada oluşturulup güncellenip silinmesini sağlar. Bu grafik, altyapınızı görselleştirmenin ve yapmak istediğiniz değişikliklerin etkisini anlamanın da harika bir yoludur.

Örnek kaynak grafiği. Kaynak: HashiCorp belgeleri
Terraform’a Başlarken
İlk Terraform iş akışımızı adım adım inceleyelim. DevOps’a veya genel olarak bulut bilişime yeniyseniz, devam etmeden önce Cloud Computing’i Anlamak ve DevOps’a Giriş kurslarımızı almanızı öneririm.
Kurulum ve yapılandırma
Bu Terraform öğreticisinde AWS üzerinde kaynaklar oluşturacağız. Siz de adım adım izlemek istiyor ve bir hesabınız yoksa, AWS’ye gidip kaydolun.
- Resmi siteden Terraform’u indirin. İşletim sisteminize uygun ikili dosyayı seçin ve kurulum talimatlarını izleyin.
- Terraform’u kurduktan sonra yeni bir Terminal penceresi açın ve yazılımın doğru kurulduğunu doğrulamak için terraform -version komutunu çalıştırın.
- AWS CLI’ı yükleyin
- Terminalinizde aws configure komutunu çalıştırarak AWS CLI’ı yapılandırın. Sizden Access Key ID, Secret Access Key, varsayılan bölge adı ve varsayılan çıktı biçimini girmeniz istenecektir. Terraform bunlara otomatik olarak erişebilmelidir.
İlk Terraform yapılandırması
Yeni bir dizin ve ilk yapılandırma dosyanızı oluşturun. Adını main.tf koyalım ve Terraform’a bir AWS EC2 örneği oluşturmak istediğimizi söyleyelim. HCL ile yazılmış kod şu şekildedir:
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
Projenin başlatılması
Şimdi aşağıdaki komutu çalıştırarak Terraform projemizi başlatalım:
$ terraform init
Bu tek seferlik bir komuttur ve gerekli sağlayıcı eklentilerini indirir. Sonraki değişiklikler için tekrar çalıştırmanız gerekmez.
Plan
Şimdi yürütme planımızı oluşturmak istiyoruz. Unutmayın, plan Terraform’un istenen duruma ulaşmak için yapması gereken değişiklikleri vurgular (bu örnekte, çalışan bir EC2 örneği). Şunu çalıştırın:
$ terraform plan
Şuna benzer bir çıktı görmelisiniz:
Terraform will perform the following actions:
# aws_instance.example will be created
+ resource "aws_instance" "example" {
+ ami = "ami-0c55b159cbfafe1f0"
+ instance_type = "t2.micro"
...
}
Plan: 1 to add, 0 to change, 0 to destroy.
Uygula
Planı inceledik ve şimdi bunu çalıştırıp kaynakları sağlama almaya karar verdik. Terminalinizde şunu çalıştırın:
$ terraform apply
Sizden işlemi onaylamanız istenecek. Devam etmek için “yes” yazın.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Şunları görmelisiniz:
aws_instance.example: Creating...
aws_instance.example: Still creating... [10s elapsed] aws_instance.example:
Creation complete after 15s [id=i-0abcdef1234567890]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Tebrikler, Terraform kullanarak AWS’de ilk EC2 örneğinizi sağladınız!
Terraform Kullanmanın Faydaları
Daha önce de belirttiğimiz gibi, Terraform kullanmak; tutarlılık ve tekrarlanabilirlik gibi pek çok fayda sağlar ve yürütme planları sayesinde insan hatası oranını azaltır.
Diğer faydalar şunlardır:
- Hızlı Sağlama: Terraform kaynakları paralel olarak oluşturup güncelleyebilir; bu da geliştirme, test ve hazırlık ortamlarını hızla ayağa kaldırmak için özellikle kullanışlıdır.
- Artan İş Birliği: Git gibi bir sürüm kontrol sistemiyle birlikte kullanıldığında Terraform, altyapınız üzerinde iş birliğini ve şeffaflığı artırmanın harika bir yoludur. Değişiklikler tıpkı uygulama kodunda olduğu gibi incelenebilir, onaylanabilir ve izlenebilir.
- Verimli Felaket Kurtarma: Bir şeyler ters giderse, Terraform aynı yapılandırma dosyalarını kullanarak tüm altyapıyı sıfırdan hızla yeniden oluşturabilir.
- Topluluk Desteği: Terraform, altyapı yönetiminde en iyi uygulamaları teşvik eden ve paylaşılabilen yeniden kullanılabilir yapılandırmalar olan modüllerin kullanımını destekler. Terraform ayrıca etkin bir topluluğa ve geniş bir sağlayıcı ile modül ekosistemine sahiptir; bu da teknoloji yığınınız ne kadar niş olursa olsun ihtiyacınıza uygun bir şey bulma olasılığınızın yüksek olduğu anlamına gelir.
Terraform’un Yaygın Kullanım Alanları
İster veri boru hatları kuran bir Veri Mühendisi olun ister çözümlerinizi canlı ortama almak isteyen bir Veri Bilimci, Terraform altyapı ihtiyaçlarınızı yönetmek için harika bir araçtır. En yaygın kullanım alanlarından bazıları şunlardır:
Çoklu bulut yönetimi
Birden fazla bulut sağlayıcısına yayılan altyapıyı yönetmek her zaman kolay değildir. Terraform, tek bir araçla tam da bunu yapmanızı sağlar. Bunun üzerine, Terraform şirket içi kaynakları da yönetebilir; bu da hibrit ortamda faaliyet gösteren kuruluşlar için ideal bir çözüm haline getirir.
CI/CD iş akışları
Terraform, CI/CD iş akışlarıyla iyi entegre olur; bu da altyapınızı yazılım teslim sürecinizin bir parçası olarak dağıtabileceğiniz anlamına gelir. Ayrıca önizleme, geliştirme, test veya hazırlık ortamlarını ihtiyaç duyulduğunda otomatik olarak oluşturup kaldırabilirsiniz.
Kubernetes kümeleri
Terraform; AWS (EKS), Azure (AKS) veya GCP (GKE) gibi farklı bulut sağlayıcılarında Kubernetes kümelerini yönetebilir. Buna gerekli altyapının kurulumu, küme içindeki Kubernetes kaynaklarının yönetimi ve iş yükü taleplerine göre kümelerin ölçeklendirilmesi dahildir.
Terraform ve Diğer IaC Araçları
Diğer popüler IaC araçları arasında Ansible, Chef, Puppet ve AWS CloudFormation bulunur. Her aracın güçlü ve zayıf yönleri vardır. Göz atalım:
| Özellik | Terraform | Ansible | Chef | Puppet | CloudFormation |
|---|---|---|---|---|---|
| Açık Kaynak | Evet | Evet | Evet | Evet | Hayır |
| Bildirime Dayalı Sözdizimi | Evet | Hayır | Hayır | Evet | Evet |
| Çoklu Bulut Desteği | Evet | Evet | Evet | Evet | Hayır, yalnızca AWS |
| Durum Yönetimi | Evet | Hayır | Hayır | Evet | Evet |
| Yürütme Planları | Evet | Hayır | Hayır | Hayır | Hayır |
| Bağımlılık Yönetimi | Evet | Sınırlı | Sınırlı | Evet | Evet |
Görüldüğü gibi, bu araçların her biri kendi başına güçlü olsa da kapsamlı özellik setiyle Terraform öne çıkıyor. Ancak bu liste kapsamlı değildir ve her araç, gereksinimlere bağlı olarak biraz farklı kullanım alanlarına hizmet eder. Örneğin Ansible ve onun işlemsel yapısı, yapılandırma yönetimi ve ad hoc görevler için uygundur.
Sonuç
Son 10 yılda Terraform, binlerce kuruluşun BT altyapısını yönetmesine yardımcı oldu. Bildirime dayalı yaklaşımı, otomasyon yetenekleri ve çoklu bulut ortamları için sunduğu destekle Terraform, en popüler IaC araçlarından biri haline geldi ve bulut benimsemesi artmaya devam ettikçe altyapı yönetimi alanında kuşkusuz önemli bir oyuncu olmayı sürdürecek.
Artık Terraform’un temellerini anladığınıza göre, daha gelişmiş yapılandırmalara ve gerçek hayat senaryolarına dalabilirsiniz. Yaygın görevler ve kullanım durumları için Terraform’u nasıl kullanacağınızı öğrenmek üzere HashiCorp Terraform eğitimlerine göz atın veya Terraform’un bir Veri Mühendisinin araç setine nasıl uyduğunu anlamak için 2024’te Kullanmanız Gereken 14 Temel Veri Mühendisliği Aracı blog yazımıza bakın.

İlk prototipten ürün-pazar uyumuna ve ötesine kadar erken aşama girişimleri büyütme konusunda uzmanlaşmış, ürün odaklı bir teknik liderim. İnsanların teknolojiyi nasıl kullandığına dair bitmeyen bir merakım var ve kurucularla ile disiplinler arası ekiplerle yakın çalışarak cesur fikirleri hayata geçirmeyi seviyorum. Ürün inşa etmediğim zamanlarda ya dünyanın yeni köşelerinde ilham peşinde koşuyor ya da yoga stüdyosunda stres atıyorum.
Sıkça Sorulan Sorular
Terraform küçük ölçekli projeler için uygun mu yoksa esas olarak kurumsal kullanım için mi?
Terraform, proje boyutunuz ne olursa olsun faydalı bir araçtır! Yönetmeniz gereken 5 kaynağınız da olsa 1000 kaynağınız da olsa, mutlaka faydasını göreceksiniz.
Terraform’un maliyeti nedir?
Terraform açık kaynaklıdır ve ücretsizdir; ancak, Terraform aracılığıyla sağlanan ve yönetilen kaynaklar için bulut sağlayıcınızın ücretlendirme yapacağını unutmayın.
Terraform veritabanlarını ve diğer duruma duyarlı hizmetleri yönetebilir mi?
Evet, Terraform veritabanlarını ve diğer duruma duyarlı hizmetleri yönetebilir. Örnekleri, kümeleri ve yapılandırmaları IaC dosyalarınızda tanımlayabilirsiniz.
Terraform, yapılandırma dosyalarındaki sırlar ve hassas bilgileri nasıl ele alır?
Terraform, ortam değişkenleri, şifrelenmiş değişkenler ve HashiCorp Vault veya AWS Secrets Manager gibi gizli yönetimi hizmetleriyle entegrasyonları destekleyerek gizli anahtarların en iyi uygulamalarla ele alınmasını teşvik eder.
