Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,你可以用 HCL 語法建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立組態檔之後,您會建立一個 執行計劃 ,讓您在部署基礎結構變更之前先預覽這些變更。 驗證變更之後,您可以套用執行計畫來部署基礎結構。
AzAPI Terraform 提供者內建的預先檢查驗證功能,會在 terraform plan 期間,在 Azure 建立或修改任何資源前,驗證你的 Azure 資源配置是否符合 ARM API 架構。 預檢檢查能及早發現配置錯誤——例如無效的位址前綴、不支援的屬性組合或配額違規——且不會產生部署失敗的成本。
檢查前驗證是 AzAPI 的主要差異化點之一,並原生支援供應商的直達ARM-API 架構。 你也可以直接從 Microsoft Terraform VS Code 擴充檔執行預檢查,而不必直接設定提供者旗標。
先決條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
設定 Terraform:如果您尚未這麼做,請使用下列其中一個選項來設定 Terraform:
當您使用Microsoft帳戶登入 Azure 入口網站時,會使用該帳戶的預設 Azure 訂用帳戶。
Terraform 會自動使用預設 Azure 訂用帳戶中的資訊進行驗證。
執行 az account show 以確認目前的Microsoft帳戶和 Azure 訂用帳戶。
az account show
您透過 Terraform 所做的任何變更都會顯示在顯示的 Azure 訂用帳戶上。 如果是您想要的,請略過本文的其餘部分。
啟用預檢驗驗證
將 enable_preflight = true 設定在 provider "azapi" 區塊中:
provider "azapi" {
enable_preflight = true
}
預先檢查預設為關閉以保留向後相容性。 在您希望進行早期驗證的環境中啟用,例如CI管線與拉取請求檢查。
範例:在規劃時發現無效地址前綴
以下配置會建立一個虛擬網路,其 CIDR 區塊為無效的無類別域間路由。 啟用預檢後,錯誤會在 terraform plan 而不是在 terraform apply 發生。
terraform {
required_providers {
azapi = {
source = "Azure/azapi"
version = "~> 2.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
provider "azapi" {
enable_preflight = true
}
resource "azurerm_resource_group" "example" {
name = "rg-preflight-demo"
location = "eastus"
}
resource "azapi_resource" "vnet" {
type = "Microsoft.Network/virtualNetworks@2024-01-01"
parent_id = azurerm_resource_group.example.id
name = "vnet-example"
location = "eastus"
body = {
properties = {
addressSpace = {
addressPrefixes = [
"10.0.0.0/160" # Invalid prefix length — preflight catches this at plan time
]
}
}
}
}
當你使用此配置執行 terraform plan 時,預檢程序會回傳類似的錯誤:
Error: preflight validation failed for resource "azapi_resource.vnet":
The value '10.0.0.0/160' is not a valid CIDR block.
將位址前綴修正為有效值(例如, 10.0.0.0/16)即可清除錯誤。
什麼是印前驗證
預檢會將資源體傳送至 ARM API 的預檢端點,進行驗證:
- 屬性值與 ARM 資源架構相符(例如有效的 CIDR(無類別 Inter-Domain 路由)範圍、允許的 SKU 名稱、必填欄位)。
- 訂閱層級配額與支援資源類型的容量限制。
- 針對以預檢測試模式執行的 Azure 原則 指派的政策合規性。
預檢未執行驗證:
- 跨資源相依或序列。
- 這些資源沒有 ARM 預檢端點支援(提供者會默默跳過這些資源類型的驗證)。
- 認證或授權(身份與存取管理(IAM))失敗,這些失敗會在
terraform apply期間出現。
在CI流程中使用預檢查
在 CI 管線中加入預檢查,提供快速且無損的驗證步驟,能在程式碼合併前捕捉配置錯誤。 在你的 Terraform 設定中的提供者區塊啟用 enable_preflight = true ,然後執行 terraform plan:
provider "azapi" {
enable_preflight = true
}
因為預檢在 terraform plan 期間執行且沒有副作用,所以在 pull request 工作流程中對現用 Azure 訂閱是安全的。
禁用輸出噪聲用ignore_no_op_changes
如果你重複執行計畫,AzAPI 可能會偵測到設定與 ARM 狀態之間的細微 no-op 差異(例如,API 回傳的標準化預設值)。 為了抑制這些計畫時間差異並專注於實際變更,請在提供者區塊中設定 ignore_no_op_changes = true :
provider "azapi" {
enable_preflight = true
ignore_no_op_changes = true
}