Quickstart: Problemen met bicep-bestandsimplementaties oplossen

In deze quickstart wordt beschreven hoe u fouten met de implementatie van Bicep-bestanden kunt oplossen. U maakt een bestand met fouten en leert hoe u de fouten kunt oplossen.

Er zijn drie typen fouten die gerelateerd zijn aan een implementatie:

  • Validatiefouten treden op voordat een implementatie begint en worden veroorzaakt door syntaxisfouten in uw bestand. Een code-editor zoals Visual Studio Code kan deze fouten identificeren.
  • Preflight-validatiefouten treden op wanneer een implementatieopdracht wordt uitgevoerd, maar resources niet worden geïmplementeerd. Deze fouten worden gevonden zonder de implementatie te starten. Als een parameterwaarde bijvoorbeeld onjuist is, wordt de fout gevonden in de validatie vooraf.
  • Implementatiefouten treden op tijdens het implementatieproces en kunnen alleen worden gevonden door de voortgang van de implementatie in uw Azure-omgeving te beoordelen.

Beide typen fouten retourneren een foutcode die je gebruikt om de problemen met de implementatie op te lossen. Validatie- en voorbereidende fouten worden weergegeven in het activiteitenlogboek, maar worden niet weergegeven in je implementatiegeschiedenis. Een Bicep-bestand met syntaxisfouten wordt niet gecompileerd in JSON en wordt niet weergegeven in het activiteitenlogboek.

Vereisten

U hebt het volgende nodig om deze quickstart te voltooien:

Een Bicep-bestand met fouten maken

Kopieer het volgende Bicep-bestand en sla het lokaal op. U gebruikt dit bestand om een validatiefout, een voorbereidende fout en een implementatiefout op te lossen. In deze quickstart wordt ervan uitgegaan dat u het bestand troubleshoot.bicep hebt genoemd, maar u kunt het bestand elke naam geven.

@description('SKU for the storage account')
@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
parameter storageAccountType string = 'Standard_LRS'

@description('Prefix for storage name.')
param prefixName string

var storageAccountName = '${prefixName}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: resourceGroup().location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

resource existingVNet 'Microsoft.Network/virtualNetworks@2021-03-01' existing = {
  name: 'doesnotexist'
}

output storageAccountName string = storageAccountName
output vnetResult object = existingVNet

Validatiefout oplossen

Open het bestand in Visual Studio Code. U ziet dat Visual Studio Code een syntaxisfout identificeert. De eerste parameterdeclaratie is gemarkeerd met rode kronkelen om een fout aan te geven.

Schermopname van Visual Studio Code met rode kronkelen die een syntaxisfout in een Bicep-bestand markeren.

De regels die zijn gemarkeerd met een fout zijn:

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
parameter storageAccountType string = 'Standard_LRS'

Wanneer u de muisaanwijzer over parameterbeweegt, ziet u een foutbericht.

Schermopname van een gedetailleerd foutbericht dat wordt weergegeven in Visual Studio Code wanneer u de muisaanwijzer op een syntaxisfout in een Bicep-bestand plaatst.

Het bericht luidt: Dit declaratietype wordt niet herkend. Geef een parameter, variabele, resource of uitvoerdeclaratie op. Als u dit bestand probeert te implementeren, krijgt u hetzelfde foutbericht van de implementatieopdracht.

Als u de documentatie voor een parameterdeclaratie bekijkt, ziet u dat het trefwoord daadwerkelijk paramis. Wanneer u deze syntaxis wijzigt, verdwijnt de validatiefout. De @allowed decorator is ook gemarkeerd als een fout, maar die fout wordt ook opgelost door de parameterdeclaratie te wijzigen. De decorator is gemarkeerd als een fout omdat er een parameterdeclaratie wordt verwacht na de decorator. Deze voorwaarde was niet waar toen de declaratie onjuist was.

De vaste lijn is:

param storageAccountType string = 'Standard_LRS'

Voorbereidende fout oplossen

Nu u de validatiefout hebt opgelost, is het tijd om het bestand te implementeren. Maar u geeft een ongeldige parameterwaarde op om een preflight-fout te zien.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.bicep \
  --parameters prefixName=longNamewith!!Charactersthatarenotallowed

Azure Resource Manager bepaalt dat de naam van het opslagaccount tekens bevat die niet zijn toegestaan. De implementatie wordt niet uitgevoerd.

U ziet een foutbericht dat aangeeft dat de validatie van de voorbereidende fase is mislukt. U krijgt ook een bericht met de mededeling dat de naam van het opslagaccount tussen 3 en 24 tekens lang moet zijn en alleen cijfers en kleine letters moet gebruiken. Het voorvoegsel dat u hebt opgegeven, voldoet niet aan deze vereiste. Zie Fouten voor opslagaccountnamen oplossen voor meer informatie over deze foutcode.

Omdat de fout is opgetreden tijdens de voorbereidende fase, bestaat er geen implementatie in de geschiedenis.

Schermopname van de sectie implementatiegeschiedenis van Azure Portal met geen implementaties voor een Bicep-bestand.

De mislukte implementatie bestaat echter wel in het activiteitenlogboek.

Schermopname van het activiteitenlogboek van Azure Portal met een validatiefout in de voorbereidende fase voor een Bicep-bestandsimplementatie.

U kunt de details van de logboekvermelding openen om het foutbericht te zien.

Implementatiefout oplossen

U implementeert het bestand opnieuw en geeft een toegestane waarde op voor de parameter name prefix.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.bicep \
  --parameters prefixName=stg

De implementatie wordt gestart, maar mislukt met een bericht dat het virtuele netwerk niet is gevonden. Normaal gesproken lost u deze fout op door de verwijzing naar de resource te wijzigen. In deze quickstart verwijdert u de verwijzing. Zie Fouten met niet gevonden resources oplossen voor meer informatie over deze foutcode.

U ziet in de portal dat de implementatie wordt weergegeven in de geschiedenis.

Schermopname van de sectie implementatiegeschiedenis van Azure Portal met een mislukte implementatie voor een Bicep-bestand.

U kunt de vermelding in de implementatiegeschiedenis openen voor meer informatie over de fout. De fout bestaat ook in het activiteitenlogboek.

Het Bicep-bestand probeert te verwijzen naar een virtueel netwerk dat niet bestaat in uw resourcegroep. Verwijder de verwijzing naar het bestaande virtuele netwerk om de fout op te lossen.

@description('SKU for the storage account')
@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
param storageAccountType string = 'Standard_LRS'

@description('Prefix for storage name.')
param prefixName string

var storageAccountName = '${prefixName}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: resourceGroup().location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = storageAccountName

U kunt dat Bicep-bestand zonder fouten implementeren.

Resources opschonen

Wanneer de Azure-resources niet meer nodig zijn, verwijdert u de resourcegroep. U kunt de resourcegroep verwijderen uit Cloud Shell of de portal.

az group delete --name troubleshootRG

Voer de volgende stappen uit om de resourcegroep uit de portal te verwijderen:

  1. Voer in het Azure Portal Resourcegroepen in het zoekvak in.
  2. Voer in het veld Filteren op naam de naam van de resourcegroep in.
  3. Selecteer de naam van de resourcegroep.
  4. Selecteer Resourcegroep verwijderen.
  5. Om de verwijdering te bevestigen, voert u de naam van de resourcegroep in en selecteert u Verwijderen.

Volgende stappen

In deze quickstart hebt u geleerd hoe u fouten met de implementatie van Bicep-bestanden kunt oplossen.