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:
- Her zaman,
azapi_resource
içinde mümkün olduğu kadar çok işlem gerçekleştirerek başlamanız tavsiye edilir. - Kaynak türü
azapi_resource
içinde mevcut değilse ancakazapi_data_plane_resource
tarafından desteklenen türlerden birine giriyorsa, bunun yerine o türü kullanın. - Kaynak AzureRM'de zaten varsa veya
azapi_resource
içinde erişilemeyen bir özelliği varsa, bu özelliklere erişmek içinazapi_update_resource
kullanın.azapi_resource
veyaazapi_data_plane_resource
tarafından desteklenmeyen kaynaklar bu kaynak aracılığıyla güncellenemez. - Azure CRUD dostu bir kaynağı temel almayan bir eylem gerçekleştirmeye çalışıyorsanız,
azapi_resource_action
kadar basit değil, amaazapi_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.
- Herhangi bir kaynak için izin verilen özelliklerin ve değerlerin otomatik olarak tamamlanması.
- Bir özelliğin üzerine gelindiğinde ipuçlarını gösterin.
- Söz dizimi doğrulama
- 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.