AZURE ÜZERİNDE TERRAFORM İLE ALT YAPI GELİŞTİRME – BÖLÜM 6 : DEĞİŞKENLER

Azure üzerinde Terraform ile Altyapı Geliştirme makale serisine hoş geldiniz. Yazı dizisinin altıncı bölümünde, Terraform kodunda değişkenlerin kullanımına bakacağız. Değişkenler, Terraform geliştirmenin kritik bir bileşenidir. Değişkenlerle yapılandırmaları dinamik ve yeniden kullanılabilir hale getirebilirsiniz. Örneğin, Terraform kodunuzdaki değişkenleri kullanarak bir Azure Sanal Makinesi oluşturduğunuzda, aynı kodu başka bir ortama dağıtmak için kolayca kullanabilirsiniz. Bu strateji, ekiplerinizin hızını ve verimliliğini artırır. Vakit kaybetmeden bir örnekte değişkenlerin kullanımına bir göz atalım.

  • Daha önce olduğu gibi, bu örnekte VS Code kullanıyorum. VS Kodunda değişken.tf adlı bir dosya oluşturun. Bu dosya, adı gösterildiği gibi değişkenleri içerecektir. Aşağıdaki kodu bu dosyaya yapıştırabilirsiniz.
variable "location" {
    type = string
    description = "Azure location of terraform server environment"
    default = "northeurope"

}

variable "vnet_address_space" { 
    type = list
    description = "Address space for Virtual Network"
    default = ["30.0.0.0/16"]
}

variable "snet_address_space" { 
    type = list
    description = "Address space for Virtual Network"
    default = ["30.0.0.0/24"]
}
  • Örneğimizde, bir Azure Kaynak Grubu içinde bir Sanal Ağ ve Alt Ağ oluşturacağız. Kodun ileride tekrar kullanılabilmesi için vnet/alt ağ adresleri ve lokasyon için değişkenler tanımlanmıştır.
    • “variable” anahtar sözcüğünden sonraki etiket, aynı modüldeki tüm değişkenler arasında benzersiz olması gereken değişkenin adıdır. (konum, vnet_address_space, snet_address_space) Bu ad, değişkene dışarıdan bir değer atamak ve değişkenin değerine modül içinden referans vermek için kullanılır.
    • “Type” argümanı, değişken için hangi değer türlerinin kabul edildiğini belirtir.
    • Değişkeni isteğe bağlı yapan bir “default” değer.
    • “Description”, giriş değişkeninin belgelerini belirtir.
  • Aynı dizinde bir main.tf dosyası oluşturun ve aşağıdaki kodu bu dosyaya yapıştırabilirsiniz.
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "2.40.0"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_virtual_network" "vnet" {
    name                = "vnet-dev-${var.location}-001"
    address_space       = var.vnet_address_space
    location            = var.location
    resource_group_name = "demo03"
}

resource "azurerm_subnet" "subnet" {
  name                 = "snet-dev-${var.location}-001 "
  resource_group_name  = "demo03"
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes       = var.snet_address_space
}
  • Değişkenlere “var” kullanılarak başvurulur. ve değişken adı ile birleştirilir. “azurerm_virtual_network” bloğunun içinde, “address_space” bağımsız değişkeni, değeri için “var.vnet_address_space” değişkenine başvuruyor. Ayrıca, “name” bağımsız değişkeninde adın, “var.location” değişkeniyle enterpolasyon yapılan bir dize olduğuna dikkat edin. Değişken adının bir dizge içinde kullanılabilmesi için ${} ile çevrelenmesi gerekir.
  • Şimdi var’able.tf ve main.tf dosyalarını kaydedin ve Terminal’i VS Kodunda çalıştırın. Buradan Connect-AzAccount komutuyla Azure aboneliğinizde oturum açın.
  • Terraform yapılandırma dosyalarını içeren çalışma dizinini “Terraform init” komutuyla başlatın.
  • “Terraform Apply” komutuyla terraform yapılandırma dosyalarınızı dağıtın. Değişkenleri ayrıca aşağıda gösterildiği gibi terraform application komutunda da kullanabilirsiniz. Burada kullanacağınız değişkenlerin,variable.tf dosyasındaki değişkenlere göre önceliğe sahip olduğunu unutmayın.
terraform apply -var='vnet_address_space=["20.0.0.0/16"]' -var='snet_address_space=["20.0.0.0/24"]' -var="location=westeurope"

Değişkenlerdeki yeni türlere bir göz atalım. “Map” tipi, değerleri saklamak için kullanılacak bir anahtar-değer çifti değişken tipidir. “Object” türü, farklı türlerdeki birkaç değeri bir araya getirmek için kullanılır. Aşağıdaki örnekte “Map” ve “Object” türlerinin değişkenlerde nasıl kullanıldığını görebilirsiniz. Ayrıca, aşağıdaki kodu variable.tf dosyanıza yapıştırın.

variable "servername" {
    type = string
    description = "Server name of the virtual machine"
}

variable "admin_username" {
    type = string
    description = "Administrator username for server"
}

variable "admin_password" {
    type = string
    description = "Administrator password for server"
}

variable "managed_disk_type" { 
    type = map
    description = "Disk type Premium in Primary location Standard in DR location"

    default = {
        northeurope = "Premium_LRS"
        westeurope = "Standard_LRS"
    }
}

variable "vm_size" {
    type = string
    description = "Size of VM"
    default = "Standard_D2s_V3"
}

variable "os" {
    description = "OS image to deploy"
    type = object({
        publisher = string
        offer = string
        sku = string
        version = string
  })
}

Bundan sonra “main.tf” dosyanıza aşağıdaki kodu ekleyin. “Managed_disk_type” bağımsız değişkeni, yapılandırmaya koşullu mantık ekleyen bir “lookup” işleviyle birlikte kullanılır. İşlev ifadesi, options.tf içindeki “managed_disk_type” değişkenine bakar ve değeri “location” değişkenindeki değerle eşleştirir. Yani “var.location” “northeurope” değerini içeriyorsa, “northeurope” anahtarının altındaki “managed_disk_type” değişken haritasında bulunan Premium_LRS disk tipini otomatik olarak kullanacaktır.

resource "azurerm_virtual_machine" "vm" {
  name                  = var.servername
  location              = var.location
  resource_group_name   = "demo03"
  network_interface_ids = [azurerm_network_interface.nic.id]
  vm_size               = "Standard_D2s_v3"

  storage_os_disk {
    name              = "stvm${var.servername}os"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = lookup(var.managed_disk_type, var.location, "Standard_LRS")
  }

  storage_image_reference {
    publisher = var.os.publisher
    offer     = var.os.offer
    sku       = var.os.sku
    version   = var.os.version
  }

  os_profile {
    computer_name  = var.servername
    admin_username = var.admin_username
    admin_password = var.admin_password
  }

  os_profile_linux_config {
    disable_password_authentication = false
  }
}

Bazı değişkenlerin variable.tf dosyasında değerleri olmadığını unutmayın. Örneğin sunucuadı, admin_username, admin_password vb. Değişkenler için değerler kullanılmıyorsa, Terraform dizinde otomatik olarak bir terraform.tfvars arayacak ve bulunursa, değişkenler için bu dosyadaki değerleri kullanacaktır. Bu, her değer için -var kullanmak zorunda kalmamanın harika bir yoludur. Ancak, hassas değişken bilgilerinin yalnızca -var ile kullanılması ve “terraform.tfvars” dosyasına yazılmaması önemlidir. Şimdi bir terraform.tfvars dosyası oluşturun ve aşağıdakini yapıştırın.

servername = "vmdemo03"
location = "northeurope"
admin_username = "dcoadmin"
admin_password = "D€VCL0ud0ps"
vnet_address_space = ["30.0.0.0/16"]
os = {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "16.04.0-LTS"
    version   = "latest"
}

Artık “terraform apply” komutu ile dağıtımı gerçekleştirebilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.