快速入門:使用 AzAPI Terraform 提供程式部署第一個 Azure 更新資源

使用下列 Terraform 和 Terraform 提供者版本進行測試的文章:

Terraform 允許對雲端基礎結構進行定義、預覽和部署。 使用 Terraform,您可以使用 HCL 語法建立組態檔。 HCL 語法可讓您指定雲端提供者,例如 Azure,以及構成雲端基礎結構的專案。 建立組態檔之後,您會建立一個 執行計劃 ,讓您在部署基礎結構變更之前先預覽這些變更。 驗證變更之後,您會套用執行計劃來部署基礎結構。

使用 AzAPI Terraform provider來管理尚未被 AzureRM 支援的Azure服務新功能。 在這個例子中,你會使用 azapi_update_resource 來設定Azure 事件中樞網路規則。

  • 用 AzureRM 建立 Event Hubs 命名空間和規則
  • 使用 AzAPI 更新命名空間並應用網路規則
  • 為事件中心命名空間生成隨機名稱
  • 使用 AzureRM 提供程式創建 Azure 資源組以及所需的網路和事件中心資源
  • 使用 AzAPI 提供程式向資源添加網路規則集azurerm_eventhub_namespace

備註

本文中的範例程式代碼位於 Azure Terraform GitHub 存放庫中。

先決條件

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。

當您使用Microsoft帳戶登入 Azure 入口網站時,會使用該帳戶的預設 Azure 訂用帳戶。

Terraform 會自動使用預設 Azure 訂用帳戶中的資訊進行驗證。

執行 az account show 以確認目前的Microsoft帳戶和 Azure 訂用帳戶。

az account show

您透過 Terraform 所做的任何變更都會顯示在顯示的 Azure 訂用帳戶上。 如果是您想要的,請略過本文的其餘部分。

實作 Terraform 程式碼

  1. 建立目錄,然後在目錄中測試範例 Terraform 程式碼,並將其設為目前的目錄。

  2. 建立名為 providers.tf 的檔案,並插入下列程序代碼:

    terraform {
      required_providers {
        azapi = {
          source  = "azure/azapi"
          version = "=0.1.0"
        }
    
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "=3.0.2"
        }
    
        random = {
          source  = "hashicorp/random"
          version = "=3.1.2"
        }
      }
    }
    
    provider "azapi" {
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "random" {
    }
    
  3. 建立名為 main.tf 的檔案,並插入下列程序代碼:

    resource "azurerm_resource_group" "qs101" {
      name     = "rg-qs101-eh-rules"
      location = "westus2"
    }
    
    resource "azurerm_virtual_network" "qs101" {
      name                = "myvnet"
      location            = azurerm_resource_group.qs101.location
      resource_group_name = azurerm_resource_group.qs101.name
      address_space       = ["172.17.0.0/16"]
      dns_servers         = ["10.0.0.4", "10.0.0.5"]
    }
    
    resource "azurerm_subnet" "qs101" {
      name                 = "default"
      resource_group_name  = azurerm_resource_group.qs101.name
      virtual_network_name = azurerm_virtual_network.qs101.name
      address_prefixes     = ["172.17.0.0/24"]
    
      service_endpoints = ["Microsoft.EventHub"]
    }
    
    resource "random_pet" "qs101_namespace" {
      length    = 3
      separator = ""
    }
    
    resource "azurerm_eventhub_namespace" "qs101" {
      name                = random_pet.qs101_namespace.id
      location            = azurerm_resource_group.qs101.location
      resource_group_name = azurerm_resource_group.qs101.name
      sku                 = "Standard"
      capacity            = 2
    }
    
  4. 建立名為 main-generic.tf 的檔案,並插入下列程序代碼:

    # AzAPI update resource is used to enable Network Rule sets on Event Hub namespace
    resource "azapi_update_resource" "qs101" {
      type      = "Microsoft.EventHub/namespaces/networkRuleSets@2021-11-01"
      name      = "default"
      parent_id = azurerm_eventhub_namespace.qs101.id
    
      body = jsonencode({
        properties = {
          defaultAction       = "Deny"
          publicNetworkAccess = "Enabled"
          virtualNetworkRules = [
            {
              ignoreMissingVnetServiceEndpoint = false
              subnet = {
                # API bug, returned id replaced `resourceGroups` with `resourcegroups`
                id = replace(azurerm_subnet.qs101.id, "resourceGroups", "resourcegroups")
              }
            }
          ]
          ipRules = [
            {
              action = "Allow"
              ipMask = "1.1.1.1"
            }
          ]
        }
      })
    }
    

初始化 Terraform

執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。

terraform init -upgrade

重點:

  • -upgrade 參數會將必要的提供者外掛程式升級至符合組態版本條件約束的最新版本。

建立 Terraform 執行計劃

執行 terraform 計劃 以建立執行計劃。

terraform plan -out main.tfplan

重點:

  • terraform plan 命令會建立執行計劃,但不會執行它。 然而,它會決定哪些動作是必要的,以建立您組態檔中所指定的設定。 此模式可讓您在對實際資源進行任何變更之前,先確認執行計劃是否符合您的預期。
  • 選擇性 -out 參數可讓您指定計劃的輸出檔。 使用 -out 參數可確保您查看的計劃確切地被套用。

套用 Terraform 執行計劃

執行terraform apply指令將執行計劃套用至您的雲端基礎設施。

terraform apply main.tfplan

重點:

  • 範例 terraform apply 命令假設您先前已執行 terraform plan -out main.tfplan。
  • 如果您為 -out 參數指定了不同的檔案名,請在呼叫 terraform apply時使用相同的檔案名。
  • 如果您未使用 -out 參數,請呼叫沒有任何參數的 terraform apply。

確認結果

運行 az eventhubs namespace network-rule-set show 以顯示事件中心命名空間網路規則。

az eventhubs namespace network-rule show --resource-group <resource_group_name> --namespace-name <namespace_name>

重點:

  • 資源組名稱和事件中心命名空間名稱將顯示在輸出中 terraform apply 。

清理資源

當您不再需要透過 Terraform 建立的資源時,請執行下列步驟:

  1. 執行 terraform 計劃 並指定 destroy 旗標。

    terraform plan -destroy -out main.destroy.tfplan
    

    重點:

    • terraform plan 命令會建立執行計劃,但不會執行它。 然而,它會決定哪些動作是必要的,以建立您組態檔中所指定的設定。 此模式可讓您在對實際資源進行任何變更之前,先確認執行計劃是否符合您的預期。
    • 選擇性 -out 參數可讓您指定計劃的輸出檔。 使用 -out 參數可確保您查看的計劃確切地被套用。
  2. 執行 terraform apply 來應用執行計劃。

    terraform apply main.destroy.tfplan
    

排除 Azure 上 Terraform 的故障

針對在 Azure 上使用 Terraform 時的常見問題進行疑難解答

後續步驟