Quickstart: Problemen met Bicep-bestandsimplementaties oplossen
In deze quickstart wordt beschreven hoe u fouten bij de implementatie van Bicep-bestanden kunt oplossen. U maakt een bestand met fouten en leert hoe u de fouten kunt oplossen.
Er zijn drie soorten fouten die betrekking hebben op een implementatie:
- Validatiefouten treden op voordat een implementatie begint en worden veroorzaakt door syntaxisfouten in uw bestand. Uw editor kan deze fouten identificeren.
- Er treden preflight validatiefouten 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 testvalidatie.
- Implementatiefouten treden op tijdens het implementatieproces en kunnen alleen worden gevonden door de voortgang van de implementatie te beoordelen.
Alle typen fouten retourneren een foutcode die u gebruikt om problemen met de implementatie op te lossen. Validatie- en preflight-fouten worden weergegeven in het activiteitenlogboek, maar worden niet weergegeven in de implementatiegeschiedenis. Een Bicep-bestand met syntaxisfouten wordt niet ge compileerd in JSON en wordt niet weergegeven in het activiteitenlogboek.
Vereisten
U hebt het volgende nodig om deze quickstart te voltooien:
- Als u geen abonnement op Azure hebt, maakt u een gratis account voordat u begint.
- Visual Studio Code met de nieuwste Bicep-extensie.
- De nieuwste versie van Azure PowerShell of Azure CLI.
Een Bicep-bestand met fouten maken
Kopieer het volgende Bicep-bestand en sla het lokaal op. U gebruikt dit bestand om een validatiefout, een preflight-fout en een implementatiefout op te lossen. In deze quickstart wordt ervan uitgenomen dat u het bestand troubleshoot.bicep hebt genoemd, maar u kunt het een 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 kronkeltjes om een fout aan te geven.
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 boven parameter beweegt, wordt er een foutbericht weergegeven.
In het bericht staat: '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 in feite param is. Wanneer u deze syntaxis wijzigt, verdwijnt de validatiefout. Deator is ook gemarkeerd als een fout, maar deze fout wordt ook opgelost door @allowed de parameterdeclaratie te wijzigen. Deator is gemarkeerd als een fout omdat er een parameterdeclaratie wordt verwacht na deator. Deze voorwaarde was niet waar toen de declaratie onjuist was.
De vaste lijn is:
param storageAccountType string = 'Standard_LRS'
Preflight-fout oplossen
Nu u de validatiefout hebt opgelost, is het tijd om het bestand te implementeren. Maar u geeft een slechte 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 geprobeerd.
U ziet een foutbericht dat aangeeft dat de preflight validatie is mislukt. U krijgt ook een bericht met de melding 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 die vereiste. Zie Fouten voor opslagaccountnamen oplossen voor meer informatie over deze foutcode.
Omdat de fout in de preflight is opgetreden, bestaat er geen implementatie in de geschiedenis.
Maar de mislukte implementatie staat in het activiteitenlogboek.
U kunt details van de logboekinvoer openen om het foutbericht weer te geven.
Implementatiefout oplossen
U implementeert het bestand opnieuw en geeft een toegestane waarde op voor de naam voorvoegselparameter.
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.
U kunt de vermelding openen in de implementatiegeschiedenis 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'
])
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: {}
}
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
Als u de resourcegroep uit de portal wilt verwijderen, volgt u deze stappen:
- Voer in Azure Portal het zoekvak Resourcegroepen in.
- Voer in het veld Filteren op naam de naam van de resourcegroep in.
- Selecteer de naam van de resourcegroep.
- Selecteer Resourcegroep verwijderen.
- Voer de naam van de resourcegroep in en selecteer Verwijderen om de verwijdering te bevestigen.
Volgende stappen
In deze quickstart hebt u geleerd hoe u fouten bij de implementatie van Bicep-bestanden kunt oplossen.