大多數Azure資源透過 Azure Resource Manager(ARM)控制平面管理——一個位於 management.azure.com 的單一統一 API 表面。
azapi_resource、azapi_update_resource、和azapi_resource_action資源類型都鎖定這個控制平面。
部分 Azure 服務會提供獨立的 資料平面 API——一個服務專屬的 HTTPS 端點,讓使用者可以直接與服務互動,而無需透過 ARM。 例如{vaultName}.vault.azure.net的金鑰保存庫秘密API、{searchServiceName}.search.windows.net的Azure AI 搜尋服務索引API,以及{workspaceName}.dev.azuresynapse.net的Synapse工作區管線API。
azapi_data_plane_resource 透過啟用 Terraform 使用相同的 AzAPI 提供者認證與生命週期模型,以管理這些資料平面端點上的資源,來填補這個差距。
為什麼只支援經過精選的資源類型
與可針對任何 ARM 資源類型的 azapi_resource 不同,azapi_data_plane_resource 僅能支援 特定的註冊資源類型清單。
此限制存在是因為資料平面可擴充性需要在 AzAPI 提供者的資料平面框架中明確註冊。 該框架必須知道:
- 服務的基底端點模式(例如,
{vaultName}.vault.azure.net) - 每種支援資源類型的 REST 路徑(例如
/secrets/{secret-name}) - 如何驗證這個端點(有些服務需要服務專屬的令牌受眾,而非預設的 ARM 受眾
https://management.azure.com)
每個註冊的資源類型都會將這種映射加入框架中。 未註冊的資源類型無法透過 來鎖定 azapi_data_plane_resource,因為提供者無法判斷正確的端點或認證範圍。
Tip
如果你需要的資料平面資源類型不支援,你可以在 terraform-provider-azapi GitHub 倉庫 中開啟問題或貢獻註冊。
資料平面資源的運作方式parent_id
對於控制平面資源(azapi_resource),parent_id 總是 ARM 資源 ID,呈現為一個路徑格式 /subscriptions/{sub}/resourceGroups/{rg}/providers/{namespace}/{type}/{name}。
對於資料平面資源,parent_id 是 服務的資料平面主機名稱,但已去除該 https:// 協定和任何後方斜線。 此端點通常是建立後在 ARM 控制平面資源中暴露的屬性。
模式依服務而異:
| Service | ARM 輸出特性 |
parent_id 模式 |
|---|---|---|
| 金鑰保存庫 | properties.vaultUri |
{vaultName}.vault.azure.net |
| Azure 應用程式組態 | properties.endpoint |
{storeName}.azconfig.io |
| Azure AI 搜尋服務 | (由名稱構成) | {searchServiceName}.search.windows.net |
| Synapse 工作區 | connectivityEndpoints.dev |
{workspaceName}.dev.azuresynapse.net |
| IoT Central 應用程式 | properties.subdomain |
{appSubdomain}.azureiotcentral.com |
| Microsoft Purview | (由名稱構成) | {accountName}.purview.azure.com |
從 ARM 輸出中擷取parent_id
使用response_export_values在父 ARM 資源中擷取資料平面端點,然後用trimprefix或replace剝離該協定:
resource "azurerm_key_vault" "example" {
# ... configuration
}
resource "azapi_data_plane_resource" "secret" {
type = "Microsoft.KeyVault/vaults/secrets@7.4"
# Strip "https://" and the trailing "/" from the vault URI
parent_id = trimsuffix(trimprefix(azurerm_key_vault.example.vault_uri, "https://"), "/")
name = "my-secret"
body = {
value = var.secret_value
attributes = { enabled = true }
}
}
當使用 azapi_resource 來建立父節點而非 AzureRM 時,請使用 response_export_values 來擷取端點:
resource "azapi_resource" "app_config" {
type = "Microsoft.AppConfiguration/configurationStores@2023-03-01"
name = "my-store"
parent_id = azapi_resource.resource_group.id
location = "eastus"
body = { sku = { name = "standard" } }
response_export_values = {
endpoint = "properties.endpoint"
}
}
resource "azapi_data_plane_resource" "key_value" {
type = "Microsoft.AppConfiguration/configurationStores/keyValues@1.0"
parent_id = replace(azapi_resource.app_config.output.endpoint, "https://", "")
name = "mykey"
body = { value = "myvalue", content_type = "" }
}
對於端點源自資源名稱而非 URI 屬性的服務,請直接構造:
resource "azurerm_search_service" "example" {
name = "my-search"
# ... configuration
}
resource "azapi_data_plane_resource" "index" {
type = "Microsoft.Search/searchServices/indexes@2024-07-01"
parent_id = "${azurerm_search_service.example.name}.search.windows.net"
name = "my-index"
body = { fields = [ /* ... */ ] }
}
資料平面端點的認證
AzAPI 提供者則透明地處理認證。 它使用您在 provider "azapi" 區塊中配置的相同憑證(Azure CLI、服務主體、受管身份或 OpenID Connect (OIDC)),但會自動請求針對每個服務的資料平面受眾的權杖,而非 ARM 受眾的權杖。
例如,金鑰保存庫資料平面操作所需的標記受眾為 https://vault.azure.net,而非 https://management.azure.com。 AzAPI 提供者會根據註冊端點為每種資源類型選擇正確的受眾。
作為實務工作者,你不需要改變設定方式。 服務適用標準的角色基礎存取控制(RBAC)權限——例如,金鑰保存庫 Secrets Officer 管理 金鑰保存庫 機密,或 App Configuration Data Owner 管理應用程式設定金鑰值。
Note
對於某些服務(例如 Azure 應用程式組態 和 Azure AI 搜尋服務),呼叫者必須有適當的資料平面角色指派,而不只是控制平面擁有者的角色。 在套用使用 azapi_data_plane_resource. 的配置前,請確保執行 Terraform 的身份擁有正確的資料平面角色基礎存取控制(RBAC)指派。
匯入資源 ID 格式
資料平面資源 ID 使用與 ARM 資源 ID 不同的格式。 匯入現有資料平面資源時,請使用以下格式 {parent_id}/{path}|{resource-type}@{api-version}:
import {
to = azapi_data_plane_resource.example
id = "exampleappconf.azconfig.io/kv/mykey|Microsoft.AppConfiguration/configurationStores/keyValues@1.0"
}
或者用:terraform import
terraform import azapi_data_plane_resource.example 'exampleappconf.azconfig.io/kv/mykey|Microsoft.AppConfiguration/configurationStores/keyValues@1.0'
支援的資料平面服務
AzAPI 提供者目前支援 azapi_data_plane_resource 以下服務的資源類型:
- Azure 應用程式組態—鍵值
- Azure AI Foundry—代理人
- Azure 裝置更新—群組、部署
- Azure Digital Twins—數位孿生、關係、事件路徑、匯入工作
- Azure IoT Central—組織、使用者、排程工作、API 令牌、儀表板、裝置群組、裝置範本、裝置、註冊群組、資料匯出、部署清單
- Azure Key Vault—憑證聯絡人、憑證發行者、金鑰、秘密、儲存帳號、SAS 定義
- Microsoft Purview—收藏、資源集規則設定、金鑰庫、分類規則、憑證、資料來源、掃描、掃描觸發器、整合執行時、受管理的私有端點、工作流程
- Azure AI 搜尋服務—資料來源、索引器、索引器、技能集、同義映射
- Azure Synapse Analytics—資料庫、資料流、資料集、Kusto 查詢語言(KQL)腳本、函式庫、連結連接、連結服務、受管理私有端點、筆記本、管線、角色指派、Spark 工作定義、Spark 設定、SQL 腳本、觸發器
完整清單及 API 版本與端點模式,請參閱 Terraform 登錄檔中的 available resources reference。