Terraform ile Azure’da Linux Sanal Makine Oluşturma

Terraform, Azure’da komple altyapı dağıtımları tanımlamanıza ve oluşturmanıza olanak sağlar. Terraform şablonlarını, Azure kaynaklarını tutarlı ve yeniden üretilebilir bir şekilde oluşturan ve yapılandıran, okunabilir bir biçimde oluşturabilirsiniz. Bu makale size eksiksiz bir Linux ortamı yaratmanın ve Terraform ile kaynakları desteklemenin nasıl olacağını göstermeye çalışağım.

Daha önceki makalede Terraform’u Azure ortamınız için nasıl yapılandırabileceğinize değinmiştim. http://www.msazureturkey.com/azure-altyapilari-saglamak-icin-terraform-kurulumu/

Ubuntu 16.04-LTS imajına sahip Linux sanal makinesini oluşturmak için aşağıdaki Terraform şablonunu kullanabilirsiniz.

provider "azurerm" {
    subscription_id = "xxxxxxx-xxxxx-xxxxx-xxxxx-xxxxxx"
    client_id       = "xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxx"
    client_secret   = "xxxxxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
    tenant_id       = "xxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
}

# Mevcut değilse bir kaynak grubu oluşturma
resource "azurerm_resource_group" "onderterraformgroup" {
    name     = "OnderRG"
    location = "northeurope"

    tags {
        environment = "Terraform Demo"
    }
}

#Virtual network oluşturma
resource "azurerm_virtual_network" "onderterraformnetwork" {
    name                = "OnderVnet"
    address_space       = ["10.0.0.0/16"]
    location            = "eastus"
    resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"

    tags {
        environment = "Terraform Demo"
    }
}

#  Subnet oluştuma
resource "azurerm_subnet" "onderterraformsubnet" {
    name                 = "OnderSubnet"
    resource_group_name  = "${azurerm_resource_group.onderterraformgroup.name}"
    virtual_network_name = "${azurerm_virtual_network.onderterraformnetwork.name}"
    address_prefix       = "10.0.1.0/24"
}

# Public IPs oluştuma
resource "azurerm_public_ip" "onderterraformpublicip" {
    name                         = "OnderPublicIP"
    location                     = "northeurope"
    resource_group_name          = "${azurerm_resource_group.onderterraformgroup.name}"
    allocation_method            = "dynamic"

    tags {
        environment = "Terraform Demo"
    }
}

# Network Security Group ve kural oluştuma
resource "azurerm_network_security_group" "onderterraformnsg" {
    name                = "OnderNetworkSecurityGroup"
    location            = "northeurope"
    resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"

    security_rule {
        name                       = "SSH"
        priority                   = 1001
        direction                  = "Inbound"
        access                     = "Allow"
        protocol                   = "Tcp"
        source_port_range          = "*"
        destination_port_range     = "22"
        source_address_prefix      = "*"
        destination_address_prefix = "*"
    }

    tags {
        environment = "Terraform Demo"
    }
}

# Network interface oluştuma
resource "azurerm_network_interface" "onderterraformnic" {
    name                      = "OnderNIC"
    location                  = "northeurope"
    resource_group_name       = "${azurerm_resource_group.onderterraformgroup.name}"
    network_security_group_id = "${azurerm_network_security_group.onderterraformnsg.id}"

    ip_configuration {
        name                          = "OnderNicConfiguration"
        subnet_id                     = "${azurerm_subnet.onderterraformsubnet.id}"
        private_ip_address_allocation = "dynamic"
        public_ip_address_id          = "${azurerm_public_ip.onderterraformpublicip.id}"
    }

    tags {
        environment = "Terraform Demo"
    }
}

# Benzersiz bir depolama hesabı adı için rasgele metin oluşturma
resource "random_id" "randomId" {
    keepers = {
        # Yalnızca yeni bir kaynak grubu tanımlandığında yeni bir kimlik oluşturma
        resource_group = "${azurerm_resource_group.onderterraformgroup.name}"
    }

    byte_length = 8
}

#  Boot için depolama hesabı oluşturma
resource "azurerm_storage_account" "onderstorageaccount" {
    name                        = "diag${random_id.randomId.hex}"
    resource_group_name         = "${azurerm_resource_group.onderterraformgroup.name}"
    location                    = "northeurope"
    account_tier                = "Standard"
    account_replication_type    = "LRS"

    tags {
        environment = "Terraform Demo"
    }
}

# VM Oluşturma
resource "azurerm_virtual_machine" "onderterraformvm" {
    name                  = "OnderVM"
    location              = "northeurope"
    resource_group_name   = "${azurerm_resource_group.onderterraformgroup.name}"
    network_interface_ids = ["${azurerm_network_interface.onderterraformnic.id}"]
    vm_size               = "Standard_DS1_v2"

    storage_os_disk {
        name              = "OnderOsDisk"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Premium_LRS"
    }

    storage_image_reference {
        publisher = "Canonical"
        offer     = "UbuntuServer"
        sku       = "16.04.0-LTS"
        version   = "latest"
    }

    os_profile {
        computer_name  = "ondervm"
        admin_username = "adminonder"
    }

    os_profile_linux_config {
        disable_password_authentication = true
        ssh_keys {
            path     = "/home/adminonder/.ssh/authorized_keys"
            key_data = "ssh-rsa AAAAB3Nz{snip}hwhqT9h"
        }
    }

    boot_diagnostics {
        enabled = "true"
        storage_uri = "${azurerm_storage_account.onderstorageaccount.primary_blob_endpoint}"
    }

    tags {
        environment = "Terraform Demo"
    }
}

Dosyayı kaydedin ve sonra Terraform dağıtımını başlatabilirsiniz.Aşağıdaki adım, bir Azure kaynak grubu oluşturmak için gereken Azure modüllerini indirir.

terraform init

Bir sonraki adım Terraform’un şablonu incelemesi ve doğrulamasıdır. Bu adım, istenen kaynakları Terraform tarafından kaydedilen durum bilgileriyle karşılaştırır ve ardından planlanan yürütmeyi çıkarır.

terraform plan

Her şey doğru görünüyorsa ve altyapıyı Azure’da oluşturmaya hazırsanız, şablonu Terraform’da uygulayabilirsiniz.

terraform apply

Facebooktwitterredditpinterestlinkedinmailby feather

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.