Udostępnij za pośrednictwem


Rozwiązywanie problemów z Azure CLI

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 argumentu wymaganego 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 dwóch lub więcej parametrów.
nieprawidłowa wartość argumentu Wartość parametru jest nieprawidłowa. Ten błąd jest często spowodowany przez cudzysłowem, znakiem escape lub odstępem.
Nieprawidłowe żądanie Kod stanu HTTP 400 zwraca ten błąd. Sprawdź brakującą spację, brakującą pauzę parametru lub dodatkowy lub brakujący pojedynczy lub podwójny cudzysłów. Ten błąd występuje również wtedy, gdy wartość parametru nie zawiera dozwolonej wartości.
Nie można odnaleźć zasobu Nie można odnaleźć zasobu platformy Azure, do których odwołuje się wartość parametru.
Uwierzytelnianie Uwierzytelnianie Microsoft Entra 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 dla 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. Zauważ 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 błąd --debug danych wyjściowych podanych 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 fragment wyników 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)

Aby zobaczyć przykłady --debug formatowania JSON, przejdź do Różnice w cytowaniu między językami skryptowymi - ciągi JSON.

Typowe błędy składniowe

Mimo że Azure CLI może działać zarówno w powłoce Bash, jak i w programie PowerShell oraz narzędziu Cmd systemu Windows, istnieją różnice składniowe między językami skryptów. Skrypty Azure CLI zawierające pojedyncze znaki cudzysłowu, podwójne znaki cudzysłowu i znaki ucieczki zazwyczaj wymagają zmiany 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 to być spowodowane spacją, pojedynczym lub podwójnym cudzysłowem albo brakiem cudzysłowu.

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

  • "Błąd „Nieprawidłowa wartość jmespath_type” często pochodzi z niepoprawnych cudzysłowó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” są często spowodowane nieprawidłowym znakiem końca linii lub błędnie wpisaną nazwą parametru.

  • "Brak wyrażenia po operatorze jednoargumentowym" wyświetla się, 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 Azure CLI jest napisana i przetestowana w usłudze Azure Cloud Shell (ACS) przy użyciu języka skryptowego Bash. Jeśli możesz uruchomić przykładowy skrypt w ACS Bash, ale nie działa w Windows PowerShell, zapoznaj się z użyciem cudzysłowów pojedynczych i podwójnych oraz znaków specjalnych do 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ć --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 Azure CLI brakuje wymaganego parametru lub występuje błąd typograficzny, który powoduje niepoprawne zinterpretowanie polecenia odniesienia. 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. W tej chwili splatting nie jest obsługiwane przy użyciu poleceń Azure CLI.
  • 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 niewidoczne spacje początkowe 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 w sposobie cytowania między Bash, PowerShell w systemie Linux i 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 @<file> w Azure CLI, aby uniknąć interpretacji przez powłokę. Aby uzyskać więcej informacji, zobacz jeden z następujących artykułów:

Aby zapoznać się z przykładami składni JSON dla powłoki Bash, programu PowerShell i Cmd.exe, zobacz Cytowanie różnic między językami skryptów — ciągi JSON samouczka.

Błąd: NieprawidłoweWdrożenieSzablonu

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 są dostępne z powodu ograniczeń dotyczących możliwości: myDesiredSkuName jest obecnie niedostępny w lokalizacji mySpecifiedLocation.

Oto pełny przykład błędu maszyny wirtualnej, której nie można utworzyć w lokalizacji 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."}]}}

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 create, należy zarejestrować dostawcę Microsoft.Storage. Aby zarejestrować dostawcę zasobów, zobacz dostawcy zasobów platformy Azure i typy.

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 CA 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 Modele Intela: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem

Modele krzemowe: /opt/homebrew/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem

Dołącz certyfikat serwera proxy do pliku pakietu certyfikatów CA lub skopiuj jego zawartość do innego pliku certyfikatu. Następnie ustaw REQUESTS_CA_BUNDLE na 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 zmiennych środowiskowych HTTP_PROXY lub HTTPS_PROXY powinien obejmować uwierzytelnianie, takie jak HTTPS_PROXY="https://username:password@proxy-server:port". Aby uzyskać szczegółowe informacje, zobacz Jak skonfigurować serwery proxy dla Azure SDK dla Pythona.

Podmioty usługi

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

Inne problemy

Jeśli wystąpi problem z interfejsem wiersza polecenia produktu Azure, który nie jest wymieniony w tym artykule, zgłoś problem na GitHubie.

Zobacz też