Aktivera preflight-validering i AzAPI Terraform-leverantören

Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du genomförandeplanen för att implementera infrastrukturen.

AzAPI Terraform-providern innehåller inbyggd preflight-validering som verifierar din Azure resurskonfiguration mot ARM API-schemat under terraform plan innan några resurser skapas eller ändras i Azure. Preflight fångar konfigurationsfel tidigt, till exempel ogiltiga adressprefix, egenskapskombinationer som inte stöds eller kvotöverträdelser, utan att medföra kostnaden för en misslyckad distribution.

Preflight-validering är en av AzAPI:s viktigaste särskiljande egenskaper och fungerar inbyggt med leverantörens direkt-till-ARM-API-arkitektur. Du kan också köra preflight från Microsoft Terraform VS Code-tillägget utan att ange providerflaggan direkt.

Förutsättningar

  • Azure-prenumeration: Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

När du loggar in på Azure-portalen med ett Microsoft-konto används standardprenumerationen för det kontot.

Terraform autentiserar automatiskt med hjälp av information från standardprenumerationen i Azure.

Kör az account show för att verifiera det aktuella Microsoft-kontot och Azure-prenumerationen.

az account show

Alla ändringar du gör via Terraform finns i den azure-prenumeration som visas. Om det är vad du vill kan du hoppa över resten av den här artikeln.

Aktivera preflight-validering

Ange enable_preflight = true i blocket provider "azapi":

provider "azapi" {
  enable_preflight = true
}

Preflight är inaktiverat som standard för att bevara bakåtkompatibilitet. Aktivera den i miljöer där du vill ha tidig validering, till exempel CI-pipeliner och pull request-kontroller.

Exempel: Fånga ett ogiltigt adressprefix under planering

Följande konfiguration skapar ett virtuellt nätverk med ett ogiltigt CIDR-block (Classless Inter-Domain Routing). När preflight är aktiverat visas felet under terraform plan i stället för under 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
        ]
      }
    }
  }
}

När du kör terraform plan med den här konfigurationen returnerar preflight ett fel som liknar:

Error: preflight validation failed for resource "azapi_resource.vnet":
  The value '10.0.0.0/160' is not a valid CIDR block.

Om du korrigerar adressprefixet till ett giltigt värde (till exempel 10.0.0.0/16) rensas felet.

Vad validerar preflight?

Preflight skickar resurstexten till ARM API:ets preflight-slutpunkt, som verifierar:

  • Egenskapsvärden mot ARM-resursschemat (till exempel giltiga CIDR-intervall (klasslös Inter-Domain routning), tillåtna SKU-namn, obligatoriska fält).
  • Kvot- och kapacitetsbegränsningar på prenumerationsnivå för resurstyper som stöds.
  • Principefterlevnad för Azure Policy tilldelningar som körs i preflight-läge.

Preflight verifierar inte :

  • Beroenden mellan resurser eller sekvensering.
  • Resurser som inte har stöd för ARM preflight-slutpunkt (leverantören hoppar över valideringen tyst för dessa resurstyper).
  • Autentiserings- eller auktoriseringsfel (IDENTITY and Access Management(IAM)) – dessa fel uppstår under terraform apply.

Använd preflight i CI-pipelines

Att lägga till preflight i en CI-pipeline ger ett snabbt, icke-förstörande valideringssteg som fångar upp konfigurationsfel innan koden slås samman. Aktivera enable_preflight = true i providerblocket i Terraform-konfigurationen och kör terraform plansedan :

provider "azapi" {
  enable_preflight = true
}

Eftersom preflight körs under terraform plan utan biverkningar, är det säkert att köra i arbetsflöden för pull-begäranden mot live Azure-prenumerationer.

Inaktivera utdatabrus med ignore_no_op_changes

Om du kör planer upprepade gånger kan AzAPI identifiera mindre no-op skillnader mellan konfigurationen och ARM-tillståndet (till exempel normaliserade standardvärden som returneras av API:et). För att undertrycka dessa skillnader i plantid och fokusera på verkliga ändringar anger du ignore_no_op_changes = true i provider-blocket.

provider "azapi" {
  enable_preflight      = true
  ignore_no_op_changes  = true
}

Nästa steg