Terraform AzAPI 提供者概觀

AzAPI 提供者是 Azure ARM REST API 之上的精簡層。 AzAPI 提供者可讓您使用任何 API 版本來管理任何 Azure 資源類型。 此提供者藉由啟用新的 Azure 資源和屬性的管理來補充 AzureRM 提供者(包括私人預覽)。

資源

若要讓您管理所有 Azure 資源和功能,而不需要更新,AzAPI 提供者包含下列一般資源:

資源名稱 描述
azapi_resource 用來使用完整 CRUD 完全管理任何 Azure(控制平面)資源(API)。
   範例使用案例:
      新的預覽服務
      新增至現有服務的新功能
      目前未涵蓋的現有功能/服務
azapi_update_resource 用來管理沒有完整 CRUD 的資源或部分資源
   範例使用案例:
      更新現有服務上的新屬性
      更新預先建立的子資源 - 例如 DNS SOA 記錄。

資源組態範例

下列代碼段會設定 AzureRM 提供者中目前不存在的資源:

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

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

下列代碼段會從 AzureRM 設定現有資源的預覽屬性:

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

  body = jsonencode({
    properties = {
      anonymousPullEnabled = var.bool_anonymous_pull
    }
  })
}

使用 AzAPI 提供者進行驗證

AzAPI 提供者會啟用與 AzureRM 提供者相同的驗證方法。 如需驗證選項的詳細資訊,請參閱 向 Azure 驗證 Terraform。

使用 AzAPI 提供者的優點

AzAPI 提供者具有下列優點:

  • 支援所有 Azure 服務:
    • 私人預覽服務和功能
    • 公開預覽服務和功能
    • 所有 API 版本
  • 完整 Terraform 狀態檔案逼真度
    • 屬性和值會儲存至狀態
  • 不相依於 Swagger
  • 一般且一致的 Azure 驗證

AzAPI 提供者的體驗和生命週期

本節說明一些可協助您使用 AzAPI 提供者的工具。

VS Code 延伸模組和語言伺服器

AzAPI VS Code 擴充功能提供豐富的撰寫體驗,具有下列優點:

  • Intellisense
  • 自動完成程序代碼
  • 提示
  • 語法驗證
  • 快速諮詢

AzAPI2AzureRM 移轉工具

AzureRM 提供者提供最整合的 Terraform 體驗來管理 Azure 資源。 因此,建議使用 AzAPI 和 AzureRM 提供者,如下所示:

  1. 當服務或功能處於預覽狀態時,請使用 AzAPI 提供者。
  2. 正式發行服務之後,請使用 AzureRM 提供者。

AzAPI2AzureRM 工具旨在協助從 AzAPI 提供者移轉至 AzureRM 提供者。

AzAPI2AzureRM 是開放原始碼工具,可將 AzAPI 資源轉換為 AzureRM 資源的程式自動化。

AzAPI2AzureRM 有兩種模式:規劃和移轉:

  • 方案會顯示可移轉的 AzAPI 資源。
  • 將 AzAPI 資源移轉至 HCL 檔案和狀態中的 AzureRM 資源。

AzAPI2AzureRM 可確保移轉後的 Terraform 組態和狀態會與您的實際狀態一致。 您可以在完成移轉之後執行 terraform plan 來驗證狀態已更新,以查看沒有任何變更。

使用 AzAPI 提供者

  1. 安裝 VS Code 擴充功能

  2. 將 AzAPI 提供者新增至您的 Terraform 組態。

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
        }
      }
    }
    
    provider "azapi" {
      # More information on the authentication methods supported by
      # the AzureRM Provider can be found here:
      # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
    
      # subscription_id = "..."
      # client_id       = "..."
      # client_secret   = "..."
      # tenant_id       = "..."
    }
    
  3. 宣告一或多個 AzAPI 資源,如下列範例程式代碼所示:

    resource "azapi_resource" "example" {
      name = "example"
      parent_id = data.azurerm_machine_learning_workspace.existing.id
      type = "Microsoft.MachineLearningServices/workspaces/computes@2021-07-01"
    
      location = "eastus"
      body = jsonencode({
        properties = {
          computeType      = "ComputeInstance"
          disableLocalAuth = true
          properties = {
            vmSize = "STANDARD_NC6"
          }
        }
      })
    }
    
    

下一步