Устранение неполадок Azure CLI
Категории ошибок
Большинство ошибок, возвращаемых Azure CLI, входят в одну из следующих категорий:
Категория ошибок | Причина общей ошибки |
---|---|
Нераспознанный аргумент | Параметр не указан или не существует. |
Обязательный аргумент отсутствует | Обязательный параметр не указан или указана только одна из двух пар параметров. Параметр также может быть неправильно написан. |
Взаимоисключающий аргумент | Невозможно указать два или более параметров. |
недопустимое значение аргумента | Значение параметра недопустимо. Эта ошибка часто возникает из-за кавыка, escape-символа или интервала. |
Недопустимый запрос | Код состояния HTTP 400 возвращает эту ошибку. Проверьте отсутствие пробела, отсутствующий дефис для параметра или дополнительную или отсутствующую одинарную или двойную кавычку. Эта ошибка также возникает, если значение параметра не содержит допустимое значение. |
ресурс не найден | Ресурс Azure, на который ссылается значение параметра, не найден. |
Аутентификация | Сбой проверки подлинности Microsoft Entra. |
Параметр --debug
Одним из лучших способов узнать, что выполняет Azure CLI для каждой справочной команды Azure CLI, является использование параметра --debug
. Ниже приведены примеры --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
Ниже приведена часть выходных данных отладки. Обратите внимание на расположение журнала логов и нераспознанный аргумент.
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
...
Сравните выходные данные ошибки --debug
, указанные выше, с успешным выполнением:
# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug
Ниже приведена часть выходных данных отладки. Обратите внимание на расположение журнала, вызов API и время выполнения.
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
форматирования JSON в разделе «Различия между языками сценариев — строками JSON».
Распространенные синтаксические ошибки
Хотя Azure CLI может работать как в Bash, PowerShell, так и в Windows Cmd, существуют различия в синтаксисе между языками сценариев. Скрипты Azure CLI, содержащие одинарные кавычки, двойные кавычки и escape-символы, обычно необходимо изменять при копировании между языками. Эта проблема чаще всего обнаруживается в значениях параметров, особенно в значениях, назначенных параметру --query
. Ниже приведены некоторые распространенные сообщения об ошибках:
"Недопустимый запрос ... {что-то} является недопустимым" может быть вызван пробелом, одним или двойным кавычками или отсутствием кавычки.
"непредвиденный токен..." отображается, когда есть дополнительное пространство или цитата.
"Недопустимое значение jmespath_type" эта ошибка часто возникает из-за неправильных кавычек в параметре
--query
."Ошибка 'ссылка на переменнуюне является допустимой' возникает, когда строка не отформатирована должным образом из-за конкатенации или отсутствия escape-символов."
"нераспознанные аргументы" часто вызваны неправильным символом продолжения строки или именем неправильного параметра.
Ошибка ": отсутствует выражение после унарного оператора" отображается, когда отсутствует символ продолжения строки.
Существует несколько статей Azure CLI, посвященных объяснению синтаксических ошибок и предоставлению рабочих примеров.
- Цитирование различий между языками сценариев
- Различия синтаксиса в руководстве по Bash, PowerShell и Cmd
- Найдите множество примеров параметров
--query
в как запросить выходные данные команды Azure CLI с помощью запроса JMESPath - практическое руководство по использованию Azure CLI в языке сценариев Bash
- Рекомендации по запуску Azure CLI на языке сценариев PowerShell
Совет
Если не удается устранить ошибку команды, попробуйте использовать другой язык сценариев. Большая часть документации по Azure CLI написана и протестирована в Azure Cloud Shell (ACS) с помощью языка сценариев Bash. Если вы можете получить пример статьи для выполнения в ACS Bash, но он не будет выполняться в Windows PowerShell, просмотрите использование одинарных и двойных кавычки и escape-символов.
Ошибка: недопустимое значение или значения не существует
Эти ошибки часто возникают при попытке использовать переменное значение, содержащее неправильный формат. Выходные данные по умолчанию для Azure CLI — JSON, поэтому если вы пытаетесь сохранить идентификатор ресурса Azure в переменной, необходимо указать --output tsv
. Ниже приведен пример:
# 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'.
Теперь используйте тип вывода 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
Ошибка: аргументы ожидаются или требуются
Эта ошибка возникает, если команда Azure CLI отсутствует обязательный параметр или есть типографическая ошибка, которая приводит к неправильному анализу команды ссылки. При работе со скриптом эта ошибка также возникает, если выполняется одно или несколько условий.
- Символ продолжения строки отсутствует или неправилен.
- Пробел существует в правой части символа продолжения строки при работе на языке сценариев PowerShell. В настоящее время не поддерживается в Azure CLI командах.
- Имя переменной содержит специальный символ, например тире (-).
Ошибка: ресурс не найден
Если Azure CLI не может найти имя ресурса или идентификатор, переданный в значение параметра, обычно это связано с одной из следующих причин:
- Имя ресурса или идентификатор написаны неправильно.
- Имя ресурса содержит специальные символы и не окружено одними или двойными кавычками.
- Значение, передаваемое переменной, имеет незамеченные начальные или конечные пробелы.
- Ресурс существует, но находится в другой подписке.
Ошибка: не удалось проанализировать строку в формате JSON
Существуют различия между Bash, PowerShell в Linux и PowerShell в Windows. Кроме того, различные версии PowerShell могут создавать различные результаты. Для сложных параметров, таких как строка JSON, рекомендуется использовать соглашение @<file>
Azure CLI для обхода интерпретации оболочки. Дополнительные сведения см. в одной из следующих статей:
Примеры синтаксиса JSON для Bash, PowerShell и Cmd.exeсмотрите в руководстве Различия между языками сценариев — строки JSON.
Ошибка: InvalidTemplateDeployment
При попытке создать ресурс Azure в расположении, которое не предлагает этот ресурс, вы получите ошибку, аналогичную этому сообщению: "Следующие SKU не прошли проверку из-за ограничений по емкости: myDesiredSkuName" в настоящее время недоступен в расположении mySpecifiedLocation".
Ниже приведен полный пример ошибки для виртуальной машины, которая не может быть создана в расположении 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."}]}}
Решение — изменить свойство запрошенного ресурса Azure или попробовать другое расположение.
Ошибка: подписка не найдена
Если вы не ввели неправильное имя подписки или идентификатор, эта ошибка возникает, когда поставщик ресурсов не зарегистрирован в активной подписке. Например, если требуется выполнить az storage account create
, необходимо зарегистрировать поставщика Microsoft.Storage
. Для регистрации поставщика ресурсов см. раздел поставщики ресурсов Azure и их типы.
Ошибка: неудачное рукопожатие... сертификат не прошел проверку
См. Работу через прокси-сервер для получения информации о том, как устранить эту ошибку.
Работа через прокси-сервер
Если вы используете Azure CLI на прокси-сервере, использующего самозаверяющие сертификаты, библиотека запросов Python запрашивает, используемую Azure CLI, может привести к следующей ошибке: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
. Чтобы устранить эту ошибку, задайте переменную среды REQUESTS_CA_BUNDLE
путь к файлу сертификата пакета ЦС в формате PEM.
ОС | Пакет сертификатов центра сертификации по умолчанию |
---|---|
Windows 32-разрядная версия | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
Windows 64-разрядная версия | 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 | Модели Intel: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem Модели кремния: /opt/homebrew/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem |
Добавьте сертификат прокси-сервера в файл сертификата пакета ЦС или скопируйте его содержимое в другой файл сертификата. Затем установите REQUESTS_CA_BUNDLE
на новое расположение файла. Ниже приведен пример:
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Для некоторых прокси-серверов требуется проверка подлинности. Формат переменных среды HTTP_PROXY
или HTTPS_PROXY
должен включать проверку подлинности, например HTTPS_PROXY="https://username:password@proxy-server:port"
. Дополнительные сведения см. в статье Настройка прокси-серверов для пакета SDK Azure для Python.
Служебные принципалы
Сведения об устранении неполадок учетных записей службы см. в разделе Очистка и устранение неполадок в руководстве Работа с учетными записями службы.
Другие проблемы
Если у вас возникла проблема с продуктом Azure CLI, не указанная в этой статье, сообщите о проблеме на GitHub.