快速入門:使用 Terraform 建立 Azure APIM 執行個體

適用於:開發人員 |標準 |進階版

本文示範如何使用 Terraform,在 Azure 上建立 APIM 執行個體。 您也可以使用 Terraform 來執行常見的管理工作,例如,在 APIM 執行個體中匯入 API。

Azure APIM 可協助組織將 API 發佈給外部、合作夥伴及內部開發人員,以發揮其資料與服務的潛力。 「API 管理」提供的核心專長認證,透過開發人員參與、商務洞察力、分析、安全性和保護,可確保 API 程式獲致成功。 透過 APIM,為裝載於任何位置的現有後端服務,建立和管理新式 API 閘道。

Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,您可以使用 HCL 語法來建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立設定檔之後,您可以建立執行計畫,讓您先預覽基礎結構變更,之後再部署。 驗證變更之後,您可以套用執行計畫來部署基礎結構。

在本文中,您將學會如何:

必要條件

實作 Terraform 程式碼

注意

本文中的範例程式碼位於 Azure Terraform GitHub 存放庫 (英文)。 您可以檢視記錄檔,內含目前和舊版 Terraform 的測試結果 (英文)。

請參閱更多文章和範例程式碼,其中顯示如何使用 Terraform 來管理 Azure 資源

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

  2. 建立名為 main.tf 的檔案,並插入下列程式碼:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_string" "azurerm_api_management_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_api_management" "api" {
      name                = "apiservice${random_string.azurerm_api_management_name.result}"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      publisher_email     = var.publisher_email
      publisher_name      = var.publisher_name
      sku_name            = "${var.sku}_${var.sku_count}"
    }
    
  3. 建立名為 outputs.tf 的檔案,並插入下列程式碼:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "api_management_service_name" {
      value = azurerm_api_management.api.name
    }
    
  4. 建立名為 providers.tf 的檔案,並插入下列程式碼:

    terraform {
      required_version = ">=1.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
  5. 建立名為 variables.tf 的檔案,並插入下列程式碼:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location for all resources."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "publisher_email" {
      default     = "test@contoso.com"
      description = "The email address of the owner of the service"
      type        = string
      validation {
        condition     = length(var.publisher_email) > 0
        error_message = "The publisher_email must contain at least one character."
      }
    }
    
    variable "publisher_name" {
      default     = "publisher"
      description = "The name of the owner of the service"
      type        = string
      validation {
        condition     = length(var.publisher_name) > 0
        error_message = "The publisher_name must contain at least one character."
      }
    }
    
    variable "sku" {
      description = "The pricing tier of this API Management service"
      default     = "Developer"
      type        = string
      validation {
        condition     = contains(["Developer", "Standard", "Premium"], var.sku)
        error_message = "The sku must be one of the following: Developer, Standard, Premium."
      }
    }
    
    variable "sku_count" {
      description = "The instance size of this API Management service."
      default     = 1
      type        = number
      validation {
        condition     = contains([1, 2], var.sku_count)
        error_message = "The sku_count must be one of the following: 1, 2."
      }
    }
    

初始化 Terraform

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

terraform init -upgrade

重點︰

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

建立 Terraform 執行計畫

執行 terraform plan 以建立執行計畫。

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,不需要使用參數。

驗證結果

  1. 取得 Azure 資源群組名稱。

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. 取得服務名稱。

    api_management_service_name=$(terraform output -raw api_management_service_name)
    
  3. 執行 az apim show 以顯示新服務的相關資訊。

    az apim show --resource-group $resource_group_name \
                 --name $api_management_service_name
    

清除資源

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

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

    terraform plan -destroy -out main.destroy.tfplan
    

    重點︰

    • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
    • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。
  2. 執行 terraform apply 以套用執行方案。

    terraform apply main.destroy.tfplan
    

對 Azure 上的 Terraform 進行疑難排解

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

下一步