Terraform — Bolum-1 IaC ve Terraforma Genel Bakis
Merhaba, “Terraform” yazı serisinin birinci bölümünde aşağıdaki konulardan bahsediyor olacağım.
- IaC nedir ?
- Terraform nedir ?
- Terraform kullanımının faydaları nelerdir ?
- Ansible vs Terraform
- Terraform nasıl kurulur ?
- Temel Terraform komutları nelerdir?
- Terraform Local File Resource Örneği
gibi sorulara cevap arıyor olacağız.
IaC
IaC, yani “Infrastructure as Code” (Kod Olarak Altyapı) prensibi, altyapı yönetimini geleneksel yöntemlerden (manuel olarak yapılandırmak, el ile kurulum yapmak vb.) uzaklaştıran bir yaklaşımdır. Bu prensip, yazılım geliştirme prensiplerini altyapı yönetimine uygulayarak, altyapıyı kod olarak tanımlama, yönetme ve dağıtma sürecini otomatikleştirir.
IaC, altyapının bir dizi tanım dosyası veya kod kümesi olarak ele alınmasını sağlar. Bu kod kümesi, altyapının hızlı bir şekilde kurulumunu sağlar ve ayrıca altyapı üzerinde yapılan değişiklikleri izleme ve yönetme işlemlerini de kolaylaştırır. Bu yaklaşım, süreçleri standartlaştırır ve hata yapma olasılığını azaltırken, tekrar kullanılabilirliği ve ölçeklenebilirliği artırır.
Terraform
Terraform, deklaratif bir dil kullanarak bulut altyapı kaynaklarını tanımlamanıza ve yönetmenize olanak tanıyan open source(açık kaynak) bir IaC aracıdır. Terraform ile Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP) gibi çeşitli bulut sağlayıcılarında altyapı kaynakları oluşturabilir, yönetebilir ve güncelleyebilirsiniz.
Terraform, kolay okunabilir ve yazılabilir olacak şekilde tasarlanmış bir deklaratif yapılandırma dili olan HashiCorp Yapılandırma Dili (HCL) kullanır. HCL dosyaları, altyapınızın istenen durumunu tanımlar ve Terraform bunları gerektiğinde kaynakları oluşturmak, değiştirmek veya yok etmek için kullanır.
Terraform Kullanmanın Faydaları
- Altyapı Yönetiminde Tutarlılık: Terraform, altyapı kaynaklarınızı kod olarak tanımlamanıza ve yönetmenize olanak tanır. Bu sayede, altyapınızın tutarlılığını sağlayabilirsiniz.
- Ölçeklenebilirlik: Terraform, altyapı kaynaklarınızın yönetimini otomatikleştirerek, altyapınızın ölçeklenmesini kolaylaştırır.
- Tek Bir Arayüz: Terraform, farklı bulut sağlayıcılarında(AWS, GCP, Microsoft Azure gibi) altyapı kaynaklarını yönetmenizi sağlar. Bu sayede, tek bir arayüz üzerinden farklı bulut sağlayıcılarını yönetebilirsiniz.
- Değişiklik Yönetimi: Terraform, altyapı kaynaklarınızın değişikliklerinin kontrol edilmesini sağlar. Bu sayede, altyapınızdaki değişikliklerin etkilerini önceden tahmin edebilir ve istenmeyen sonuçların önüne geçebilirsiniz.
- Tekrar Kullanılabilir Kaynaklar: Terraform, altyapı kaynaklarınızı yeniden kullanılabilir modüller halinde tanımlamanıza olanak tanır. Bu sayede, benzer altyapı kaynaklarını kolayca oluşturabilirsiniz.
Terraform vs Ansible
Terraform ve Ansible, ikisi de altyapı yönetimi için kullanılan popüler araçlardır. Ancak, iki araç arasında bazı farklılıklar aşağıdaki gibidir.
- Yönetilen Kaynak Türleri ve Kapsam: Terraform, özellikle altyapı kaynaklarını yönetmek için tasarlanmıştır. Bu, örneğin bir VPC, EC2 örneği, RDS veritabanı vb. gibi çeşitli kaynakları yönetebileceği anlamına gelir. Ansible ise, genellikle yapılandırma yönetimi, dağıtım ve otomasyon gibi görevleri gerçekleştirmek için kullanılır.
- Değişiklik Yönetimi : Terraform, sürekli altyapı değişiklikleri yönetmek için tasarlanmıştır. Yani, altyapı değişiklikleri için planlama ve uygulama süreçlerini sağlar. Ansible ise, daha çok sunucular üzerinde yapılandırma değişiklikleri yapmak için kullanılır.
- Süreklilik: Terraform altyapı kaynaklarınızın durumunu yönetmek için bir state(durum) dosyası kullanır. Ansible, bir kez çalıştırıldığında belirli bir hedef için bir yapılandırma sağlar ve sürekli olarak izleme veya değişikliklerin takibi için tasarlanmamıştır.
Terraform Kurulumu
Burada Terraformu Ubuntu işletim sistemi üzerine kuracağız. Sistemi güncellemek ve “gnupg”, “software-properties-common” ve “curl” paketlerinin kurmak için aşağıdaki komutu çalıştıralım.
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
Bir sonraki adım olarak Hashicorp GPG anahtarını kuralım.
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
Official Hashicorp Repository’i sisteme aşağıdaki komutla ekleyelim.
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
Paket bilgilerini HashiCorp’dan aşağıdaki komutla indirelim.
sudo apt update
Şimdi Terraformu yeni eklediğimiz repository’den aşağıdaki komutu çalıştırarak yükleyebiliriz.
sudo apt-get install terraform
Temel Terraform Komutları
- terraform init : Terraform projesini başlatır ve gereksinimleri yükler.
- terraform plan : Altyapı kaynaklarına ilişkin planı oluşturur. Bu komut, altyapı değişikliklerini gösterir ve bunların uygulanmasıyla nelerin değişeceğini önceden tahmin edebilmenizi sağlar.
- terraform apply : Planı uygular ve kaynakları oluşturur, günceller veya yok eder. Bu komut, değişikliklerinizi altyapınıza uygular.
- terraform destroy : Altyapı kaynaklarınızı yok eder.
- terraform validate : Terraform yapılandırma dosyalarını doğrular ve hataları rapor eder.
- terraform refresh : Mevcut altyapı kaynaklarınızın durumunu okur ve bunları Terraform state(durum) dosyasına yazarak kaynakların durumunu senkronize eder.
- terraform state: Terraform state(durum) dosyasını yönetmenize olanak tanır. Bu komut, altyapı kaynaklarınızın mevcut durumunu gösterir.
- terraform output: Terraform çıktılarını görüntüler.
Terraform Local File Resource Example
Bu örnekte Terraform kullanarak bir dosya yaratmayı deneyelim.
resource "local_file" "foo" {
content = "foo!"
filename = "${path.module}/foo.bar"
}
Yukarıdaki kod bloğunu “main.tf” adında bir file oluşturarak içine kopyalayalım. Daha sonra ilgili terraformun gereksinimleri indirmesi için “terraform init” komutunu çalıştıralım.
Gereksinimleri indirdikten sonra “terraform plan” komutunu çalıştırarak “execution plan”’a bir göz atalım. Burada terraform’un yapacağı işlemleri aşağıdaki gibi gözükecektir.
Dosyamızı oluşturmak için “terraform apply” komutunu çalıştırabiliriz. Terraform bize yine execution planı gösterecektir ve onay isteyecektir. Onay verdikden sonra ise dosyamızın oluşturulduğunu aşağıdaki gibi gözlemleyebiliriz.
Dosyamızın oluşturulduğunu yukarıda ki ekran görüntüsünde olduğu gibi gözlemleyebiliriz. Dosya içeriğini kontrol ettiğimizde ise aşağıdaki ekran görüntüsünde olduğu gibi “foo!” çıktısını görmemiz gerekiyor.
Bir sonraki yazımda ise terraform “resource”, “variable”, “count”, “foreach” yapılarından ve terraform state mekanizmasından bahsedeceğim. Ayrıca örnek olarak AWS üzerinde bir EC2 instance oluşturmaya çalışacağız.