Udostępnij za pośrednictwem


Rozwiązywanie problemów z interfejsem wiersza polecenia platformy Azure

Kategorie błędów

Większość błędów zwracanych przez interfejs wiersza polecenia platformy Azure należy do jednej z następujących kategorii:

Kategoria błędów Ogólna przyczyna błędu
Nierozpoznany argument Parametr jest błędnie napisany lub nie istnieje.
Brak wymaganego argumentu Wymagany parametr nie jest określony lub określono tylko jedną z dwóch "par parametrów". Parametr może być również błędnie napisany.
Wzajemnie wykluczające się argumenty Nie można określić razem co najmniej dwóch parametrów.
Nieprawidłowa wartość argumentu Wartość parametru jest nieprawidłowa. Ten błąd jest często spowodowany cudzysłów, znakiem ucieczki lub odstępem.
Nieprawidłowe żądanie Kod stanu HTTP 400 zwraca ten błąd. Sprawdź brakujące miejsce, brak kreski parametru lub dodatkowy lub brak pojedynczego lub podwójnego cudzysłowu. Ten błąd występuje również wtedy, gdy wartość parametru nie zawiera dozwolonej wartości.
Nie znaleziono zasobu Nie można odnaleźć zasobu platformy Azure, do których odwołuje się wartość parametru.
Uwierzytelnianie Uwierzytelnianie entra firmy Microsoft nie powiodło się.

Parametr --debug

Jednym z najlepszych sposobów sprawdzenia, co interfejs wiersza polecenia platformy Azure wykonuje dla każdego polecenia referencyjnego interfejsu wiersza polecenia platformy Azure, jest użycie parametru --debug . Oto przykłady --debug zarówno nieudanego, jak i pomyślnego polecenia:

# 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

Oto część danych wyjściowych debugowania. Zwróć uwagę na lokalizację dziennika i nierozpoznany 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
...

Porównaj dane wyjściowe błędu --debug podane powyżej z pomyślnym wykonaniem:

# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug

Oto część danych wyjściowych debugowania. Zwróć uwagę na lokalizację dziennika, wywołanie interfejsu API i czas wykonywania.

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)

--debug Przykłady formatowania JSON można znaleźć w temacie Quoting differences between scripting languages - JSON strings (Cytowanie różnic między językami skryptów — ciągi JSON).

Typowe błędy składniowe

Mimo że interfejs wiersza polecenia platformy Azure może działać zarówno w powłoce Bash, programie PowerShell, jak i w narzędziu Cmd systemu Windows, istnieją różnice składniowe między językami skryptów. Skrypty interfejsu wiersza polecenia platformy Azure zawierające pojedyncze cudzysłowy, cudzysłowy i znaki ucieczki zwykle muszą być modyfikowane podczas kopiowania między językami. To wyzwanie ujawnia się najczęściej w wartościach parametrów, zwłaszcza w wartościach przypisanych do parametru --query . Oto kilka typowych komunikatów o błędach:

  • "Nieprawidłowe żądanie ... Element {something} jest nieprawidłowy" może być spowodowany spacją, pojedynczym lub podwójnym cudzysłowem albo brakiem cudzysłowu.

  • "Nieoczekiwany token...", jest wyświetlany, gdy istnieje dodatkowa spacja lub cudzysłów.

  • Błąd "Nieprawidłowa wartość jmespath_type" często pochodzi z niepoprawnego cudzysłów w parametrze --query .

  • "Odwołanie do zmiennej jest nieprawidłowe" jest odbierane, gdy ciąg nie jest poprawnie sformatowany z powodu łączenia lub brakującego znaku ucieczki.

  • "Nierozpoznane argumenty" jest często spowodowane nieprawidłowym znakiem kontynuacji wiersza lub błędną nazwą parametru.

  • "Brak wyrażenia po operatorze jednoargumentowym" jest wyświetlany, gdy brakuje znaku kontynuacji wiersza.

Istnieje kilka artykułów interfejsu wiersza polecenia platformy Azure poświęconych wyjaśnianiu błędów składniowych i udostępnianiu przykładów roboczych:

Napiwek

Jeśli nie możesz rozwiązać błędu polecenia, spróbuj użyć innego języka skryptów. Większość dokumentacji interfejsu wiersza polecenia platformy Azure jest napisana i przetestowana w usłudze Azure Cloud Shell (ACS) przy użyciu języka skryptów powłoki Bash. Jeśli możesz uzyskać przykładowy artykuł do wykonania w powłoce ACS Bash, ale nie zostanie wykonany w programie Windows PowerShell, zapoznaj się z użyciem cudzysłowów pojedynczych i podwójnych oraz znaków ucieczki.

Błąd: Nieprawidłowa wartość lub nie istnieje

Te błędy często występują podczas próby użycia wartości zmiennej zawierającej niepoprawny format. Domyślne dane wyjściowe interfejsu wiersza polecenia platformy Azure to JSON, więc jeśli próbujesz zapisać identyfikator zasobu platformy Azure w zmiennej, musisz określić wartość --output tsv. Oto przykład:

# 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'.

Teraz użyj typu danych wyjściowych 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

Błąd: Argumenty są oczekiwane lub wymagane

Ten błąd występuje, gdy w poleceniu interfejsu wiersza polecenia platformy Azure brakuje wymaganego parametru lub występuje błąd typograficzne, który powoduje, że interfejs wiersza polecenia platformy Azure nieprawidłowo analizuje polecenie referencyjne. Podczas pracy ze skryptem występuje również ten błąd, gdy spełniony jest co najmniej jeden warunek:

  • Brak znaku kontynuacji wiersza lub jest on niepoprawny.
  • Spacja końcowa istnieje po prawej stronie znaku kontynuacji wiersza podczas pracy w języku skryptowym programu PowerShell. Obecnie splatting nie jest obsługiwany za pomocą poleceń interfejsu wiersza polecenia platformy Azure.
  • Nazwa zmiennej zawiera znak specjalny, taki jak kreska (-).

Błąd: Nie znaleziono zasobu

Gdy interfejs wiersza polecenia platformy Azure nie może odnaleźć nazwy zasobu lub identyfikatora przekazanego w wartości parametru, zwykle jest to spowodowane jedną z następujących przyczyn:

  • Nazwa zasobu lub identyfikator jest niepoprawnie wpisana.
  • Nazwa zasobu zawiera znaki specjalne i nie jest otoczona pojedynczymi lub podwójnymi cudzysłowami.
  • Wartość przekazywana do zmiennej ma niezaznaczone spacje wiodące lub końcowe.
  • Zasób istnieje, ale znajduje się w innej subskrypcji.

Błąd: Nie można przeanalizować ciągu w formacie JSON

Istnieją różnice między powłoką Bash, programem PowerShell w systemie Linux i programem PowerShell w systemie Windows. Ponadto różne wersje programu PowerShell mogą generować różne wyniki. W przypadku złożonych parametrów, takich jak ciąg JSON, najlepszym rozwiązaniem jest użycie konwencji interfejsu wiersza polecenia @<file> platformy Azure w celu obejścia interpretacji powłoki. Aby uzyskać więcej informacji, zobacz jeden z następujących artykułów:

Przykłady składni JSON dla powłoki Bash, programu PowerShell i Cmd.exe można znaleźć w artykule Quoting differences between scripting languages - JSON strings tutorial (Cytowanie różnic między językami skryptów — ciągi JSON).

Błąd: InvalidTemplateDeployment

Podczas próby utworzenia zasobu platformy Azure w lokalizacji, która nie oferuje tego zasobu, zostanie wyświetlony komunikat o błędzie podobny do następującego: "Następujące jednostki SKU nie powiodły się w przypadku ograniczeń pojemności: myDesiredSkuName" jest obecnie niedostępny w lokalizacji "mySpecifiedLocation".

Oto pełny przykład błędu dla maszyny wirtualnej, której nie można utworzyć w westus lokalizacji:

{"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."}]}}

Rozwiązaniem jest zmiana właściwości żądanego zasobu platformy Azure lub wypróbowanie innej lokalizacji.

Błąd: Nie znaleziono subskrypcji

Przy założeniu, że nie wpisano niepoprawnie nazwy subskrypcji lub identyfikatora, ten błąd występuje, gdy dostawca zasobów nie jest zarejestrowany w aktywnej subskrypcji. Jeśli na przykład chcesz wykonać az storage account createpolecenie , Microsoft.Storage dostawca musi być zarejestrowany. Aby zarejestrować dostawcę zasobów, zobacz Dostawcy zasobów i typy platformy Azure.

Błąd: Nieprawidłowy uścisk dłoni... Weryfikacja certyfikatu nie powiodła się

Aby uzyskać informacje na temat rozwiązywania tego błędu, zobacz Praca za serwerem proxy .

Praca za serwerem proxy

Jeśli używasz interfejsu wiersza polecenia platformy Azure za pośrednictwem serwera proxy korzystającego z certyfikatów z podpisem własnym, biblioteka żądań języka Python używana przez interfejs wiersza polecenia platformy Azure może spowodować następujący błąd: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",). Aby rozwiązać ten błąd, ustaw zmienną środowiskową REQUESTS_CA_BUNDLE na ścieżkę pliku certyfikatu pakietu urzędu certyfikacji w formacie PEM.

System operacyjny Domyślny pakiet urzędu certyfikacji
Windows 32-bitowy C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
Windows 64-bitowy 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

Dołącz certyfikat serwera proxy do pliku certyfikatu pakietu urzędu certyfikacji lub skopiuj zawartość do innego pliku certyfikatu. Następnie ustaw REQUESTS_CA_BUNDLE nową lokalizację pliku. Oto przykład:

<Original cacert.pem>

-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----

Niektóre serwery proxy wymagają uwierzytelniania. Format HTTP_PROXY zmiennych środowiskowych lub HTTPS_PROXY powinien zawierać uwierzytelnianie, takie jak HTTPS_PROXY="https://username:password@proxy-server:port". Aby uzyskać szczegółowe informacje, zobacz How to configure proxyies for the Azure SDK for Python (Jak skonfigurować serwery proxy dla zestawu Azure SDK dla języka Python).

Jednostki usługi

Aby uzyskać informacje na temat rozwiązywania problemów z jednostkami usługi, zobacz Artykuł Oczyszczanie i rozwiązywanie problemów w samouczku Praca z jednostkami usługi.

Inne problemy

Jeśli wystąpi problem z produktem z interfejsem wiersza polecenia platformy Azure, który nie został wymieniony w tym artykule, zgłoś problem w usłudze GitHub.

Zobacz też