Quickstart: Problemen met JSON-implementaties van ARM-sjablonen oplossen
In deze quickstart wordt beschreven hoe u JSON-implementatiefouten in Azure Resource Manager-sjablonen (ARM-sjabloon) oplost. U stelt een sjabloon in met fouten en leert hoe u de fouten kunt oplossen.
Een Azure Resource Manager-sjabloon is een JSON-bestand (JavaScript Object Notation) dat de infrastructuur en configuratie voor uw project definieert. Voor de sjabloon is declaratieve syntaxis vereist. U beschrijft de beoogde implementatie zonder de reeks programmeeropdrachten te schrijven om de implementatie te maken.
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.
Vereisten
U hebt het volgende nodig om deze quickstart te voltooien:
- Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Visual Studio Code met de nieuwste Azure Resource Manager Tools-extensie.
- Installeer de nieuwste versie van Azure PowerShell of Azure CLI.
Een sjabloon maken met fouten
Kopieer de volgende sjabloon en sla deze 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 de naam van het bestand hebt troubleshoot.json , maar u kunt elke naam gebruiken.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameterss": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"prefixName": {
"type": "string"
}
},
"variables": {
"storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
},
"vnetResult": {
"type": "object",
"value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}
}
}
Validatiefout oplossen
Open het bestand in Visual Studio Code. De golvende lijn onder parameterss:
geeft een fout aan. Als u de validatiefout wilt zien, beweegt u de muisaanwijzer over de fout.
U ziet dat en resources
fouten variables
bevatten voor niet-gedefinieerde parameterreferenties. Als u de validatiefouten van de sjabloon wilt weergeven, selecteert u Problemen weergeven>.
Alle fouten worden veroorzaakt door de onjuiste spelling van een elementnaam.
"parameterss": {
Het foutbericht geeft aan dat sjabloonvalidatie is mislukt: kan lid 'parameters' niet vinden voor het object van het type Sjabloon. Pad 'parameters', regel 4, positie 16.
De syntaxis van de ARM-sjabloon voor parameters geeft aan dat parameters
dit de juiste elementnaam is.
Corrigeer de spelling en sla het bestand op om de validatiefout en niet-gedefinieerde parameterreferentiefouten op te lossen.
"parameters": {
Voorbereidende fout oplossen
Als u een preflight-validatiefout wilt maken, gebruikt u een onjuiste waarde voor de prefixName
parameter.
In deze quickstart wordt gebruikgemaakt van troubleshootRG voor de naam van de resourcegroep, maar u kunt elke naam gebruiken.
az group create --name troubleshootRG --location westus
az deployment group create \
--resource-group troubleshootRG \
--template-file troubleshoot.json \
--parameters prefixName=long!!StoragePrefix
De sjabloon mislukt de preflight-validatie en de implementatie wordt niet uitgevoerd. Het prefixName
is meer dan 11 tekens en bevat speciale tekens en hoofdletters.
Opslagnamen moeten tussen 3 en 24 tekens zijn en mogen alleen kleine letters en cijfers gebruiken. De waarde van het voorvoegsel heeft een ongeldige opslagnaam gemaakt. Zie voor meer informatie Solve errors for resource quotas (Fouten met opslagaccountnamen oplossen). Als u de voorbereidende fout wilt oplossen, gebruikt u een voorvoegsel van 11 tekens of minder en bevat u alleen kleine letters of cijfers.
Omdat de implementatie niet is uitgevoerd, is er geen implementatiegeschiedenis.
In het activiteitenlogboek wordt de voorbereidende fout weergegeven. Selecteer het logboek om de details van de fout weer te geven.
Implementatiefout oplossen
Voer de implementatie uit met een geldige voorvoegselwaarde, zoals storage
.
az group create --name troubleshootRG --location westus
az deployment group create \
--resource-group troubleshootRG \
--template-file troubleshoot.json \
--parameters prefixName=storage
De implementatie begint en is zichtbaar in de implementatiegeschiedenis. De implementatie mislukt omdat outputs
wordt verwezen naar een virtueel netwerk dat niet bestaat in de resourcegroep. Er zijn echter geen fouten opgetreden voor het opslagaccount, dus de resource is geïmplementeerd. De implementatiegeschiedenis toont een mislukte implementatie.
Als u de implementatiefout wilt oplossen, wijzigt u de referentiefunctie om een geldige resource te gebruiken. Zie Resource niet gevonden fouten oplossen voor meer informatie. Voor deze quickstart verwijdert u de komma die voorafgaat aan vnetResult
en alle vnetResult
. Sla het bestand op en voer de implementatie opnieuw uit.
"vnetResult": {
"type": "object",
"value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}
Nadat de validatie- en implementatiefouten zijn opgelost, wordt met de volgende sjabloon een opslagaccount geïmplementeerd. In de implementatiegeschiedenis en het activiteitenlogboek ziet u een geslaagde implementatie.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"prefixName": {
"type": "string"
}
},
"variables": {
"storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}
Resources opschonen
Wanneer de Azure-resources niet meer nodig zijn, verwijdert u de resourcegroep.
az group delete --name troubleshootRG
Voer de volgende stappen uit om de resourcegroep uit de portal te verwijderen:
- Voer in 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 implementatiefouten met ARM-sjablonen kunt oplossen.