Résolution des problèmes liés à Azure CLI
Catégories d’erreurs
La plupart des erreurs retournées par Azure CLI se trouvent dans l’une des catégories suivantes :
Catégorie d’erreur | Cause d’erreur générale |
---|---|
Argument non reconnu | Un paramètre est mal orthographié ou n’existe pas. |
Argument requis manquant | Un paramètre obligatoire n’est pas spécifié ou un seul des deux « paires de paramètres » est spécifié. Un paramètre peut également être mal orthographié. |
Argument mutuellement exclusif | Deux paramètres ou plus ne peuvent pas être spécifiés ensemble. |
Valeur d’argument non valide | La valeur du paramètre n’est pas valide. Cette erreur est souvent due au guillemet, à un caractère d’échappement ou à un espacement. |
Demande incorrecte | Un code d’état HTTP de 400 retourne cette erreur. Recherchez un espace manquant, un tiret de paramètre manquant ou un guillemet simple ou double supplémentaire ou manquant. Cette erreur se produit également lorsqu’une valeur de paramètre ne contient pas de valeur autorisée. |
Ressource introuvable | Une ressource Azure référencée dans une valeur de paramètre est introuvable. |
Authentification | Échec de l’authentification Microsoft Entra. |
Paramètre --debug
L’une des meilleures façons de voir ce qu’exécute Azure CLI pour chaque commande de référence Azure CLI consiste à utiliser le --debug
paramètre. Voici des exemples d’échec et de réussite d’une --debug
commande :
# 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
Voici une partie de la sortie de débogage. Notez l’emplacement du journal et l’argument non reconnu.
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
...
Comparez la sortie d’erreur --debug
donnée ci-dessus à une exécution réussie :
# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug
Voici une partie de la sortie de débogage. Notez l’emplacement du journal, l’appel d’API et l’heure d’exécution.
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)
Pour obtenir des exemples de --debug
mise en forme JSON, consultez Les différences entre les langages de script - chaînes JSON.
Erreurs de syntaxe courantes
Bien qu’Azure CLI puisse s’exécuter à la fois dans Bash, PowerShell et Windows Cmd, il existe des différences de syntaxe entre les langages de script. Les scripts Azure CLI contenant des guillemets simples, des guillemets doubles et des caractères d’échappement doivent généralement être modifiés lors de la copie entre les langues. Ce défi se révèle le plus souvent dans les valeurs de paramètre, en particulier dans les valeurs affectées au --query
paramètre. Voici quelques messages d’erreur courants :
"Demande incorrecte ... {quelque chose} n’est pas valide » peut être dû à un espace, à un guillemet simple ou double ou à un manque de guillemets.
« Jeton inattendu... » est vu lorsqu’il y a un espace ou un guillemet supplémentaire.
L’erreur « Valeur jmespath_type non valide » provient souvent d’un guillemet incorrect dans le
--query
paramètre.« La référence de variable n’est pas valide » est reçue lorsqu’une chaîne n’est pas correctement mise en forme en raison de la concaténation ou d’un caractère d’échappement manquant.
Les « arguments non reconnus » sont souvent provoqués par un caractère de continuation de ligne incorrect ou un nom de paramètre mal orthographié.
« Expression manquante après l’opérateur unaire » est visible lorsqu’un caractère de continuation de ligne est manquant.
Il existe plusieurs articles Azure CLI dédiés à l’explication des erreurs de syntaxe et à la fourniture d’exemples de travail :
- Guillemets de différences entre les langages de script
- Différences de syntaxe dans le didacticiel Bash, PowerShell et Cmd
- Trouver de nombreux
--query
exemples de paramètres dans la procédure d’interrogation de la sortie de commande Azure CLI à l’aide d’une requête JMESPath - Guide pratique pour utiliser Azure CLI dans un langage de script Bash
- Considérations relatives à l’exécution d’Azure CLI dans un langage de script PowerShell
Conseil
Si vous ne pouvez pas résoudre une erreur de commande, essayez d’utiliser un autre langage de script. La plupart des documents Azure CLI sont écrits et testés dans Azure Cloud Shell (ACS) avec un langage de script Bash. Si vous pouvez obtenir un exemple d’article à exécuter dans ACS Bash, mais qu’il ne s’exécute pas dans Windows PowerShell, passez en revue l’utilisation de guillemets simples et doubles et les caractères d’échappement.
Erreur : valeur non valide ou n’existe pas
Ces erreurs se produisent souvent lors de la tentative d’utilisation d’une valeur de variable qui contient un format incorrect. La sortie par défaut pour Azure CLI est JSON. Par conséquent, si vous essayez de stocker un ID pour une ressource Azure dans une variable, vous devez spécifier --output tsv
. Voici un exemple :
# 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'.
Utilisez maintenant le type de tsv
sortie.
# 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
Erreur : les arguments sont attendus ou obligatoires
Vous recevez cette erreur lorsqu’une commande Azure CLI manque un paramètre requis ou qu’une erreur typographique provoque l’analyse incorrecte de la commande de référence par Azure CLI. Lorsque vous utilisez un script, vous recevez également cette erreur quand une ou plusieurs conditions sont remplies :
- Un caractère de continuation de ligne est manquant ou incorrect.
- Un espace de fin existe sur le côté droit d’un caractère de continuation de ligne lors de l’utilisation dans le langage de script PowerShell. À ce stade, la mise en forme n’est pas prise en charge avec les commandes Azure CLI.
- Un nom de variable contient un caractère spécial, tel qu’un tiret (-).
Erreur : Ressource introuvable
Lorsque l’interface de ligne de commande Azure ne trouve pas le nom de la ressource ou l’ID passé dans une valeur de paramètre, elle est généralement due à l’une de ces raisons :
- Le nom ou l’ID de la ressource est orthographié de manière incorrecte.
- Le nom de la ressource contient des caractères spéciaux et n’est pas entouré de guillemets simples ou doubles.
- La valeur passée à une variable a des espaces de début ou de fin invisibles.
- La ressource existe, mais se trouve dans un autre abonnement.
Erreur : Échec de l’analyse de la chaîne au format JSON
Il existe des différences entre Bash, PowerShell dans Linux et PowerShell dans Windows. En outre, différentes versions de PowerShell peuvent produire des résultats différents. Pour les paramètres complexes, comme une chaîne JSON, la meilleure pratique consiste à utiliser la convention d’Azure @<file>
CLI pour contourner l’interprétation d’un interpréteur de commandes. Pour plus d’informations, consultez l’un des articles suivants :
Pour obtenir des exemples de syntaxe JSON pour Bash, PowerShell et Cmd.exe, consultez les différences entre les langages de script - didacticiel sur les chaînes JSON.
Erreur : InvalidTemplateDeployment
Lorsque vous essayez de créer une ressource Azure dans un emplacement qui n’offre pas cette ressource, vous recevez une erreur similaire à ce message : « Les références SKU suivantes ont échoué pour les restrictions de capacité : myDesiredSkuName » n’est actuellement pas disponible à l’emplacement « mySpecifiedLocation ».
Voici un exemple d’erreur complet pour une machine virtuelle qui ne peut pas être créée à l’emplacement westus
:
{"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."}]}}
La solution consiste à modifier une propriété de votre ressource Azure demandée ou à essayer un autre emplacement.
Erreur : Abonnement introuvable
En supposant que vous n’avez pas correctement tapé un nom d’abonnement ou un ID, cette erreur se produit lorsqu’un fournisseur de ressources n’est pas inscrit dans l’abonnement actif. Par exemple, si vous souhaitez exécuter az storage account create
, le Microsoft.Storage
fournisseur doit être inscrit. Pour inscrire un fournisseur de ressources, consultez fournisseurs et types de ressources Azure.
Erreur : Négociation incorrecte... échec de la vérification du certificat
Consultez Travailler derrière un proxy pour plus d’informations sur la résolution de cette erreur.
Travail derrière un proxy
Si vous utilisez Azure CLI sur un serveur proxy qui utilise des certificats auto-signés, la bibliothèque de requêtes Python utilisée par Azure CLI peut entraîner l’erreur suivante : SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
Pour résoudre cette erreur, définissez la variable d’environnement REQUESTS_CA_BUNDLE
sur le chemin du fichier de certificat du bundle de l’autorité de certification au format PEM.
Système d’exploitation | Bundle par défaut de l’autorité de certification |
---|---|
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 |
Ajoutez le certificat du serveur proxy au fichier de certificat du bundle de l’autorité de certification ou copiez le contenu dans un autre fichier de certificat. Ensuite, définissez REQUESTS_CA_BUNDLE
sur l’emplacement du nouveau fichier. Voici un exemple :
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Certains proxys nécessitent une authentification. Le format des variables d’environnement HTTP_PROXY
ou HTTPS_PROXY
doit inclure l’authentification, par exemple HTTPS_PROXY="https://username:password@proxy-server:port"
. Pour plus d’informations, consultez Comment configurer des proxys pour le Kit de développement logiciel (SDK) Azure pour Python.
Principaux de service
Pour plus d’informations sur la résolution des problèmes des principaux de service, consultez le didacticiel Nettoyage et résolution des problèmes dans le didacticiel Travail avec les principaux de service.
Autres problèmes
Si vous rencontrez un problème de produit avec Azure CLI non répertorié dans cet article, déposez un problème sur GitHub.