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 obligatoire 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 |
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 paramètre --debug
. Voici des exemples de --debug
pour une commande ayant échoué et réussie :
# 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. Remarquez l’emplacement du journal et l’argument inconnu.
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 l’erreur --debug
sortie 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 des exemples de --debug
pour la mise en forme JSON, consultez : différences de citation 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 paramètre --query
. 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...» apparaît lorsqu'il y a un espace ou un guillemet supplémentaire.
«Valeur de jmespath_type non valide» : L’erreur provient souvent d’une mauvaise utilisation des guillemets dans le paramètre
--query
.« "Référence de variablen’est pas valide" est reçu lorsque la chaîne n'est pas correctement formée, souvent à cause d'une concaténation ou d'un caractère d'échappement manquant. »
«arguments non reconnus» est souvent dû à 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 :
- Citations de différences entre les langages de script
- des différences de syntaxe dans le didacticiel Bash, PowerShell et Cmd
- Trouvez de nombreux exemples de paramètres
--query
dans , comment interroger 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
Pourboire
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 sortie tsv
.
# 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 lorsqu'une erreur typographique entraîne une interprétation 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 du langage de script PowerShell. À ce stade, la fonctionnalité de splatting pour 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 sous Linux et PowerShell sous 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 de @<file>
d’Azure 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 la comparaison des différences entre les langages de script - le didacticiel sur les chaînes JSON.
Erreur : DéploiementDeModèleInvalide
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 fournisseur Microsoft.Storage
doit être inscrit. Pour inscrire un fournisseur de ressources, consultez fournisseurs et types de ressources Azure.
Erreur : Poignée de main 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.
Travailler 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 d'autorité de certification au format PEM.
OS | Bundle d’autorité de certification par défaut |
---|---|
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 | Modèles Intel : /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem Modèles en silicium : /opt/homebrew/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem |
Ajoutez le certificat du serveur proxy au fichier de certificat du groupe d’autorité de certification ou copiez le contenu dans un autre fichier de certificat. Définissez ensuite REQUESTS_CA_BUNDLE
sur le nouvel emplacement du 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, telle que 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.
Entités de service
Pour plus d’informations sur la résolution des problèmes liés aux principaux de service, consultez nettoyage et résolution des problèmes dans le didacticiel Utiliser les principaux de service.
Autres problèmes
Si vous rencontrez un problème de produit avec Azure CLI non répertorié dans cet article, fichier un problème sur GitHub.