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í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ů:

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.

Viz také