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"
}
}
}
Şimdi variables.tf isminde bir dosya oluşturuyoruz ve içine aşağıdaki şekilde dolduruyoruz.
variable "container_image" {
type = string
}
Ardından ilk örnekte statik olan değeri aşağıdaki şekilde dinamik yapıyoruz.
spec {
container {
image = var.container_image
name = "web"
}
}
}
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.
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
}
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
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
}
}
}
}
}
Ardından variables.tf dosyamızın içerisine tanımlamak istediğimiz değişkenleri yazıyoruz.
variable "cpu_resource" {
}
variable "ram_resource" {
}
Şimdi stage.tfvars içerisine aşağıdaki değerleri yazıyoruz.
cpu_resource = "0.3"
ram_resource = "250Mi"
prod.tfvarsa içerisine de aşağıdaki değerleri yazıyoruz.
cpu_resource = "0.75"
ram_resourece = "1024Mi"
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
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)