Delen via


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:

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:

Zie Voor voorbeelden van JSON-syntaxis voor Bash, PowerShell en Cmd.exe de zelfstudie Over quotingsverschillen tussen scripttalen - JSON-tekenreeksen .

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.

Zie ook