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:
- 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 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.
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 parameter
beweegt, ziet u een foutbericht.
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 param
is. 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.
De mislukte implementatie bestaat echter wel in het activiteitenlogboek.
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.
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:
- Voer in het Azure Portal Resourcegroepen in het zoekvak in.
- Voer in het veld Filteren op naam de naam van de resourcegroep in.
- Selecteer de naam van de resourcegroep.
- Selecteer Resourcegroep verwijderen.
- 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.