Hızlı Başlangıç: AzAPI Terraform sağlayıcısıyla Azure kaynaklarını listeleme

Terraform , bulut altyapısının tanımlanmasını, önizlemesini ve dağıtımını sağlar. Terraform kullanarak HCL söz dizimlerini kullanarak yapılandırma dosyaları oluşturursunuz. HCL söz dizimi, Azure gibi bulut sağlayıcısını ve bulut altyapınızı oluşturan öğeleri belirtmenize olanak tanır. Yapılandırma dosyalarınızı oluşturduktan sonra, altyapı değişikliklerinizin dağıtılmadan önce önizlemesini görüntülemenizi sağlayan bir yürütme planı oluşturursunuz. Değişiklikleri doğruladıktan sonra, altyapıyı dağıtmak için yürütme planını uygularsınız.

Bu makalede, Azure kaynaklarını listelemek ve sonuçları azapi_resource_list ifadeleriyle filtrelemek için veri kaynağını kullanırsınız. İki depolama hesabı oluşturur ve ardından özelliklerini listelemek ve çıkarmak için azapi_resource_list kullanırsınız.

  • AzureRM sağlayıcısıyla bir kaynak grubu ve iki depolama hesabı oluşturma
  • JMESPath kullanarak depolama hesaplarını listelemek ve adlarını ve konumlarını ayıklamak için kullanın azapi_resource_list

Prerequisites

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

Azure portalında bir Microsoft hesabıyla oturum açtığınızda, bu hesabın varsayılan Azure aboneliği kullanılır.

Terraform, varsayılan Azure aboneliğindeki bilgileri kullanarak otomatik olarak kimlik doğrulaması yapar.

Geçerli Microsoft hesabını ve Azure aboneliğini doğrulamak için az account show komutunu çalıştırın.

az account show

Terraform aracılığıyla yaptığınız tüm değişiklikler, görüntülenen Azure aboneliğinde yer alır. İstediğiniz buysa, bu makalenin geri kalanını atlayın.

Anlamak response_export_values

özniteliği, response_export_values API yanıtından ayıklanan ve veri kaynağının output özniteliğinde kullanılabilir duruma gelen özellikleri denetler. Liste veya harita kabul eder:

  • Liste: Ayıklanması gereken JSON yollarını belirtir. Tam yanıt gövdesini dışarı aktarmak için kullanın ["*"] .
  • Harita: Yanıtı filtrelemek ve yeniden şekillendirmek için JMESPath ifadelerini kullanır. Anahtar, sonucun adı ve değer JMESPath ifadesidir.

Daha temiz ve daha kullanılabilir çıkış değerleri ürettiğinden, belirli alanları ayıklamanız veya liste yanıtlarını dönüştürmeniz gerektiğinde harita formu tercih edilir.

Terraform kodunu uygulama

  1. Örnek Terraform kodunu test etmek için bir dizin oluşturun ve bu dizini geçerli dizin olarak ayarlayın.

  2. providers.tf adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. variables.tf adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random value to create a unique name."
    }
    
  4. main.tf adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "random_string" "storage_suffix" {
      length  = 8
      upper   = false
      special = false
    }
    
    resource "azurerm_resource_group" "example" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "azurerm_storage_account" "example" {
      count                    = 2
      name                     = "st${random_string.storage_suffix.result}${count.index}"
      resource_group_name      = azurerm_resource_group.example.name
      location                 = azurerm_resource_group.example.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    

Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.

terraform init -upgrade

Önemli noktalar:

  • -upgrade parametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.

Terraform planını çalıştırarak yürütme planı oluşturun.

terraform plan -out main.tfplan

Önemli noktalar:

  • terraform plan komutu bir yürütme planı oluşturur, ancak onu 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 düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle 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. -out parametresinin kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.

Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.

terraform apply main.tfplan

Önemli noktalar:

  • Örnek terraform apply komutu, daha önce terraform plan -out main.tfplan komutunu çalıştırdığınızı varsayar.
  • -out parametresi için farklı bir dosya adı belirttiyseniz, terraform applyçağrısında aynı dosya adını kullanın.
  • parametresini -out kullanmadıysanız, parametresiz olarak çağırın terraform apply .

Kaynakları listele azapi_resource_list

Depolama hesapları oluşturulduğuna göre, bunları listelemek için bir veri kaynağı ekleyin ve JMESPath kullanarak özellikleri ayıklayın.

  1. list_resources.tf adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    data "azapi_resource_list" "storage_accounts" {
      type      = "Microsoft.Storage/storageAccounts@2023-01-01"
      parent_id = azurerm_resource_group.example.id
    
      # Use JMESPath expressions to extract specific fields from the response.
      # The API returns a list of resources in a top-level "value" array.
      response_export_values = {
        "names"     = "value[].name"
        "locations" = "value[].location"
        "skus"      = "value[].sku.name"
      }
    }
    
  2. outputs.tf adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "storage_account_names" {
      value = data.azapi_resource_list.storage_accounts.output.names
    }
    
    output "storage_account_locations" {
      value = data.azapi_resource_list.storage_accounts.output.locations
    }
    
    output "storage_account_skus" {
      value = data.azapi_resource_list.storage_accounts.output.skus
    }
    
  3. Veri kaynağını oluşturmak ve çıkışları ayıklamak için yeniden çalıştırın terraform apply :

    terraform apply
    

Hakkında önemli noktalar azapi_resource_list

  • Alanı, type listelenecek kaynak türünü ve API sürümünü tanımlar.
  • Alan parent_id kapsamı ayarlar: kaynak grubu içinde listelemek için bir kaynak grubu kimliği, abonelik genelinde listelemek için bir abonelik kimliği veya alt kaynakları listelemek için bir üst kaynak kimliği (örneğin, bir sanal ağın altındaki alt ağlar).
  • eşleme biçimi response_export_values , ham API yanıtına karşı JMESPath ifadelerini kullanır. Depolama hesabı listesi API'sinin sonuçları en üst düzey value dizide döndürüldüğünden, ifadeler value[] ile başlar.

Farklı kapsamlarda kaynakları listeleme

Listeleme kapsamını parent_id belirler. Examples:

# List all storage accounts in a subscription
data "azapi_resource_list" "all_storage" {
  type      = "Microsoft.Storage/storageAccounts@2023-01-01"
  parent_id = "/subscriptions/${var.subscription_id}"
  response_export_values = {
    "names" = "value[].name"
  }
}

# List subnets in a virtual network (child resource listing)
data "azapi_resource_list" "subnets" {
  type      = "Microsoft.Network/virtualNetworks/subnets@2023-11-01"
  parent_id = azurerm_virtual_network.example.id
  response_export_values = ["*"]
}

Kaynakları temizle

Terraform aracılığıyla oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:

  1. terraform plan komutunu çalıştırın ve destroy bayrağını belirleyin.

    terraform plan -destroy -out main.destroy.tfplan
    

    Önemli noktalar:

    • terraform plan komutu bir yürütme planı oluşturur, ancak onu 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 düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle 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. -out parametresinin kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
  2. Yürütme planını uygulamak için terraform apply komutunu çalıştırın.

    terraform apply main.destroy.tfplan
    

Azure'da Terraform sorunlarını giderme

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

Sonraki Adımlar