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:
- Różnice dotyczące cytowania między językami skryptowymi
- Różnice składni w Bashu, PowerShellu i Cmd - poradnik
- Znajdź wiele przykładów parametrów
--query
w Instrukcje wykonywania zapytań dotyczących danych wyjściowych polecenia interfejsu wiersza polecenia platformy Azure przy użyciu zapytania JMESPath - Jak używać interfejsu wiersza polecenia platformy Azure w języku skryptów Bash
- zagadnienia dotyczące uruchamiania interfejsu wiersza polecenia platformy Azure w języku skryptów programu PowerShell
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.