Устранение неполадок 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 отсутствует обязательный параметр или возникает типографическая ошибка, которая приводит к неправильному анализу команды ссылки. При работе с скриптом эта ошибка также возникает, если одно или несколько условий имеют значение true:
- Символ продолжения строки отсутствует или неправильно.
- Конечное пространство существует в правой части символа продолжения строки при работе на языке сценариев PowerShell. В настоящее время splatting не поддерживается с командами Azure CLI.
- Имя переменной содержит специальный символ, например тире (-).
Ошибка: ресурс не найден
Если Azure CLI не может найти имя ресурса или идентификатор, переданный в значение параметра, обычно это связано с одной из следующих причин:
- Имя ресурса или идентификатор написаны неправильно.
- Имя ресурса содержит специальные символы и не окружено одними или двойными кавычками.
- Значение, передаваемое переменной, имеет незамеченные начальные или конечные пробелы.
- Ресурс существует, но находится в другой подписке.
Ошибка: не удалось проанализировать строку в формате JSON
Существуют различия между Bash, PowerShell в Linux и PowerShell в Windows. Кроме того, различные версии PowerShell могут создавать различные результаты. Для сложных параметров, таких как строка JSON, рекомендуется использовать соглашение Azure CLI @<file>
для обхода интерпретации оболочки. Дополнительные сведения см. в одной из следующих статей:
Примеры синтаксиса 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 | /usr/local/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.