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 waarde van parameter is niet geldig. Deze fout wordt vaak veroorzaakt door een aanhalingsteken, een escape-teken of spaties.
Foute aanvraag Deze fout wordt geretourneerd door een HTTP-statuscode van 400. Controleer op een ontbrekende spatie, een ontbrekende parameterstreep of op extra of ontbrekende enkele of dubbele aanhalingstekens. Deze fout treedt ook op wanneer een parameterwaarde geen toegestane waarde bevat.
Resource niet gevonden Er kan geen Azure-resource worden gevonden waarnaar wordt verwezen in een parameterwaarde.
Authenticatie Microsoft Entra-verificatie is mislukt.

De parameter --debug

Een van de beste manieren om te zien wat de Azure CLI uitvoert voor elke Azure CLI-referentieopdracht is het gebruik van de parameter --debug. Hier volgen voorbeelden van --debug voor 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 foutuitvoer --debug hierboven met een succesvolle 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)

Voor voorbeelden van --debug voor JSON-opmaak, zie Verschillen tussen scripttalen - JSON-tekenreeksen.

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 zijn toegewezen aan de parameter --query. Hier volgen enkele veelvoorkomende foutberichten:

  • "Ongeldige aanvraag ... {something} is ongeldig" kan worden veroorzaakt door een spatie, een enkele of dubbele aanhalingsteken of een gebrek aan een aanhalingsteken.

  • "Onverwacht teken..." wordt weergegeven wanneer er een extra spatie of aanhalingsteken aanwezig is.

  • "Ongeldige jmespath_type waarde" fout komt vaak door onjuiste citatie in de parameter --query."

  • "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 uitdrukking na unaire operator" wordt weergegeven wanneer een regelcontinuatieteken 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 --output tsvopgeven. 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

U ontvangt deze fout wanneer een Azure CLI-opdracht een vereiste parameter mist of er een typografische fout optreedt waardoor de Azure CLI de referentieopdracht 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 spatie wanneer u in de scripttaal van PowerShell werkt. Op dit moment wordt "splatting" met niet ondersteund bij Azure CLI-opdrachten.
  • Een variabelenaam bevat een speciaal teken, zoals een streepje (-).

Fout: bron 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 in aanhalingstekens 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 @<file> conventie van 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.exeVerschillen tussen scripttalen- JSON-tekenreeksen zelfstudie.

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 kan worden gemaakt op de westus locatie:

{"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 az storage account createwilt uitvoeren, moet de Microsoft.Storage provider zijn geregistreerd. Zie Azure-resourceproviders en -typenom 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-bibliotheek aanvragen gebruikt door de Azure CLI de volgende fout: 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 Standaardpakket van certificeringsautoriteit
Windows 32-bit C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
Windows 64-bit 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 Intel-modellen: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem

Siliciummodellen: /opt/homebrew/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 REQUESTS_CA_BUNDLE in op 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 Pythonvoor 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.

Andere problemen

Als u een productprobleem ondervindt met Azure CLI die niet wordt vermeld in dit artikel, een probleem melden op GitHub.

Zie ook