Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ:
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
}