Terrayform ve HCL ile Azure VM kümesi oluşturma

Bu makalede, HCLkullanarak küçük bir işlem kümesi oluşturmayı göreceksiniz.

Bu makalede şunları öğreneceksiniz:

  • Azure kimlik doğrulamasını ayarlayın.
  • Bir Terrayform yapılandırma dosyası oluşturun.
  • Bir yük dengeleyici oluşturmak için bir Terrayform yapılandırma dosyası kullanın.
  • Bir kullanılabilirlik kümesinde iki Linux VM dağıtmak için bir Terrayform yapılandırma dosyası kullanın.
  • Terraform'u başlatın.
  • Terrayform yürütme planı oluşturun.
  • Azure kaynaklarını oluşturmak için Terrayform yürütme planını uygulayın.

1. ortamınızı yapılandırın

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

2. kodu uygulayın

  1. Örnek Terüform kodunu test etmek ve geçerli dizin yapmak için bir dizin oluşturun.

     terraform {
    
       required_version = ">=0.12"
    
       required_providers {
         azurerm = {
           source = "hashicorp/azurerm"
           version = "~>2.0"
         }
       }
     }
    
     provider "azurerm" {
       features {}
     }
    
     resource "azurerm_resource_group" "test" {
       name     = "acctestrg"
       location = "West US 2"
     }
    
     resource "azurerm_virtual_network" "test" {
       name                = "acctvn"
       address_space       = ["10.0.0.0/16"]
       location            = azurerm_resource_group.test.location
       resource_group_name = azurerm_resource_group.test.name
     }
    
     resource "azurerm_subnet" "test" {
       name                 = "acctsub"
       resource_group_name  = azurerm_resource_group.test.name
       virtual_network_name = azurerm_virtual_network.test.name
       address_prefixes     = ["10.0.2.0/24"]
     }
    
     resource "azurerm_public_ip" "test" {
       name                         = "publicIPForLB"
       location                     = azurerm_resource_group.test.location
       resource_group_name          = azurerm_resource_group.test.name
       allocation_method            = "Static"
     }
    
     resource "azurerm_lb" "test" {
       name                = "loadBalancer"
       location            = azurerm_resource_group.test.location
       resource_group_name = azurerm_resource_group.test.name
    
       frontend_ip_configuration {
         name                 = "publicIPAddress"
         public_ip_address_id = azurerm_public_ip.test.id
       }
     }
    
     resource "azurerm_lb_backend_address_pool" "test" {
       loadbalancer_id     = azurerm_lb.test.id
       name                = "BackEndAddressPool"
     }
    
     resource "azurerm_network_interface" "test" {
       count               = 2
       name                = "acctni${count.index}"
       location            = azurerm_resource_group.test.location
       resource_group_name = azurerm_resource_group.test.name
    
       ip_configuration {
         name                          = "testConfiguration"
         subnet_id                     = azurerm_subnet.test.id
         private_ip_address_allocation = "dynamic"
       }
     }
    
     resource "azurerm_managed_disk" "test" {
       count                = 2
       name                 = "datadisk_existing_${count.index}"
       location             = azurerm_resource_group.test.location
       resource_group_name  = azurerm_resource_group.test.name
       storage_account_type = "Standard_LRS"
       create_option        = "Empty"
       disk_size_gb         = "1023"
     }
    
     resource "azurerm_availability_set" "avset" {
       name                         = "avset"
       location                     = azurerm_resource_group.test.location
       resource_group_name          = azurerm_resource_group.test.name
       platform_fault_domain_count  = 2
       platform_update_domain_count = 2
       managed                      = true
     }
    
     resource "azurerm_virtual_machine" "test" {
       count                 = 2
       name                  = "acctvm${count.index}"
       location              = azurerm_resource_group.test.location
       availability_set_id   = azurerm_availability_set.avset.id
       resource_group_name   = azurerm_resource_group.test.name
       network_interface_ids = [element(azurerm_network_interface.test.*.id, count.index)]
       vm_size               = "Standard_DS1_v2"
    
       # Uncomment this line to delete the OS disk automatically when deleting the VM
       # delete_os_disk_on_termination = true
    
       # Uncomment this line to delete the data disks automatically when deleting the VM
       # delete_data_disks_on_termination = true
    
       storage_image_reference {
         publisher = "Canonical"
         offer     = "UbuntuServer"
         sku       = "16.04-LTS"
         version   = "latest"
       }
    
       storage_os_disk {
         name              = "myosdisk${count.index}"
         caching           = "ReadWrite"
         create_option     = "FromImage"
         managed_disk_type = "Standard_LRS"
       }
    
       # Optional data disks
       storage_data_disk {
         name              = "datadisk_new_${count.index}"
         managed_disk_type = "Standard_LRS"
         create_option     = "Empty"
         lun               = 0
         disk_size_gb      = "1023"
       }
    
       storage_data_disk {
         name            = element(azurerm_managed_disk.test.*.name, count.index)
         managed_disk_id = element(azurerm_managed_disk.test.*.id, count.index)
         create_option   = "Attach"
         lun             = 1
         disk_size_gb    = element(azurerm_managed_disk.test.*.disk_size_gb, count.index)
       }
    
       os_profile {
         computer_name  = "hostname"
         admin_username = "testadmin"
         admin_password = "Password1234!"
       }
    
       os_profile_linux_config {
         disable_password_authentication = false
       }
    
       tags = {
         environment = "staging"
       }
     }
    

3. Terrayform 'u başlatma

Terrayform dağıtımını başlatmak için terrayform init ' i çalıştırın.

terraform init

Anahtar noktaları:

  • Bu komut, Azure Kaynak grubu oluşturmak için gereken Azure modüllerini indirir.

4. bir Terrayform yürütme planı oluşturma

Bir yürütme planı oluşturmak için terrayform planını çalıştırın.

terraform plan -out main.tfplan

Anahtar noktaları:

  • terraform planKomut bir yürütme planı oluşturur, ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu model, gerçek kaynaklarda herhangi bir değişiklik yapmadan önce yürütme planının beklentilerinizi eşleşip eşleşmediğini doğrulamanızı sağlar.
  • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. Parametresinin kullanılması, -out gözden geçirdiğiniz planın tam olarak uygulanmış olmasını sağlar.
  • Kalıcı yürütme planları ve güvenlik hakkında daha fazla bilgi edinmek için güvenlik uyarısı bölümünebakın.

5. Teraform yürütme planı uygulama

Yürütme planını bulut altyapınıza uygulamak için terrayform uygulamasını çalıştırın.

terraform apply main.tfplan

Anahtar noktaları:

  • terraform applyYukarıdaki komutu daha önce çalıştırdığınız varsayılır terraform plan -out main.tfplan .
  • Parametresi için farklı bir dosya adı belirttiyseniz -out , çağrısında aynı dosya adını kullanın terraform apply .
  • -outParametresini kullanmıyorsanız, yalnızca terraform apply herhangi bir parametre olmadan çağrı yapmanız yeterlidir.

6. sonuçları doğrulayın

Kaynak grubunda oluşturulan VM 'Leri göstermek için az VM List komutunu bir jmespath sorgusuyla çalıştırın.

az vm list -g acctestrg --query "[].{\"VM Name\":name}" -o table

7. Kaynakları Temizleme

Terrayform ile oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:

  1. Terrayform planını çalıştırın ve bayrağını belirtin .

    terraform plan -destroy -out main.destroy.tfplan
    

    Anahtar noktaları:

    • terraform planKomut bir yürütme planı oluşturur, ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu model, gerçek kaynaklarda herhangi bir değişiklik yapmadan önce yürütme planının beklentilerinizi eşleşip eşleşmediğini doğrulamanızı sağlar.
    • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. Parametresinin kullanılması, -out gözden geçirdiğiniz planın tam olarak uygulanmış olmasını sağlar.
    • Kalıcı yürütme planları ve güvenlik hakkında daha fazla bilgi edinmek için güvenlik uyarısı bölümünebakın.
  2. Yürütme planını uygulamak için terrayform Uygula ' yı çalıştırın.

    terraform apply main.destroy.tfplan
    

Azure 'da Terrampaform sorunlarını giderme

Azure 'da Terrampaform kullanırken karşılaşılan yaygın sorunları giderme

Sonraki adımlar