Řešení potíží s Azure CLI
Kategorie chyb
Většina chyb vrácených Azure CLI spadá do jedné z těchto kategorií:
Kategorie chyby | Obecná příčina chyby |
---|---|
Nerozpoznaný argument | Parametr je chybně napsaný nebo neexistuje. |
Chybí požadovaný argument | Povinný parametr není zadán nebo je zadán pouze jeden ze dvou párů parametrů. Parametr může být také chybně napsaný. |
Vzájemně se vylučující argument | Dva nebo více parametrů nelze zadat společně. |
neplatná hodnota argumentu | Hodnota parametru není platná. Tato chyba je často způsobená uvozováním, řídicím znakem nebo mezerou. |
Chybný požadavek | Stavový kód HTTP 400 vrátí tuto chybu. Zkontrolujte chybějící mezeru, chybějící pomlčku u parametru nebo nadbytečnou nebo chybějící jednoduchou nebo dvojitou uvozovku. K této chybě dochází také v případě, že hodnota parametru neobsahuje povolenou hodnotu. |
Prostředek nebyl nalezen | Nelze nalézt prostředek Azure, na který je odkazováno v hodnotě parametru. |
Autentizace | Ověření Microsoft Entra se nezdařilo. |
Parametr --debug
Jedním z nejlepších způsobů, jak zjistit, co Azure CLI spouští pro každý referenční příkaz Azure CLI, je použít parametr --debug
. Tady jsou příklady --debug
pro neúspěšný i úspěšný příkaz:
# 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
Tady je část ladicího výstupu. Všimněte si umístění protokolu a nerozpoznaný 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
...
Porovnejte chybu --debug
výstupu uvedenému výše s úspěšným spuštěním:
# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug
Zde je část ladicího výstupu. Všimněte si umístění protokolu, volání rozhraní API a doba běhu.
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)
Příklady --debug
pro JSON formátování najdete v části Rozdíly mezi skriptovacími jazyky – JSON řetězce.
Běžné chyby syntaxe
I když azure CLI může běžet v prostředí Bash, PowerShellu i Windows Cmd, mezi skriptovacími jazyky existují rozdíly v syntaxi. Skripty Azure CLI obsahující jednoduché uvozovky, dvojité uvozovky a řídicí znaky se obvykle při kopírování mezi jazyky musí upravit. Tento problém se projevuje nejčastěji v hodnotách parametrů, zejména v hodnotách přiřazených k parametru --query
. Tady je několik běžných chybových zpráv:
Chybný požadavek ... {something} je neplatný" může být způsobeno mezerou, chybou v jednoduchých nebo dvojitých uvozovkách, nebo jejich chyběním.
"Neočekávaný symbol..." se zobrazí, když se vyskytne nadbytečná mezera nebo uvozovka.
"Neplatná hodnota jmespath_type" chyba často pochází z nesprávné uvozovek v parametru
--query
."Odkaz na proměnnou není platný" se zobrazí, když řetězec není správně naformátován, často kvůli zřetězení nebo chybějícímu únikovému znaku."
"nerozpoznané argumenty" je často způsobeno nesprávným znakem pokračování řádku nebo chybně napsaným názvem parametru.
"Chybějící výraz za unárním operátorem" se zobrazí, když chybí znak pokračování řádku.
Existuje několik článků Azure CLI věnovaných vysvětlení chyb syntaxe a poskytování pracovních příkladů:
- Citování rozdílů mezi skriptovacími jazyky
- Rozdíly v syntaxi Bash, PowerShellu a Cmd návodu
- Najděte mnoho příkladů parametrů
--query
v dotazování výstupu příkazu Azure CLI pomocí dotazu JMESPath - použití Azure CLI ve skriptovacím jazyce Bash
- důležité informace o spuštění Azure CLI ve skriptovacím jazyce PowerShellu
Tip
Pokud nemůžete chybu příkazu vyřešit, zkuste použít jiný skriptovací jazyk. Většina dokumentace k Azure CLI je napsaná a otestovaná ve službě Azure Cloud Shell (ACS) pomocí skriptovacího jazyka Bash. Pokud můžete získat příklad článku pro spuštění v ACS Bash, ale nespustí se ve Windows PowerShellu, zkontrolujte použití jednoduchých a dvojitých uvozovek a řídicích znaků.
Chyba: Neplatná hodnota nebo neexistuje
K těmto chybám často dochází při pokusu o použití proměnné hodnoty, která obsahuje nesprávný formát. Výchozí výstup pro Azure CLI je JSON, takže pokud se pokoušíte uložit ID prostředku Azure do proměnné, musíte zadat --output tsv
. Tady je příklad:
# 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'.
Teď použijte typ výstupu 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
Chyba: Argumenty jsou očekávané nebo povinné
Tato chyba se zobrazí v případě, že příkaz Azure CLI chybí požadovaný parametr, nebo dojde k typografické chybě, která způsobí, že Azure CLI nesprávně parsuje referenční příkaz. Při práci se skriptem se také zobrazí tato chyba, pokud platí jedna nebo více podmínek:
- Znak pokračování řádku chybí nebo není správný.
- Při práci ve skriptovacím jazyce PowerShell je na pravé straně znaku pokračování řádku mezera. V současné době splatting není podporováno příkazy Azure CLI.
- Název proměnné obsahuje speciální znak, například pomlčku (-).
Chyba: Prostředek nebyl nalezen.
Pokud Azure CLI nemůže najít název nebo ID prostředku předané v hodnotě parametru, důvodem je obvykle jeden z těchto důvodů:
- Název nebo ID prostředku je nesprávně napsané.
- Název prostředku obsahuje speciální znaky a není obklopen jednoduchými nebo dvojitými uvozovkami.
- Hodnota předaná proměnné má neviditelné úvodní nebo koncové mezery.
- Prostředek existuje, ale je v jiném předplatném.
Chyba: Nepodařilo se analyzovat řetězec ve formátu JSON
Mezi Bashem, PowerShellem v Linuxu a PowerShellem ve Windows existují rozdíly. Kromě toho můžou různé verze PowerShellu vést k různým výsledkům. U složitých parametrů, jako je řetězec JSON, je osvědčeným postupem použití @<file>
konvence Azure CLI k obejití interpretace prostředí. Další informace najdete v jednom z těchto článků:
Příklady syntaxe JSON pro Bash, PowerShell a Cmd.exenaleznete v části Citace rozdílů mezi skriptovacími jazyky – řetězce JSON, kurz.
Chyba: Neplatné nasazení šablony
Při pokusu o vytvoření prostředku Azure v umístění, které tento prostředek nenabízí, se zobrazí chyba podobná této zprávě: Následující skladové položky selhaly pro omezení kapacity: myDesiredSkuName není aktuálně k dispozici v umístění mySpecifiedLocation.
Tady je úplný příklad chyby pro virtuální počítač, který nejde vytvořit v umístění 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."}]}}
Řešením je změnit vlastnost požadovaného prostředku Azure nebo vyzkoušet jiné umístění.
Chyba: Odběr nebyl nalezen.
Za předpokladu, že jste nesprávně nezadali název nebo ID předplatného, dojde k této chybě v případě, že poskytovatel prostředků není zaregistrovaný v aktivním předplatném. Pokud například chcete spustit az storage account create
, poskytovatel Microsoft.Storage
musí být zaregistrovaný. Pro registraci poskytovatele prostředků si prohlédněte poskytovatele prostředků Azure a typy.
Chyba: Špatný handshake... Ověření certifikátu selhalo.
Informace o řešení této chyby najdete v tématu Práce za proxy serverem.
Práce za proxy serverem
Pokud používáte Azure CLI přes proxy server, který používá certifikáty podepsané svým držitelem, může knihovna požadavků Pythonu , kterou používá Azure CLI, způsobit následující chybu: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
. Pokud chcete tuto chybu vyřešit, nastavte proměnnou prostředí REQUESTS_CA_BUNDLE
na cestu souboru certifikátu certifikační autority ve formátu PEM.
Operační systém | Výchozí sada certifikační autority |
---|---|
Windows 32bitová verze | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
Windows 64bitová verze | 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 | Modely Intel: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem Silikonové modely: /opt/homebrew/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem |
Připojte certifikát proxy serveru k souboru certifikátu certifikační autority nebo zkopírujte obsah do jiného souboru certifikátu. Potom nastavte REQUESTS_CA_BUNDLE
na nové umístění souboru. Tady je příklad:
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Některé proxy servery vyžadují ověření. Formát proměnných prostředí HTTP_PROXY
nebo HTTPS_PROXY
by měl zahrnovat ověřování, například HTTPS_PROXY="https://username:password@proxy-server:port"
. Podrobnosti najdete v tématu Postup konfigurace proxy pro sadu Azure SDK pro Python.
Instanční objekty
Informace o řešení potíží s instančními objekty zabezpečení najdete v části Vyčištění a Řešení potíží v kurzu Práce s instančními objekty zabezpečení.
Další problémy
Pokud narazíte na problém s produktem Azure CLI, který není uveden v tomto článku, nahlaste problém na GitHubu.