DEV Community

Suleyman
Suleyman

Posted on • Edited on

Terraform Variables

Merhaba,

Bu makalede en yaygın Infrastructure as code (IaC) uygulamalarından olan terraform üzerinde değişkenkler (variables) kullanımını göreceğiz. Değişkenler yapılandırmalarınızı daha dinamik ve yeniden kullanılabilir hale getirmek için kullanabileceğiniz değerler için yer tutuculardır.

Örneğin; aşağıdaki image'mizi manuel olarak vermişiz. Ama istersek bunu çalıştırdığımızda değişkenden alabiliriz. Bu sayede statik değilde dinamik olarak istenilen image'yi kullanabiliriz. Main.tf dosyamızın içine aşağıdaki resource yi yazıyoruz.

resource "kubernetes_pod" "firstpod" {
  metadata {
    name = "terraform-web"
  }

  spec {
    container {
      image = nginx
      name  = "web"
    }
   }
}

Enter fullscreen mode Exit fullscreen mode

Şimdi variables.tf isminde bir dosya oluşturuyoruz ve içine aşağıdaki şekilde dolduruyoruz.

variable  "container_image" {
    type = string    

}
Enter fullscreen mode Exit fullscreen mode

Ardından ilk örnekte statik olan değeri aşağıdaki şekilde dinamik yapıyoruz.

  spec {
    container {
      image = var.container_image
      name  = "web"
    }
   }
}
Enter fullscreen mode Exit fullscreen mode

Terraform apply yaptığımızda bu sefer bize kullanacağımız image yi soracaktır. Bu sayede daha dinamik bir yapı oluşturabiliriz. Bu değişkenlerin en basit kullanım örnektedir.

Image description

Variables.tf içerisindeki değişkenin içerisine "default" parametresini ekleyerek, eğer biz farklı bir değişken kullanmayacaksak belirtilen değer ile çalıştıracaktır ama istenilirse farklı bir değer belirtilebilir.

variable  "container_image" {
    type = string    
    default = nginx
}
Enter fullscreen mode Exit fullscreen mode

Aşağıdaki şekilde çalıştırdığımızda image olarak httpd yi kullanacaktır ama "terraform apply" şeklinde kullanırsak varsayılan nginx imagesini kullanacaktır.

terraform apply -var=container_image=httpd
Enter fullscreen mode Exit fullscreen mode

Basit kullanımı bu şekilde fakat birden fazla ortam ortaya çıkmaya başladığında daha yönetilebilir bir şekilde değişkenleri kullanmamız gerekiyor. tfvars dosyaları ile bunu gerçekleştirebiliriz. variables.tf dosyasında içinde değişkenleri tanımlarken .tfvars dosyaları içerisinde de bu değişkenlerin tanımı gerçekleştiriyoruz.

Örneğin; stage ve prod ortamlarınız var ve bu iki ortam için aynı değişkenler kullanılıyor fakat farklı tanımlar kullanabiliriz. Mesela bu ortamlarda ki podların CPU ve RAM limiti birbirinden farklı olabilir. Bu şekilde bir örnek vereceğiz.

Öncelikle main.tf dosyamızın içerisine tanımlamalarımızı yapmamız gerekmektedir.

  spec {
    container {
      image = var.container_image
      name  = "web"
      resources {
        limits = {
          cpu    = var.cpu_resource
          memory = var.ram_resource
       }
     }
   }
 }
}

Enter fullscreen mode Exit fullscreen mode

Ardından variables.tf dosyamızın içerisine tanımlamak istediğimiz değişkenleri yazıyoruz.

variable "cpu_resource" {
}

variable "ram_resource" {
}
Enter fullscreen mode Exit fullscreen mode

Şimdi stage.tfvars içerisine aşağıdaki değerleri yazıyoruz.

cpu_resource = "0.3"
ram_resource = "250Mi"
Enter fullscreen mode Exit fullscreen mode

prod.tfvarsa içerisine de aşağıdaki değerleri yazıyoruz.

cpu_resource = "0.75"
ram_resourece = "1024Mi"
Enter fullscreen mode Exit fullscreen mode

Bu sayede tek bir farklı ortamlar için podlarımıza farklı resourcelar tanımladık. Stage için kullanmak istiyorsak aşağıdaki şekilde kullanmamız gerekmektedir. plan ve apply komutlarını çalıştırırken kullanılacak .tfvars dosyasını belirtmeliyiz.

terraform plan -var-file=stage.tfvars
terraform apply -var-file=stage.tfvars
Enter fullscreen mode Exit fullscreen mode

Basit olarak variables.tf ve .tfvars dosyalarının kullanımı bu şekildeydi. Bir sonraki makalede terraform output kullanımına değineceğiz.

Herkese iyi günler.

Top comments (0)