Problemen met Azure CLI oplossen
Foutcategorieën
De meeste fouten die door de Azure CLI worden geretourneerd, vallen in een van de volgende categorieën:
Foutcategorie | Algemene foutoorzaak |
---|---|
Niet-herkend argument | Een parameter is onjuist gespeld of bestaat niet. |
Vereist argument ontbreekt | Er is geen vereiste parameter opgegeven of er wordt slechts één van twee 'parameterparen' opgegeven. Een parameter kan ook onjuist zijn gespeld. |
Wederzijds exclusief argument | Twee of meer parameters kunnen niet samen worden opgegeven. |
Ongeldige argumentwaarde | De parameterwaarde is niet geldig. Deze fout wordt vaak veroorzaakt door een aanhalingsteken of spatiëring. |
Ongeldige aanvraag | Deze fout wordt geretourneerd door een HTTP-statuscode van 400. Controleer op een ontbrekende spatie, ontbrekend parameterstreepje of een extra of ontbrekend enkele of dubbele aanhalingstekens. Deze fout treedt ook op wanneer een parameterwaarde geen toegestane waarde bevat. |
Resource is niet gevonden | Er kan geen Azure-resource worden gevonden waarnaar wordt verwezen in een parameterwaarde. |
Verificatie | Microsoft Entra-verificatie is mislukt. |
De --debug
parameter
Een van de beste manieren om te zien wat de Azure CLI uitvoert voor elke Azure CLI-referentieopdracht is het gebruik van de --debug
parameter. Hier volgen enkele voorbeelden van --debug
een mislukte en geslaagde opdracht:
# Error example: Create a resource group, but omit the quotes around the resource group name.
az group create --location eastus2 --name msdocs-rg-test --debug
Hier volgt een deel van de uitvoer voor foutopsporing. Let op de locatie van het logboek en het niet-herkende argument.
cli.knack.cli: Command arguments: ['group', 'create', '-l', 'eastus2', '-name', 'msdocs-rg-test', '--debug']
...
cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to '/home/myName/.azure/commands/YYYY-MM-DD.HH-MM-SS.group_create.8912.log'.
...
cli.azure.cli.core.azclierror: unrecognized arguments: msdocs-rg-test
...
Vergelijk de bovenstaande foutuitvoer --debug
met een geslaagde uitvoering:
# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug
Hier volgt een deel van de uitvoer voor foutopsporing. Let op de locatie van het logboek, de API-aanroep en de uitvoeringstijd.
cli.knack.cli: Command arguments: ['group', 'create', '-l', 'eastus2', '-n', 'msdocs-rg-test', '--debug']
...
cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to '/home/myName/.azure/commands/YYYY-MM-DD.HH-MM-SS.group_create.8912.log'.
...
cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/msdocs-rg-test?api-version=YYYY-MM-DD'
cli.azure.cli.core.sdk.policies: Request method: 'PUT'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies: 'Content-Type': 'application/json'
cli.azure.cli.core.sdk.policies: 'Content-Length': '23'
cli.azure.cli.core.sdk.policies: 'Accept': 'application/json'
cli.azure.cli.core.sdk.policies: 'x-ms-client-request-id': 'ba7ee6f4-2dcc-11ef-81ce-00155dadc5c8'
cli.azure.cli.core.sdk.policies: 'CommandName': 'group create'
cli.azure.cli.core.sdk.policies: 'ParameterSetName': '-l -n --debug'
cli.azure.cli.core.sdk.policies: 'User-Agent': 'AZURECLI/2.61.0 (RPM) azsdk-python-core/1.28.0 Python/3.9.19 (Linux-5.10.102.2-microsoft-standard-x86_64-with-glibc2.35) cloud-shell/1.0'
cli.azure.cli.core.sdk.policies: 'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"location": "eastus2"}
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "PUT /subscriptions/3618afcd-ea52-4ceb-bb46-53bb962d4e0b/resourcegroups/msdocs-rg-test?api-version=2022-09-01 HTTP/1.1" 201 226
cli.azure.cli.core.sdk.policies: Response status: 201
...
cli.azure.cli.core.sdk.policies: 'Date': 'Tue, 18 Jun 2024 23:44:41 GMT'
cli.azure.cli.core.sdk.policies: Response content:
cli.azure.cli.core.sdk.policies: {"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/msdocs-rg-test","name":"msdocs-rg-test","type":"Microsoft.Resources/resourceGroups","location":"eastus2","properties":{"provisioningState":"Succeeded"}}
...
cli.__main__: Command ran in 1.829 seconds (init: 0.111, invoke: 1.718)
Zie Verschillen tussen scripttalen - JSON-tekenreeksen voor voorbeelden van --debug
JSON-opmaak.
Veelvoorkomende syntaxisfouten
Hoewel de Azure CLI kan worden uitgevoerd in zowel Bash, PowerShell als Windows Cmd, zijn er syntaxisverschillen tussen scripttalen. Azure CLI-scripts met enkele aanhalingstekens, dubbele aanhalingstekens en escapetekens moeten meestal worden gewijzigd wanneer ze tussen talen worden gekopieerd. Deze uitdaging toont zichzelf het vaakst in parameterwaarden, met name in waarden die aan de --query
parameter zijn toegewezen. Hier volgen enkele veelvoorkomende foutberichten:
"Ongeldige aanvraag ... {something} is ongeldig" kan worden veroorzaakt door een spatie, een enkel of dubbel aanhalingsteken of een gebrek aan een aanhalingsteken.
'Onverwacht token...' wordt weergegeven wanneer er een extra spatie of aanhalingsteken is.
De fout 'Ongeldige jmespath_type waarde' komt vaak van een onjuist quoteren in de
--query
parameter.'Variabele verwijzing is ongeldig' wordt ontvangen wanneer een tekenreeks niet goed is opgemaakt vanwege samenvoeging of een ontbrekend escape-teken.
'Niet-herkende argumenten' wordt vaak veroorzaakt door een onjuist regelvervolgteken of een verkeerd gespelde parameternaam.
'Ontbrekende expressie na unaire operator' wordt weergegeven wanneer een regelvervolgteken ontbreekt.
Er zijn verschillende Azure CLI-artikelen die zijn gewijd aan het uitleggen van syntaxisfouten en het bieden van werkvoorbeelden:
- Verschillen tussen scripttalen citeren
- Syntaxisverschillen in de zelfstudie Bash, PowerShell en Cmd
--query
Veel parametervoorbeelden vinden in instructies voor het uitvoeren van query's op Azure CLI-opdrachtuitvoer met behulp van een JMESPath-query- De Azure CLI gebruiken in een Bash-scripttaal
- Overwegingen voor het uitvoeren van de Azure CLI in een PowerShell-scripttaal
Tip
Als u een opdrachtfout niet kunt oplossen, kunt u een andere scripttaal gebruiken. De meeste Azure CLI-documentatie is geschreven en getest in Azure Cloud Shell (ACS) met een Bash-scripttaal. Als u een voorbeeld van een artikel kunt krijgen dat moet worden uitgevoerd in ACS Bash, maar niet wordt uitgevoerd in Windows PowerShell, controleert u het gebruik van enkele en dubbele aanhalingstekens en escapetekens.
Fout: ongeldige waarde of bestaat niet
Deze fouten treden vaak op bij het gebruik van een variabelewaarde die een onjuiste indeling bevat. De standaarduitvoer voor Azure CLI is JSON, dus als u een id voor een Azure-resource in een variabele probeert op te slaan, moet u opgeven --output tsv
. Hier volgt een voorbeeld:
# Get a subscription that contains a name or phrase
subscriptionID=$(az account list --query "[?contains(name,'my case sensitive search phrase')].id")
echo $subscriptionID
# output as JSON
[ "00000000-0000-0000-0000-000000000000" ]
# Try to set your subscription to the new ID
az account set --subscription $subscriptionID
# error output
The subscription of '"00000000-0000-0000-0000-000000000000"' doesn't exist in cloud 'AzureCloud'.
Gebruik nu het tsv
uitvoertype.
# Get the active subscription
subscriptionID=$(az account list --query "[?contains(name,'my case sensitive search phrase')].id" --output tsv)
echo $subscriptionID
# output as TSV
00000000-0000-0000-0000-000000000000
# Successfully set your subscription to the new ID
az account set --subscription $subscriptionID
Fout: argumenten worden verwacht of vereist
Deze fout wordt weergegeven wanneer een Azure CLI-opdracht een vereiste parameter mist of als er een typografische fout optreedt waardoor de Azure CLI de verwijzingsopdracht onjuist parseert. Wanneer u met een script werkt, wordt deze fout ook weergegeven wanneer aan een of meer voorwaarden wordt voldaan:
- Een regelvervolgteken ontbreekt of is onjuist.
- Aan de rechterkant van een regelvervolgteken bevindt zich een volgruimte wanneer u in de scripttaal van PowerShell werkt. Op dit moment wordt splatting niet ondersteund met Azure CLI-opdrachten.
- Een variabelenaam bevat een speciaal teken, zoals een streepje (-).
Fout: resource is niet gevonden
Wanneer de Azure CLI de resourcenaam of id die is doorgegeven in een parameterwaarde niet kan vinden, is dit meestal een van de volgende redenen:
- De resourcenaam of -id is onjuist gespeld.
- De resourcenaam bevat speciale tekens en wordt niet omgeven door enkele of dubbele aanhalingstekens.
- De waarde die wordt doorgegeven aan een variabele, heeft ongelezen voorloop- of volgspaties.
- De resource bestaat, maar bevindt zich in een ander abonnement.
Fout: Kan tekenreeks niet parseren als JSON
Er zijn verschillen tussen Bash, PowerShell in Linux en PowerShell in Windows. Bovendien kunnen verschillende versies van PowerShell verschillende resultaten opleveren. Voor complexe parameters, zoals een JSON-tekenreeks, kunt u het beste de conventie van @<file>
Azure CLI gebruiken om de interpretatie van een shell te omzeilen. Zie een van de volgende artikelen voor meer informatie:
Fout: InvalidTemplateDeployment
Wanneer u probeert een Azure-resource te maken op een locatie die deze resource niet aanbiedt, krijgt u een foutbericht dat lijkt op dit bericht: 'De volgende SKU's zijn mislukt voor capaciteitsbeperkingen: myDesiredSkuName' is momenteel niet beschikbaar op locatie 'mySpecifiedLocation'.
Hier volgt een voorbeeld van een volledige fout voor een VIRTUELE machine die niet op de westus
locatie kan worden gemaakt:
{"error":{"code":"InvalidTemplateDeployment","message":"The template deployment 'vm_deploy_<32 character ID>'
is not valid according to the validation procedure. The tracking id is '<36 character ID>'.
See inner errors for details.","details":[{"code":"SkuNotAvailable","message":"The requested VM size for resource
'Following SKUs have failed for Capacity Restrictions: Standard_DS1_v2' is currently not available
in location 'westus'. Please try another size or deploy to a different location
or different zone. See https://aka.ms/azureskunotavailable for details."}]}}
De oplossing is om een eigenschap van uw aangevraagde Azure-resource te wijzigen of een andere locatie te proberen.
Fout: Abonnement niet gevonden
Ervan uitgaande dat u een abonnementsnaam of -id niet onjuist hebt getypt, treedt deze fout op wanneer een resourceprovider niet is geregistreerd in het actieve abonnement. Als u bijvoorbeeld wilt uitvoeren az storage account create
, moet de Microsoft.Storage
provider zijn geregistreerd. Zie Azure-resourceproviders en -typen om een resourceprovider te registreren.
Fout: Slechte handshake... certificaatverificatie is mislukt
Zie Werken achter een proxy voor informatie over het oplossen van deze fout.
Werken achter een proxy
Als u Azure CLI gebruikt via een proxyserver die gebruikmaakt van zelfondertekende certificaten, kan de Python-aanvraagbibliotheek die door de Azure CLI wordt gebruikt, de volgende fout veroorzaken: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
Als u deze fout wilt oplossen, stelt u de omgevingsvariabele REQUESTS_CA_BUNDLE
in op het pad van het CA-bundelcertificaatbestand in PEM-indeling.
Besturingssysteem | Standaardbundel van certificeringsinstantie |
---|---|
Windows 32-bits | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
Windows 64-bits | C:\Program Files\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
Ubuntu/Debian Linux | /opt/az/lib/python<version>/site-packages/certifi/cacert.pem |
CentOS Stream/RHEL/SUSE Linux | /usr/lib64/az/lib/python<version>/site-packages/certifi/cacert.pem |
macOS | /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem |
Voeg het certificaat van de proxyserver toe aan het CA-bundelcertificaatbestand of kopieer de inhoud naar een ander certificaatbestand. Stel vervolgens in op REQUESTS_CA_BUNDLE
de nieuwe bestandslocatie. Hier volgt een voorbeeld:
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Voor sommige proxy's is verificatie vereist. De indeling van de HTTP_PROXY
of HTTPS_PROXY
omgevingsvariabelen moet de verificatie bevatten, zoals HTTPS_PROXY="https://username:password@proxy-server:port"
. Zie Proxy's configureren voor de Azure SDK voor Python voor meer informatie.
Service-principals
Zie opschonen en probleemoplossing in de zelfstudie Werken met service-principals voor meer informatie over het oplossen van problemen met service-principals .
Overige problemen
Als u een productprobleem ondervindt met Azure CLI die niet wordt vermeld in dit artikel, kunt u een probleem indienen op GitHub.