Az Azure CLI hibaelhárítása
Hibakategóriák
Az Azure CLI által visszaadott hibák többsége az alábbi kategóriák egyikébe tartozik:
Hibakategória | Általános hiba oka |
---|---|
Ismeretlen argumentum | A paraméter hibásan van beírva, vagy nem létezik. |
Hiányzó kötelező argumentum | Nincs megadva kötelező paraméter, vagy a két "paraméterpár" közül csak az egyik van megadva. Előfordulhat, hogy egy paraméter hibásan van beírva. |
Kölcsönösen kizáró argumentum | Két vagy több paraméter nem adható meg együtt. |
Érvénytelen argumentumérték | A paraméter értéke érvénytelen. Ezt a hibát gyakran idézőjel, feloldó karakter vagy térköz okozza. |
Hibás kérés | A 400-ból álló HTTP-állapotkód ezt a hibát adja vissza. Ellenőrizze, hogy van-e hiányzó hely, hiányzik-e a paraméterjel, vagy hiányzik-e egy vagy két idézőjel. Ez a hiba akkor is előfordul, ha egy paraméterérték nem tartalmaz engedélyezett értéket. |
Az erőforrás nem található | Egy paraméterértékben hivatkozott Azure-erőforrás nem található. |
Hitelesítés | A Microsoft Entra-hitelesítés nem sikerült. |
A --debug
paraméter
Az azure CLI-referenciaparancsok végrehajtásának egyik legjobb módja a --debug
paraméter használata. Íme néhány példa --debug
egy sikertelen és egy sikeres parancsra:
# 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
Íme a hibakeresési kimenet egy része. Figyelje meg a napló helyét és a nem felismert argumentumot.
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
...
Hasonlítsa össze a fent megadott hibakimenetet --debug
egy sikeres végrehajtással:
# Correct example: Because the resource group name contains special characters, enclose it in quotes
az group create --location eastus2 --name "msdocs-rg-test" --debug
Íme a hibakeresési kimenet egy része. Figyelje meg a napló helyét, az API-hívást és a futási időt.
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)
A JSON-formázásra vonatkozó példákért --debug
lásd : A szkriptnyelvek – JSON-sztringek közötti különbségek idézése.
Gyakori szintaxishibák
Bár az Azure CLI a Bash, a PowerShell és a Windows Cmd használatával is futtatható, a szkriptnyelvek között szintaktikai különbségek vannak. Az önálló idézőjeleket, dupla idézőjeleket és feloldó karaktereket tartalmazó Azure CLI-szkripteket általában módosítani kell a nyelvek közötti másoláskor. Ez a kihívás leggyakrabban a paraméterértékekben jelenik meg, különösen a --query
paraméterhez rendelt értékekben. Íme néhány gyakori hibaüzenet:
"Hibás kérés ... {valami} érvénytelen" lehet szóköz, egy- vagy dupla idézőjel, vagy idézőjel hiánya.
A "váratlan jogkivonat..." akkor látható, ha van egy extra hely vagy idézet.
Az "Érvénytelen jmespath_type érték" hiba gyakran a paraméter helytelen idézéséből
--query
ered."Érvénytelen változóhivatkozás" akkor érkezik, ha egy sztring nem megfelelően van formázva összefűzés vagy hiányzó feloldó karakter miatt.
A "nem felismert argumentumokat" gyakran helytelen sorfolytatási karakter vagy hibásan írt paraméternév okozza.
A "Hiányzó kifejezés a nem szereplő operátor után" kifejezés akkor látható, ha hiányzik egy sor folytatási karaktere.
Számos Azure CLI-cikk foglalkozik a szintaxishibák magyarázatával és gyakorlati példákkal:
- A szkriptnyelvek közötti különbségek idézése
- Szintaxisbeli különbségek a Bash, a PowerShell és a Cmd oktatóanyagban
- Számos
--query
paraméterpéldát talál az Azure CLI parancskimenetének JMESPath-lekérdezéssel történő lekérdezésében - Az Azure CLI használata Bash-szkriptnyelven
- Az Azure CLI PowerShell-szkriptelési nyelven való futtatásának szempontjai
Tipp.
Ha nem tudja megoldani a parancshibát, próbálkozzon egy másik szkriptnyelv használatával. A legtöbb Azure CLI-dokumentáció az Azure Cloud Shellben (ACS) van megírva és tesztelve Bash-szkriptelési nyelvvel. Ha az ACS Bashben végrehajtható egy cikket, de a Windows PowerShellben nem hajtja végre, tekintse át az egyszeres és dupla idézőjelek használatát, valamint a feloldó karaktereket.
Hiba: Érvénytelen érték vagy nem létezik
Ezek a hibák gyakran akkor fordulnak elő, ha helytelen formátumot tartalmazó változóértéket próbálnak használni. Az Azure CLI alapértelmezett kimenete a JSON, ezért ha egy Azure-erőforrás azonosítóját egy változóban szeretné tárolni, meg kell adnia --output tsv
. Példa:
# 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'.
Most használja a tsv
kimeneti típust.
# 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
Hiba: Argumentumok várhatók vagy szükségesek
Ez a hiba akkor jelenik meg, ha egy Azure CLI-parancs hiányzik egy szükséges paraméterből, vagy egy tipográfiai hiba miatt az Azure CLI helytelenül elemzi a referenciaparancsot. Szkript használata esetén ez a hiba akkor is jelentkezik, ha egy vagy több feltétel teljesül:
- Hiányzik vagy helytelen egy sor folytatási karaktere.
- A PowerShell-szkriptnyelv használata esetén a sor folytatásának karakterének jobb oldalán egy záró szóköz található. Az Azure CLI-parancsok jelenleg nem támogatják a splatting használatát.
- A változónevek speciális karaktert, például kötőjelet (-) tartalmaznak.
Hiba: Az erőforrás nem található
Ha az Azure CLI nem találja a paraméterértékben átadott erőforrásnevet vagy azonosítót, annak oka általában az alábbi okok egyike:
- Az erőforrás neve vagy azonosítója helytelenül van beírva.
- Az erőforrás neve speciális karaktereket tartalmaz, és nem egyetlen vagy kettős idézőjelek veszik körül.
- A változónak átadott értéknek nincs bevezető vagy záró szóköze.
- Az erőforrás létezik, de egy másik előfizetésben található.
Hiba: Nem sikerült jSON-ként elemezni a sztringet
A Bash, a Linuxban a PowerShell és a Windows PowerShell között különbségek vannak. Emellett a PowerShell különböző verziói is különböző eredményeket hozhatnak. Összetett paraméterek, például JSON-sztringek esetén az ajánlott eljárás az Azure CLI konvenciójának @<file>
használata a rendszerhéj értelmezésének megkerülésére. További információkért tekintse meg az alábbi cikkek egyikét:
A Bash, a PowerShell és a Cmd.exe JSON-szintaxisra vonatkozó példáiért lásd : A szkriptnyelvek közötti különbségek idézése – JSON-sztringek oktatóanyaga.
Hiba: InvalidTemplateDeployment
Amikor olyan helyen próbál létrehozni egy Azure-erőforrást, amely nem kínál ilyen erőforrást, a következőhöz hasonló hibaüzenet jelenik meg: "A kapacitáskorlátozások esetében a következő termékváltozatok nem érhetők el: a myDesiredSkuName" jelenleg nem érhető el a "mySpecifiedLocation" helyen."
Íme egy teljes hiba példa egy olyan virtuális gépre, amely nem hozható létre a westus
helyszínen:
{"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."}]}}
A megoldás a kért Azure-erőforrás egy tulajdonságának módosítása, vagy egy másik hely kipróbálása.
Hiba: Az előfizetés nem található
Feltételezve, hogy nem gépelt be helytelenül egy előfizetésnevet vagy -azonosítót, ez a hiba akkor fordul elő, ha egy erőforrás-szolgáltató nincs regisztrálva az aktív előfizetésben. Ha például végrehajtást szeretne végezni az storage account create
, a Microsoft.Storage
szolgáltatót regisztrálni kell. Erőforrás-szolgáltató regisztrálásához tekintse meg az Azure-erőforrás-szolgáltatókat és -típusokat.
Hiba: Rossz kézfogás... a tanúsítvány ellenőrzése sikertelen
A hiba megoldásáról további információt a proxy mögötti munka című témakörben talál.
Proxy mögötti munka
Ha önaláírt tanúsítványokat használó proxykiszolgálón használja az Azure CLI-t, az Azure CLI által használt Python-kérések tára a következő hibát okozhatja: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
A hiba elhárításához állítsa a környezeti változót REQUESTS_CA_BUNDLE
a CA-csomag tanúsítványfájljának elérési útjára PEM formátumban.
OS | Alapértelmezett hitelesítésszolgáltatói csomag |
---|---|
Windows 32 bites | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
Windows 64 bites | 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 |
Fűzze hozzá a proxykiszolgáló tanúsítványát a ca-csomag tanúsítványfájljához, vagy másolja a tartalmat egy másik tanúsítványfájlba. Ezután állítsa be REQUESTS_CA_BUNDLE
az új fájl helyét. Példa:
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Egyes proxyk hitelesítést igényelnek. A vagy környezeti HTTP_PROXY
HTTPS_PROXY
változók formátumának tartalmaznia kell a hitelesítést, például HTTPS_PROXY="https://username:password@proxy-server:port"
. További információ: Proxyk konfigurálása a Pythonhoz készült Azure SDK-hoz.
Szolgáltatási elvek
A szolgáltatásnevek hibaelhárításáról további információt a Szolgáltatásnevek használata oktatóanyagban, a Karbantartás és hibaelhárítás című témakörben talál.
Egyéb problémák
Ha a jelen cikkben nem szereplő Azure CLI-vel kapcsolatos termékproblémát tapasztal, küldjön egy hibát a GitHubon.