Compartir a través de


Solución de problemas de la CLI de Azure

Categorías de error

La mayoría de los errores devueltos por la CLI de Azure se dividen en una de estas categorías:

Categoría del error Causa general del error
Argumento no reconocido Un parámetro está mal escrito o no existe.
Falta el argumento requerido No se especifica un parámetro necesario o solo se especifica uno de los dos "pares de parámetros". Un parámetro también puede estar mal escrito.
Argumento mutuamente excluyente No se pueden especificar dos o más parámetros juntos.
Valor de argumento no válido El valor del parámetro no es válido. Este error suele deberse al uso incorrecto de comillas, un carácter de escape o un espaciado.
Solicitud incorrecta Un código de estado HTTP de 400 devuelve este error. Busque un espacio que falte, un guión de parámetro que falte o una comilla simple o doble adicional o que falte. Este error también se produce cuando un valor de parámetro no contiene un valor permitido.
Recurso no encontrado No se puede encontrar un recurso de Azure al que se hace referencia en un valor de parámetro.
Autenticación Error de autenticación de Microsoft Entra.

Parámetro de depuración

Una de las mejores maneras de ver qué se está ejecutando la CLI de Azure para cada comando de referencia es usar el --debug parámetro . Estos son ejemplos de --debug para comandos fallidos y exitosos:

# 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

Aquí tienes una parte de la salida de depuración. Observe la ubicación del registro y el argumento no reconocido.

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
...

Compare la salida de error --debug dada en el ejemplo anterior con una ejecución correcta:

# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug

Aquí tienes una parte de la salida de depuración. Observe la ubicación del registro, la llamada API y el tiempo de ejecución.

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)

Para obtener ejemplos de --debug para el formato JSON, consulte diferencias en las citas entre los lenguajes de scripting: cadenas JSON.

Errores comunes de sintaxis

Aunque la CLI de Azure se puede ejecutar en Bash, PowerShell y el símbolo del sistema de Windows (cmd.exe), hay diferencias de sintaxis entre los lenguajes de scripting. Los scripts de la CLI de Azure que contienen comillas simples, comillas dobles y caracteres de escape suelen requerir modificaciones cuando se copian entre idiomas. Este desafío suele revelarse en valores de parámetro, especialmente en los asignados al --query parámetro . Estos son algunos mensajes de error comunes:

  • Solicitud incorrecta... {algo} no es válido: este error puede deberse a un espacio, comillas simples o dobles o a la falta de una comilla.

  • Token inesperado...: este error se ve cuando hay un espacio o comillas adicionales.

  • Valor de jmespath_type no válido: Este error suele provenir de comillas incorrectas en el parámetro --query.

  • La referencia de variable no es válida: este error se recibe cuando una cadena no tiene el formato correcto, a menudo debido a la concatenación o a un carácter de escape que falta.

  • Argumentos no reconocidos: este error suele deberse a un carácter de continuación de línea incorrecto o a un nombre de parámetro mal escrito.

  • Expresión que falta después del operador unario: este error se ve cuando falta un carácter de continuación de línea.

Hay varios artículos de la CLI de Azure dedicados a explicar los errores de sintaxis y proporcionar ejemplos de trabajo:

Sugerencia

Si no puede resolver un error de comando, intente usar otro lenguaje de scripting. La mayoría de la documentación de la CLI de Azure se escribe y prueba en Azure Cloud Shell, que usa el lenguaje de scripting de Bash. Si puede obtener un ejemplo de artículo para ejecutar en Bash, pero no se ejecuta en PowerShell, revise el uso de comillas simples y dobles y caracteres de escape.

Solución de problemas de autenticación multifactor (MFA)

Errores de inicio de sesión interactivos

Si se producen errores al ejecutar comandos de la CLI de Azure que crean, modifican o eliminan recursos, el problema puede deberse a una directiva de acceso condicional de Id. de Microsoft Entra que requiere autenticación multifactor (MFA).

Estos errores suelen producirse cuando la directiva requiere MFA, pero no se aplica durante el inicio de sesión.

El recurso no está permitido por la política

Es posible que vea uno de los siguientes errores al usar:

  • CLI de Azure, versión 2.75.0 o anterior
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.

O:

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.

O:

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.

Actualice a las siguientes versiones o posteriores para recibir mensajes de error y detalles de directiva más informativos:

  • CLI de Azure, versión 2.76.0 o posterior

El siguiente error se produce en la CLI de Azure 2.76.0 y versiones posteriores, donde el acceso condicional requiere MFA para operaciones específicas.

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.

Opciones de resolución

  • Pida al administrador de Azure que aplique MFA al iniciar sesión. Esto permite que la sesión cumpla los requisitos de acceso condicional sin pasos adicionales.

  • Si la aplicación de MFA en el inicio de sesión no es posible, use el --claims-challenge parámetro para autenticarse de forma interactiva:

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

Para más información, consulte Planeamiento de la autenticación multifactor obligatoria para Azure y otros portales de administración.

Error de carga de DLL al importar win32file

Es posible que experimente el siguiente error al intentar usar la CLI de Azure:

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>

Este problema puede producirse debido a una instalación dañada. Para resolver el problema:

  1. Desinstale la CLI de Azure.
  2. Vuelva a instalar la CLI de Azure mediante el método de instalación preferido.

Para obtener más información, vea Problema de GitHub n.º 32045.

Error: Valor no válido o no existe

Estos errores a menudo se producen al intentar usar valores de variable que contienen un formato incorrecto. La salida predeterminada de la CLI de Azure es JSON. Si intenta almacenar un identificador para un recurso de Azure en una variable, debe especificar --output tsv. Este es un ejemplo:

# 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'.

Ahora use el tipo de salida 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

Error: Se esperan o requieren argumentos

Recibe este error cuando falta un parámetro obligatorio en un comando de la CLI de Azure o se produce un error tipográfico que hace que la CLI de Azure analice incorrectamente el comando de referencia. Al trabajar con un script, también recibirá este error cuando se cumplen una o varias condiciones:

  • Falta un carácter de continuación de línea o es incorrecto.
  • Existe un espacio final en el lado derecho de un carácter de continuación de línea al trabajar en el lenguaje de scripting de PowerShell. Splatting de PowerShell solo se admite con matrices y no con tablas hash en los comandos de la CLI de Azure.
  • Un nombre de variable contiene un carácter especial, como un guión (-).

Error: Recurso no encontrado

Cuando la CLI de Azure no encuentra el nombre del recurso o el identificador pasados en un valor de parámetro, suele deberse a uno de estos motivos:

  • El nombre o el identificador del recurso se escriben incorrectamente.
  • El nombre del recurso contiene caracteres especiales y no está rodeado de comillas simples o dobles.
  • El valor que se pasa a una variable tiene espacios iniciales o finales no vistos.
  • El recurso existe, pero está en una suscripción diferente.

Error: No se pudo analizar la cadena como JSON

Hay diferencias en la manera de citar entre Bash, PowerShell en Linux y PowerShell en Windows. Además, diferentes versiones de PowerShell pueden generar resultados diferentes. En el caso de parámetros complejos, como una cadena JSON, el procedimiento recomendado es usar la convención de la CLI de @<file> Azure para omitir la interpretación del shell. Para obtener más información, consulte uno de estos artículos:

Para obtener ejemplos de sintaxis JSON para Bash, PowerShell y cmd.exe, consulte el tutorial sobre las diferencias en la forma de citar entre los lenguajes de scripting: cadenas en JSON.

Error: InvalidTemplateDeployment (Despliegue de Plantilla No Válido)

Al intentar crear un recurso de Azure en una ubicación que no ofrezca ese recurso, recibirá un error similar al siguiente: "Error en las SKU siguientes para restricciones de capacidad: myDesiredSkuName" no está disponible actualmente en la ubicación "mySpecifiedLocation".

Este es un ejemplo de error completo para una máquina virtual que no se puede crear en la westus ubicación:

{"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."}]}}

La solución consiste en cambiar una propiedad del recurso de Azure solicitado o probar otra ubicación.

Error: No se encontró la suscripción

Suponiendo que no ha escrito incorrectamente el nombre o el identificador de la suscripción, este error se produce cuando un proveedor de recursos no está registrado en la suscripción activa. Por ejemplo, si desea ejecutar az storage account create, el Microsoft.Storage proveedor debe registrarse. Para registrar un proveedor de recursos, consulte tipos y proveedores de recursos de Azure.

Error: Error al comprobar el certificado de protocolo de enlace incorrecto

Consulte Trabajar detrás de un proxy para obtener información sobre cómo resolver este error.

Trabajar con un proxy

Si usa la CLI de Azure a través de un servidor proxy que usa certificados autofirmados, la biblioteca de solicitudes de Python usada por la CLI de Azure podría producir el siguiente error: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",). Para solucionar este error, establezca la variable de entorno REQUESTS_CA_BUNDLE en la ruta del archivo de certificado de CA en formato PEM.

Sistema operativo Paquete predeterminado de autoridad de certificación
Windows de 32 bits C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
Windows de 64 bits 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 Modelos Intel: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem

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

Anexe el certificado del servidor proxy al archivo de certificado de agrupación de CA o copie el contenido en otro archivo de certificado. A continuación, establezca REQUESTS_CA_BUNDLE en la nueva ubicación del archivo. Este es un ejemplo:

<Original cacert.pem>

-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----

Algunos servidores proxy requieren autenticación. El formato de las HTTP_PROXY variables de entorno o HTTPS_PROXY debe incluir la autenticación, como HTTPS_PROXY="https://username:password@proxy-server:port". Para más detalles, consulte Cómo configurar proxies para el Azure SDK para Python.

Principales del servicio

Para obtener información sobre la solución de problemas de los Service Principals, consulte Limpieza y Solución de Problemas en el tutorial Trabajar con Service Principals.

Otros problemas

Si experimenta un problema de producto con la CLI de Azure que no aparece en este artículo, presente un problema en GitHub.

Consulte también