Preflight-validatie inschakelen in de AzAPI Terraform-provider

Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Terraform maakt u configuratiebestanden met behulp van HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.

De AzAPI Terraform-provider bevat ingebouwde preflight-validatie waarmee uw Azure resourceconfiguratie wordt gevalideerd op basis van het ARM-API-schema tijdens terraform plan, voordat resources in Azure worden gemaakt of gewijzigd. Preflight onderschept configuratiefouten vroegtijdig, zoals ongeldige adresvoorvoegsels, niet-ondersteunde eigenschappencombinaties of quotumschendingen, zonder de kosten van een mislukte implementatie.

Preflight-validatie is een van de vooraanstaande onderscheidende kenmerken van AzAPI en werkt naadloos samen met de direct-to-ARM-API-architectuur van de provider. U kunt ook preflight uitvoeren vanuit de extensie Microsoft Terraform VS Code zonder de providervlag rechtstreeks in te stellen.

Prerequisites

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

Wanneer u zich aanmeldt bij Azure Portal met een Microsoft-account, wordt het standaard Azure-abonnement voor dat account gebruikt.

Terraform verifieert automatisch met behulp van gegevens uit het standaard Azure-abonnement.

Voer az account show uit om het huidige Microsoft-account en het Azure-abonnement te verifiëren.

az account show

Alle wijzigingen die u via Terraform aanbrengt, bevinden zich in het weergegeven Azure-abonnement. Als u dat wilt, slaat u de rest van dit artikel over.

Preflight-validatie inschakelen

Instellen enable_preflight = true in het provider "azapi" blok:

provider "azapi" {
  enable_preflight = true
}

Preflight is standaard uitgeschakeld om compatibiliteit met eerdere versies te behouden. Schakel deze in in omgevingen waar u vroegtijdige validatie wilt, zoals CI-pijplijnen en controles van pull-aanvragen.

Voorbeeld: Een ongeldig adresvoorvoegsel vinden tijdens het plannen

Met de volgende configuratie maakt u een virtueel netwerk met een ongeldig CIDR-blok (Classless Inter-Domain Routing). Als preflight is ingeschakeld, komt de fout naar voren tijdens terraform plan in plaats van tijdens 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
        ]
      }
    }
  }
}

Wanneer u deze configuratie uitvoert terraform plan , retourneert preflight een fout die vergelijkbaar is met:

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

Als u het adresvoorvoegsel corrigeert naar een geldige waarde (bijvoorbeeld 10.0.0.0/16) wordt de fout gewist.

Wat wordt er vooraf gevalideerd?

Preflight verzendt de hoofdtekst van de resource naar het preflight-eindpunt van de ARM-API, dat het volgende valideert:

  • Eigenschapswaarden voor het ARM-resourceschema (bijvoorbeeld geldige CIDR-bereiken (klasseloze Inter-Domain-routering), toegestane SKU-namen, vereiste velden).
  • Quotum- en capaciteitsbeperkingen op abonnementsniveau voor ondersteunde resourcetypen.
  • Naleving van beleid voor Azure Policy toewijzingen die worden uitgevoerd in de preflight-modus.

Preflight valideert niet :

  • Afhankelijkheden of volgordebepaling tussen resources.
  • Resources die geen ondersteuning voor arm-preflight-eindpunten hebben (de provider slaat de validatie voor deze resourcetypen op de achtergrond over.
  • Verificatie- of autorisatiefouten (Identiteits- en toegangsbeheer (IAM)) - deze fouten ontstaan tijdens terraform apply.

Preflight gebruiken in CI-pijplijnen

Het toevoegen van een preflight aan een CI-pijplijn biedt een snelle, niet-destructieve validatiestap waarmee configuratiefouten worden onderschept voordat code wordt samengevoegd. Zet enable_preflight = true aan in het providerblok van je Terraform-configuratie en voer terraform plan uit:

provider "azapi" {
  enable_preflight = true
}

Omdat voorbereidende uitvoeringen worden uitgevoerd tijdens terraform plan zonder bijwerkingen, is het veilig om pull-aanvraagwerkstromen uit te voeren voor live Azure-abonnementen.

Uitvoerruis uitschakelen met ignore_no_op_changes

Als u plannen herhaaldelijk uitvoert, detecteert AzAPI mogelijk kleine no-op verschillen tussen de configuratie en de ARM-status (bijvoorbeeld genormaliseerde standaardwaarden die door de API worden geretourneerd). Als u deze verschillen in plantijd wilt onderdrukken en zich wilt richten op echte wijzigingen, stelt u ignore_no_op_changes = true in het providerblok in:

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

Volgende stappen