Quickstart: Problemen met ARM-sjabloonimplementaties oplossen
In deze quickstart wordt beschreven hoe u implementatiefouten Azure Resource Manager sjabloon (ARM-sjabloon) kunt oplossen. U stelt een sjabloon met fouten in 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.
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 extensie Azure Resource Manager Tools.
- Installeer de nieuwste versie van Azure PowerShell of Azure CLI.
Een sjabloon met fouten maken
Kopieer de volgende sjabloon en sla deze 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 de naam troubleshoot.json hebt gegeven, 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 wavy-lijn parameterss: onder geeft een fout aan. Als u de validatiefout wilt zien, beweegt u de muisaanwijzer over de fout.
U ziet dat en variables fouten resources hebben voor niet-gedefinieerde parameterverwijzing. 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 de sjabloonvalidatie is mislukt: Kan de parameters van het lid niet vinden op object van het type 'Sjabloon'. Pad 'parameters', regel 4, positie 16.
De ARM-sjabloonsyntaxis voor parameters geeft aan parameters dat de juiste elementnaam is.
Corrigeer de validatiefout en niet-gedefinieerde parameterverwijzingsfouten door de spelling te corrigeren en het bestand op te slaan.
"parameters": {
Preflight-fout oplossen
Als u een testvalidatiefout wilt maken, gebruikt u een onjuiste waarde voor de prefixName parameter .
In deze quickstart wordt troubleshootRG gebruikt 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 testvalidatie en de implementatie wordt niet uitgevoerd. De prefixName bestaat uit meer dan 11 tekens en bevat speciale tekens en hoofdletters.
Storage mogen tussen 3 en 24 tekens lang zijn en mogen alleen kleine letters en cijfers bevatten. Met de voorvoegselwaarde is een ongeldige opslagnaam gemaakt. Zie voor meer informatie Solve errors for resource quotas (Fouten met opslagaccountnamen oplossen). Gebruik een voorvoegsel van 11 tekens of minder en alleen kleine letters of cijfers om de voorlopige fout op te lossen.
Omdat de implementatie niet is uitgevoerd, is er geen implementatiegeschiedenis.
In het activiteitenlogboek wordt de voorlopige 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 verwijst naar een virtueel outputs netwerk dat niet bestaat in de resourcegroep. Er zijn echter geen fouten 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 Fouten met niet-gevonden resources oplossen voor meer informatie. Voor deze snelstart verwijdert u de komma die voorafgaat vnetResult aan en alle vnetResult . Sla het bestand op en werk de implementatie opnieuw uit.
"vnetResult": {
"type": "object",
"value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}
Na de validatie, de preflight- en implementatiefouten zijn opgelost, wordt met de volgende sjabloon een opslagaccount geïmplementeerd. De implementatiegeschiedenis en het activiteitenlogboek geven een geslaagde implementatie weer.
{
"$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
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 ARM-sjablonen kunt oplossen.