Sdílet prostřednictvím


Ř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í 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 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. Prostředek Azure odkazovaný v hodnotě parametru nebyl nalezen.
Ověřování 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 --debug parametr. Tady jsou příklady neúspěšného i úspěšného --debug příkazu:

# 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 výstupu ladění. 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 výše uvedený výstup chyby --debug 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

Tady je část výstupu ladění. 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 formátování JSON najdete v tématu Citace rozdílů mezi skriptovacími jazyky – řetězce JSON.

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... {něco} je neplatné" může být způsobeno mezerou, jednoduchou nebo dvojitou uvozovkou nebo nedostatkem uvozovek.

  • "Neočekávaný token..." se zobrazí, když je k dispozici nadbytečné místo nebo uvozovka.

  • Chyba "Neplatná hodnota jmespath_type" často pochází z nesprávného uvozovek v parametru --query .

  • Pokud řetězec není správně naformátovaný kvůli zřetězení nebo chybějícímu řídicímu znaku, obdrží se "Odkaz na proměnnou není platný".

  • Nerozpoznané argumenty jsou často způsobeny nesprávným znakem pokračování řádku nebo názvem chybně napsaného 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ů:

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 tsv výstupní typ.

# 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í, když 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 PowerShellu na pravé straně znaku pokračování řádku existuje koncové mezery. V tuto chvíli se splatting nepodporuje s 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í konvence Azure CLI @<file> k obejití interpretace prostředí. Další informace najdete v jednom z těchto článků:

Příklady syntaxe JSON pro Bash, PowerShell a Cmd.exe najdete v tématu Citace rozdílů mezi skriptovacími jazyky – kurz řetězců JSON.

Chyba: InvalidTemplateDeployment

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 westus umístění:

{"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: Chyba SSL Chybný handshake... Ověření certifikátu se nezdařilo" (Proxy blokuje připojení)

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 používaná 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 REQUESTS_CA_BUNDLE prostředí na cestu k 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 /usr/local/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. Pak nastavte REQUESTS_CA_BUNDLE 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 HTTP_PROXY prostředí HTTPS_PROXY by měl zahrnovat ověřování, například HTTPS_PROXY="https://username:password@proxy-server:port". Podrobnosti najdete v tématu Konfigurace proxy pro sadu Azure SDK pro Python.

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, Microsoft.Storage musí být zprostředkovatel zaregistrovaný. Pokud chcete zaregistrovat poskytovatele prostředků, podívejte se na poskytovatele a typy prostředků Azure.

Instanční objekty

Informace o řešení potíží s instančními objekty najdete v tématu Vyčištění a řešení potíží v kurzu Práce s instančními objekty .

Další problémy

Pokud narazíte na problém s produktem s Azure CLI, který není uvedený v tomto článku, vytvořte problém na GitHubu.

Viz také