Udostępnij przez


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 debugowania

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

# 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ęść wyniku 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 wynik błędu --debug podany we wcześniejszym przykładzie z wykonaniem zakończonym z powodzeniem.

# 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ęść wyniku 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 CLI platformy Azure może działać w powłoce Bash, programie PowerShell oraz wierszu polecenia systemu Windows (cmd.exe), składnia różni się w zależności od języka skryptowego. Skrypty CLI (interfejsu wiersza polecenia) platformy Azure zawierające pojedyncze i podwójne cudzysłowy oraz znaki ucieczki często wymagają modyfikacji podczas przenoszenia między językami. To wyzwanie jest najczęściej ujawniane w wartościach parametrów, szczególnie w przypadku tych przypisanych do parametru --query . Oto kilka typowych komunikatów o błędach:

  • Nieprawidłowe żądanie ... {coś} jest nieprawidłowe: Ten błąd może być spowodowany przez spację, pojedynczy lub podwójny cudzysłów albo ich brak.

  • Nieoczekiwany token...: Ten błąd pojawia się, gdy występuje dodatkowa spacja lub cudzysłów.

  • Nieprawidłowa wartość jmespath_type: ten błąd często wynika z niepoprawnego użycia cudzysłowów w parametrze --query.

  • Odwołanie do zmiennej jest nieprawidłowe: Ten błąd pojawia się, gdy ciąg nie jest poprawnie sformatowany, często z powodu łączenia lub brakującego znaku escape.

  • Nierozpoznane argumenty: ten błąd jest często spowodowany nieprawidłowym znakiem kontynuacji wiersza lub błędną nazwą parametru.

  • Brak wyrażenia po operatorze jednoargumentowym: ten błąd występuje, 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:

Wskazówka

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 pisana i testowana w usłudze Azure Cloud Shell, która korzysta z języka skryptowego Bash. Jeśli możesz uruchomić przykład kodu w Bash, ale nie udaje się to w PowerShell, sprawdź użycie cudzysłowów pojedynczych i podwójnych oraz znaków ucieczki.

Rozwiązywanie problemów z uwierzytelnianiem wieloskładnikowych (MFA)

Błędy logowania interakcyjnego

Jeśli wystąpią błędy podczas uruchamiania poleceń interfejsu wiersza polecenia platformy Azure, które tworzą, modyfikują lub usuwają zasoby, problem może być spowodowany przez zasady dostępu warunkowego identyfikatora Entra firmy Microsoft, które wymagają uwierzytelniania wieloskładnikowego (MFA).

Te błędy zwykle występują, gdy uwierzytelnianie wieloskładnikowe jest wymagane przez zasady, ale nie jest wymuszane podczas logowania.

Zasób został niedozwolony przez zasady

Podczas używania polecenia może zostać wyświetlony jeden z następujących błędów:

  • Interfejs wiersza polecenia platformy Azure w wersji 2.75.0 lub starszej
Due to a configuration change made by your administrator, or because you moved to a new location,
you must enroll in multi-factor authentication. Interactive authentication is needed.

Lub:

Resource was disallowed by policy. Reasons: MFA is required. See error details for policy resource
IDs. RequestDisallowedByPolicy Message: Resource policy resource IDs was disallowed by policy.
Reasons: MFA is required.

Lub:

Unauthorized. RequestDisallowedByPolicy. Resource was disallowed by policy. Reasons: MFA is
required. See error details for policy resource IDs. MFA is required. Users must authenticate with
multi-factor authentication to create or update resources.

Uaktualnij do następujących wersji lub nowszych, aby otrzymywać bardziej informacyjne komunikaty o błędach i szczegóły zasad:

  • Interfejs wiersza polecenia platformy Azure w wersji 2.76.0 lub nowszej

Następujący błąd występuje w interfejsie wiersza polecenia platformy Azure w wersji 2.76.0 lub nowszej, gdzie uwierzytelnianie wieloskładnikowe jest wymagane przez dostęp warunkowy do określonych operacji.

Run the command below to authenticate interactively; additional arguments may be added as needed:
az logout 
az login --tenant "aaaabbbb-0000-cccc-1111-dddd2222eeee" --scope "https://management.core.windows.net//.default" --claims-challenge "<claims-challenge-token>"

(RequestDisallowedByPolicy) Resource was disallowed by policy. Policy identifiers. Users must use
MFA for Create/Update operations. Users must authenticate with multi-factor authentication to create
or update resources. Users must use MFA for Create operation. Users must authenticate with
multi-factor authentication to create or update resources. Users must use MFA for Create/Update
operations. Users must authenticate with multi-factor authentication to create or update resources.
Users must use MFA for Create operation. Users must authenticate with multi-factor authentication to
create or update resources.

Opcje rozwiązywania

  • Poproś administratora platformy Azure o wymuszenie uwierzytelniania wieloskładnikowego podczas logowania. Dzięki temu sesja może spełniać wymagania dostępu warunkowego bez dodatkowych kroków.

  • Jeśli wymuszanie uwierzytelniania wieloskładnikowego podczas logowania nie jest możliwe, użyj parametru w celu interaktywnego --claims-challenge uwierzytelniania:

    az logout
    az login --tenant "aaaabbbb-0000-cccc-1111-dddd2222eeee" --scope "https://management.core.windows.net//.default" --claims-challenge "<claims-challenge-token>"
    

Aby uzyskać więcej informacji, zobacz Planowanie obowiązkowego uwierzytelniania wieloskładnikowego dla platformy Azure i innych portali administracyjnych

Ładowanie bibliotek DLL nie powiodło się podczas importowania pliku win32

Podczas próby użycia interfejsu wiersza polecenia platformy Azure może wystąpić następujący błąd:

DLL load failed while importing win32file: The specified module could not be found.
The command failed with an unexpected error. Here is the traceback:
DLL load failed while importing win32file: The specified module could not be found.
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/__main__.py", line 13, in <module>
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/telemetry.py", line 19, in <module>
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/telemetry/__init__.py", line 9, in <module>
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\portalocker/__init__.py", line 4, in <module>
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\portalocker/portalocker.py", line 11, in <module>
ImportError: DLL load failed while importing win32file: The specified module could not be found.
PS C:\Users\dsevilla>

Ten problem może wystąpić z powodu uszkodzonej instalacji. Aby rozwiązać ten problem:

  1. Odinstaluj Azure CLI.
  2. Zainstaluj ponownie interfejs wiersza polecenia platformy Azure przy użyciu preferowanej metody instalacji.

Aby uzyskać więcej informacji, zobacz Problem z usługą GitHub #32045.

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

Te błędy często występują podczas próby użycia wartości zmiennych, które zawierają niepoprawny format. Domyślne dane wyjściowe interfejsu wiersza polecenia platformy Azure to JSON. 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.
  • Podczas pracy w języku skryptowym PowerShell, po prawej stronie symbolu kontynuacji wiersza znajduje się spacja końcowa. Splatting programu PowerShell jest obsługiwany tylko w przypadku tablic, a nie tabel skrótów 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 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, najlepszą praktyką jest użycie konwencji Azure CLI @<file> 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 samouczek Różnice w cytowaniu między językami skryptowymi — ciągi JSON.

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ń pojemności: 'myDesiredSkuName' jest obecnie niedostępne w lokalizacji 'mySpecifiedLocation'".

Oto kompletny 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

Zakładając, że nazwa subskrypcji lub identyfikator nie zostały wpisane niepoprawnie, ten błąd występuje, gdy dostawca zasobów nie jest zarejestrowany w aktywnej subskrypcji. Aby na przykład wykonać az storage account create, dostawca Microsoft.Storage musi być zarejestrowany. Aby zarejestrować dostawcę zasobów, zobacz Dostawcy i typy zasobów Azure.

Błąd: Sprawdzanie nieprawidłowego certyfikatu uzgadniania nie powiodło 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ługowe

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 także