Aracılığıyla paylaş


Terraform AzAPI sağlayıcısına genel bakış

AzAPI sağlayıcısı, Azure ARM REST API'lerinin üzerinde ince bir katmandır. Herhangi bir API sürümünü kullanarak herhangi bir Azure kaynak türünü yönetmenize olanak tanıyarak Azure'da en son işlevleri kullanmanıza olanak tanır. AzAPI, kendi başına veya AzureRM sağlayıcısıyla birlikte kullanılmak üzere tasarlanmış birinci sınıf bir sağlayıcıdır.

AzAPI sağlayıcısını kullanmanın avantajları

AzAPI sağlayıcısı aşağıdaki avantajları sunar:

  • Tüm Azure denetim düzlemi hizmetlerini destekler:
    • Önizleme hizmetleri ve özellikleri
    • Tüm API sürümleri
  • Tam Terraform durum dosyası uygunluğu
    • Özellikler ve değerler duruma kaydedilir
  • Swagger bağımlılığı yok
  • Yaygın ve tutarlı Azure kimlik doğrulaması
  • Yerleşik ön kontrol doğrulaması
  • Altyapı geliştirme üzerinde ayrıntılı denetim
  • Sağlam VS Code Uzantısı

Kaynaklar

Güncelleştirme gerektirmeden tüm Azure kaynaklarını ve özelliklerini yönetmenize olanak sağlamak için AzAPI sağlayıcısı aşağıdaki genel kaynakları içerir:

Kaynak Adı Açıklama
azapi_resource Tüm Azure (denetim düzlemi) kaynaklarını (API) tam CRUD ile tam olarak yönetmek için kullanılır.
   Örnek Kullanım Örnekleri:
      Yeni önizleme hizmeti
      Mevcut hizmete yeni özellik eklendi
      Şu anda kapsanmayan mevcut özellik / hizmet
azapi_update_resource Tam CRUD'a sahip olmayan kaynakları veya kaynakların bölümlerini yönetmek için kullanılır
   Örnek Kullanım Örnekleri:
      Mevcut bir hizmette yeni özellikleri güncelleştirme
      DNS SOA kaydı gibi önceden oluşturulmuş alt kaynağı güncelleştirin.
azapi_resource_action Bir kaynak üzerinde yaşam döngüsünü yönetmeden tek bir işlem gerçekleştirmek için kullanılır
   Örnek Kullanım Örnekleri:
      Sanal Makineyi Kapatma
      Key Vault'a bir gizli eklemek
azapi_data_plane_resource Azure veri düzlemi kaynaklarının belirli bir alt kümesini yönetmek için kullanılır
   Örnek Kullanım Örnekleri:
      KeyVault Sertifika İrtibatları
      Synapse Çalışma Alanı Kitaplıkları

Kullanım hiyerarşisi

Genel olarak, kullanım şu adımları izlemelidir:

  1. Her zaman, azapi_resource içinde mümkün olduğu kadar çok işlem gerçekleştirerek başlamanız tavsiye edilir.
  2. Kaynak türü azapi_resource içinde mevcut değilse ancak azapi_data_plane_resource tarafından desteklenen türlerden birine giriyorsa, bunun yerine o türü kullanın.
  3. Kaynak AzureRM'de zaten varsa veya azapi_resource içinde erişilemeyen bir özelliği varsa, bu özelliklere erişmek için azapi_update_resource kullanın. azapi_resource veya azapi_data_plane_resource tarafından desteklenmeyen kaynaklar bu kaynak aracılığıyla güncellenemez.
  4. Azure CRUD dostu bir kaynağı temel almayan bir eylem gerçekleştirmeye çalışıyorsanız, azapi_resource_action kadar basit değil, ama azapi_update_resource'den daha esnektir.

Kaynak yapılandırma örnekleri

Aşağıdaki kod parçacığı şu anda AzureRM sağlayıcısında mevcut olmayan bir kaynağı yapılandırıyor:

resource "azapi_resource" "publicip" {
  type      = "Microsoft.Network/Customipprefixes@2021-03-01"
  name      = "exfullrange"
  parent_id = azurerm_resource_group.example.id
  location  = "westus2"

  body = {
    properties = {
      cidr          = "10.0.0.0/24"
      signedMessage = "Sample Message for WAN"
    }
  }
}

Aşağıdaki kod parçacığı, AzureRM'den var olan bir kaynak için önizleme özelliğini yapılandırmaktadır:

resource "azapi_update_resource" "test" {
  type        = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
  resource_id = azurerm_container_registry.acr.id

  body = {
    properties = {
      anonymousPullEnabled = var.bool_anonymous_pull
    }
  }
}

Aşağıdaki kod parçacığı, mevcut bir AzureRM kaynağında bir kaynak eylemi yapılandırıyor:

resource "azapi_resource_action" "vm_shutdown" {
  type = "Microsoft.Compute/virtualMachines@2023-07-01"
  resource_id = azurerm_linux_virtual_machine.example.id
  action = "powerOff”
}

Aşağıdaki kod parçacığı, veri düzleminde sağlandığı için şu anda AzureRM sağlayıcısında mevcut olmayan bir kaynağı yapılandırıyor:

resource "azapi_data_plane_resource" "dataset" {
  type      = "Microsoft.Synapse/workspaces/datasets@2020-12-01"
  parent_id = trimprefix(data.azurerm_synapse_workspace.example.connectivity_endpoints.dev, "https://")
  name      = "example-dataset"
  body = {
    properties = {
      type = "AzureBlob",
      typeProperties = {
        folderPath = {
          value = "@dataset().MyFolderPath"
          type  = "Expression"
        }
        fileName = {
          value = "@dataset().MyFileName"
          type  = "Expression"
        }
        format = {
          type = "TextFormat"
        }
      }
      parameters = {
        MyFolderPath = {
          type = "String"
        }
        MyFileName = {
          type = "String"
        }
      }
    }
  }
}

Uçuş öncesi kullanım örneği

AzAPI'nin yerleşik denetim öncesi doğrulaması nedeniyle aşağıdaki kod parçacığı, terraform plan sırasında hatalara neden oluyor.

provider "azapi" {
  enable_preflight = true
}
resource "azapi_resource" "vnet" {
  type      = "Microsoft.Network/virtualNetworks@2024-01-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "example-vnet"
  location  = "westus"
  body = {
    properties = {
      addressSpace = {
        addressPrefixes = [
          "10.0.0.0/160", # preflight will throw an error here
        ]
      }
    }
  }
}

Ön Kontrol, sağlayıcı bayrağının arkasında gizlidir ancak plan aşamasında hata bulunmasına yardımcı olur.

Veri Kaynakları

AzAPI sağlayıcısı çeşitli yararlı veri kaynaklarını destekler:

Veri Kaynağı Adı Açıklama
azapi_resource Herhangi bir Azure (denetim düzlemi) kaynağından (API) bilgi okumak için kullanılır.
   Örnek Kullanım Örnekleri:
      Yeni önizleme hizmeti
      Mevcut hizmete yeni özellik eklendi
      Şu anda kapsanmayan mevcut özellik / hizmet
azapi_client_config Abonelik kimliği ve kiracı kimliği gibi istemci bilgilerine erişin.
azapi_resource_action Bir kaynakta yaşam döngüsünü yönetmeden tek bir okuma işlemi gerçekleştirmek için kullanılır
   Örnek Kullanım Örnekleri:
      Liste Anahtarları
      VM'nin durumunu okuma
azapi_data_plane_resource Azure veri düzlemi kaynaklarının belirli bir alt kümesine erişmek için kullanılır
   Örnek Kullanım Örnekleri:
      KeyVault Sertifika Kişileri
      Synapse Çalışma Alanı Kitaplıkları
azapi_resource_id Bir kaynağın kaynak kimliğine erişerek abonelik kimliği, üst kimlik, kaynak grubu adı ve kaynak adı gibi bilgileri çıkartma yeteneğine sahipsiniz.
azapi_resource_list Belirli bir üst kaynak kimliği altındaki tüm kaynakları listeleyin.
   Örnek Kullanım Örnekleri:
      Abonelik/ kaynak grubu altındaki kaynaklar
      Sanal ağ altındaki alt ağlar

AzAPI sağlayıcısını kullanarak kimlik doğrulaması

AzAPI sağlayıcısı, AzureRM sağlayıcısıyla aynı kimlik doğrulama yöntemlerini etkinleştirir. Kimlik doğrulama seçenekleri hakkında daha fazla bilgi için bkz . Terraform'un Azure'da kimliğini doğrulama.

AzAPI sağlayıcısının deneyimi ve yaşam döngüsü

Bu bölümde, AzAPI sağlayıcısını kullanmanıza yardımcı olacak bazı araçlar açıklanmaktadır.

VS Code uzantısı ve Dil Sunucusu

AzAPI VS Code uzantısı, aşağıdaki avantajlarla zengin bir yazma deneyimi sağlar:

  • Kullanılabilir tüm kaynak türlerini ve API sürümlerini listeleyin. Tüm kullanılabilir kaynak türlerini listeleme
  • Herhangi bir kaynak için izin verilen özelliklerin ve değerlerin otomatik olarak tamamlanması. İzin verilen özellikleri listeleme
  • Bir özelliğin üzerine gelindiğinde ipuçlarını gösterin. Bir özelliğin üzerine gelindiğinde ipucunu göster
  • Söz dizimi doğrulama Söz dizimi doğrulama
  • Kod örnekleriyle otomatik tamamlama. Kod örnekleriyle otomatik tamamlama

aztfmigrate geçiş aracı

aztfmigrate aracı, mevcut kaynakları AzAPI ve AzureRM sağlayıcıları arasında geçirmeye yardımcı olmak için tasarlanmıştır.

aztfmigrate iki modu mevcuttur: planlama ve geçiş.

  • Plan, geçirilebilen AzAPI kaynaklarını görüntüler.
  • AzAPI kaynaklarını, hem HCL dosyalarında hem de durum bilgisinde AzureRM kaynaklarına geçirir.

aztfmigrate, geçiş sonrasında Terraform yapılandırmanızın ve durumunuzun gerçek durumunuzla uyumlu olmasını sağlar. Hiçbir şeyin değişmediğini görmek için geçişi tamamladıktan sonra çalıştırarak terraform plan durum güncelleştirmesini doğrulayabilirsiniz.

Altyapı üzerinde ayrıntılı kontroller

AzAPI'nin en önemli avantajlarından biri, yapılandırmanızı doğru tasarım desenlerine uyacak şekilde hassas bir şekilde ayarlama özelliğidir. Bunu yapmanın birkaç yolu vardır:

Sağlayıcı işlevleri

AzAPI (v2.0 ve daha yeni sürümler) çok sayıda sağlayıcı işlevi içerir:

İşlev Adı Açıklama
build_resource_id Verilen üst kimlik, kaynak türü ve kaynak adına göre bir Azure kaynak kimliği oluşturur.
Belirli bir kapsamda üst düzey ve iç içe yerleştirilmiş kaynaklar için kaynak kimlikleri oluşturmak için kullanışlıdır.
extension_resource_id Verilen temel kaynak kimliği, kaynak türü ve ek kaynak adlarına göre bir Azure uzantısı kaynak kimliği oluşturur.
management_group_resource_id Azure yönetim grubu adı, kaynak türü ve kaynak adları verilerek bir yönetim grubu kapsamı kaynak kimliği oluşturur.
parse_resource_id Bu işlev bir Azure kaynak kimliğini ve kaynak türünü alır ve kimliği abonelik kimliği, kaynak grubu adı, sağlayıcı ad alanı ve diğer bölümler gibi tek tek bileşenlerine ayrıştırır.
resource_group_resource_id Verilen abonelik kimliği, kaynak grubu adı, kaynak türü ve kaynak isimleri ile bir Azure kaynak grubu kapsamı kaynak kimliği oluşturur.
subscription_resource_id Abonelik kimliği, kaynak türü ve kaynak adları verilen bir Azure abonelik kapsamı kaynak kimliği oluşturur.
tenant_resource_id Kaynak türü ve kaynak adlarına göre bir Azure kiracı kapsamı kaynak kimliği oluşturur.

retry bloğu ile kullanıcı tanımlı yeniden işlenebilir hatalar

AzAPI sağlayıcısı, retry bloğundan beklenen hataları sindirebilir. Örneğin, bir kaynak oluşturma zaman aşımı sorunuyla karşılaşabilirse aşağıdaki kod bloğu yardımcı olabilir:

resource "azapi_resource" "example" {
    # usual properties
    retry {
        interval_seconds     = 5
        randomization_factor = 0.5 # adds randomization to retry pattern
        multiplier           = 2 # if try fails, multiplies time between next try by this much
        error_message_regex  = ["ResourceNotFound"]
    }
    timeouts {
        create = "10m"
}

Kaynak değiştirme tetikleyicileri

AzAPI sağlayıcısı, kaynak değişimi için parametreleri yapılandırmanıza olanak tanır:

replace_triggers_external_values

Bir değer değişirse kaynağı değiştirir. Örneğin, SKU veya bölge değişkenleri değiştirilecekse, bu kaynak yeniden oluşturulur:

resource "azapi_resource" "example" {
  name      = var.name
  type      = "Microsoft.Network/publicIPAddresses@2023-11-01"
  parent_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example"
  body      = properties = {
    sku   = var.sku
    zones = var.zones
  }
  replace_triggers_external_values = [
    var.sku,
    var.zones,
  ]
}

Bu, tanımın özellikleri değiştiğinde ilke ataması gibi geniş bir kaynak kümesinde çalışabilir.

replace_triggers_refs

Başvuruda bulunan değer değişirse kaynağın yerini alır. Örneğin, SKU adı veya katmanı değiştirilmişse bu kaynak yeniden oluşturulur:

resource "azapi_resource" "example" {
  type      = "Microsoft.Relay/namespaces@2021-11-01"
  parent_id = azurerm_resource_group.example.id
  name      = "xxx"
  location  = "westus"
  body = {
    properties = {
    }
    sku = {
      name = "Standard"
      tier = "Standard"
    }
  }

  replace_triggers_refs = ["sku"]
}

Farklı bir kaynağın SKU'su değiştirilseydi bu bir değiştirme tetiklemezdi.

Sonraki adımlar