Aracılığıyla paylaş


Azure CLI sorunlarını giderme

Hata kategorileri

Azure CLI tarafından döndürülen hataların çoğu şu kategorilerden birine girer:

Hata kategorisi Genel hata nedeni
Tanınmayan argüman Parametre yanlış yazılmış veya yok.
Gerekli bağımsız değişken eksik Gerekli bir parametre belirtilmedi veya iki "parametre çiftinin" yalnızca biri belirtildi. Bir parametre de yanlış yazılabilir.
Birbirini dışlayan argüman İki veya daha fazla parametre birlikte belirtilemiyor.
Geçersiz bağımsız değişken değeri Parametre değer geçerli değil. Bu hata genellikle alıntılar, kaçış karakterleri veya boşluklardan kaynaklanır.
Hatalı istek 400 http durum kodu bu hatayı döndürür. Eksik bir boşluk, eksik bir parametre tiresi veya gereksiz ya da eksik tek veya çift tırnak işareti olup olmadığını denetleyin. Bu hata, parametre değeri izin verilen bir değer içermediğinde de oluşur.
Kaynağı bulunamadı Parametre değerinde başvurulan bir Azure kaynağı bulunamıyor.
Kimlik doğrulama Microsoft Entra kimlik doğrulaması başarısız oldu.

--debug parametresi

Azure CLI'nın her Azure CLI başvuru komutu için ne yürüttüğüne ilişkin en iyi yollardan biri --debug parametresini kullanmaktır. Hem başarısız hem de başarılı bir komut için --debug örnekleri aşağıda verilmiştir:

# 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

Hata ayıklama çıkışının bir bölümü aşağıdadır. Günlük konumuna ve tanınmayan parametreye dikkat edin.

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

Yukarıda verilen hata --debug çıkışını başarılı bir yürütmeyle karşılaştırın:

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

Hata ayıklama çıkışının bir bölümü aşağıdadır. Günlük konumuna, API çağrısına ve çalışma zamanına dikkat edin.

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)

JSON biçimlendirmesi için --debug örnekleri için bkz. Betik dilleri arasındaki farkları alıntılama - JSON dizeleri.

Yaygın söz dizimi hataları

Azure CLI hem Bash, PowerShell hem de Windows Cmd'de çalıştırılabilir, ancak betik dilleri arasında söz dizimi farklılıkları vardır. Tek tırnak, çift tırnak ve kaçış karakterleri içeren Azure CLI betikleri genellikle diller arasında kopyalandığında değiştirilmelidir. Bu zorluk, özellikle --query parametresine atanan değerlerde en sık kendini gösterir. Bazı yaygın hata iletileri şunlardır:

  • "Hatalı istek ... {something} geçersiz" boşluk, tek veya çift tırnak işareti ya da tırnak işareti olmamasından kaynaklanıyor olabilir.

  • "Beklenmeyen token..." ek bir boşluk veya tırnak işareti olduğunda ortaya çıkar.

  • "Geçersiz jmespath_type değeri" hatası genellikle --query parametresindeki yanlış alıntıdan kaynaklanır.

  • "Değişken başvurusu geçerli değil", birleştirme veya eksik kaçış karakteri nedeniyle bir dizenin düzgün biçimlendirilmemesi durumunda alınan hata mesajıdır.

  • "Tanınmayan bağımsız değişkenler" genellikle yanlış satır devamlılığı karakteri veya yanlış yazılmış parametre adından kaynaklanır.

  • "Üniter işleçten sonra eksik ifade" bir satır devamlılığı karakteri eksik olduğunda görülür.

Söz dizimi hatalarını açıklamaya ve çalışma örnekleri sağlamaya ayrılmış birkaç Azure CLI makalesi vardır:

Bahşiş

Bir komut hatasını çözemiyorsanız farklı bir betik dili kullanmayı deneyin. Azure CLI belgelerinin çoğu, Bash betik diliyle Azure Cloud Shell'de (ACS) yazılır ve test edilir. ACS Bash'te yürütülecek bir makale örneği edinebiliyorsanız ancak Windows PowerShell'de yürütülmeyecekse, tek ve çift tırnak ve kaçış karakterleri kullanımınızı gözden geçirin.

Hata: Geçersiz değer veya yok

Bu hatalar genellikle yanlış biçim içeren bir değişken değeri kullanılmaya çalışıldığında oluşur. Azure CLI için varsayılan çıkış JSON'dır, bu nedenle bir Azure kaynağının kimliğini bir değişkende depolamaya çalışıyorsanız --output tsvbelirtmeniz gerekir. İşte bir örnek:

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

Şimdi tsv çıkış türünü kullanın.

# 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

Hata: Bağımsız değişkenler bekleniyor veya gerekli

Bir Azure CLI komutunda gerekli bir parametre eksikse veya Azure CLI'nınbaşvuru komutunu yanlış ayrıştırmasına neden olan bir yazım hatası olduğunda bu hatayı alırsınız. Bir betikle çalışırken, bir veya daha fazla koşul doğru olduğunda da bu hatayı alırsınız:

  • Satır devamlılığı karakteri eksik veya yanlış.
  • PowerShell betik dilinde çalışırken, satır uzatma karakterinin sağ tarafında boşluk karakteri vardır. Şu anda Azure CLI komutlarında splatting ile desteklenmemektedir.
  • Değişken adı, tire (-) gibi özel bir karakter içerir.

Hata: Kaynak bulunamadı

Azure CLI parametre değerinde geçirilen kaynak adını veya kimliği bulamıyorsa, bunun nedeni genellikle şu nedenlerden biridir:

  • Kaynak adı veya kimliği yanlış yazılmış.
  • Kaynak adı özel karakterler içeriyor ve tek veya çift tırnak içine alınmamış.
  • Bir değişkene geçirilen değerin başında veya sonunda görünmeyen boşluklar vardır.
  • Kaynak var, ancak farklı bir abonelikte.

Hata: Dize JSON olarak ayrıştırılamadı

Bash, Linux'taki PowerShell ve Windows'taki PowerShell arasında alıntılama farklılıkları vardır. Ayrıca, PowerShell'in farklı sürümleri farklı sonuçlar üretebilir. JSON dizesi gibi karmaşık parametreler için en iyi yöntem, kabuğun yorumunu atlamak için Azure CLI'nin @<file> kuralını kullanmaktır. Daha fazla bilgi için şu makalelerden birine bakın:

Bash, PowerShell ve Cmd.exeiçin JSON söz dizimi örnekleri için bkz. Komut dosyası dilleri arasındaki farkları alıntılama - JSON dizeleri öğreticisi.

Hata: InvalidTemplateDeployment

Bu kaynağı sunmayan bir konumda Azure kaynağı oluşturmaya çalıştığınızda şu iletiye benzer bir hata alırsınız: "Kapasite Kısıtlamaları için aşağıdaki SKU'lar başarısız oldu: myDesiredSkuName' şu anda 'mySpecifiedLocation' konumunda kullanılamıyor."

westus konumunda oluşturulamaz bir VM için tam hata örneği aşağıda verilmiştir:

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

Çözüm, istenen Azure kaynağınızın bir özelliğini değiştirmek veya farklı bir konum denemektir.

Hata: Abonelik bulunamadı

Yanlış bir abonelik adı veya kimliği yazmadığınız varsayıldığında, bir kaynak sağlayıcısı etkin aboneliğe kaydedilmediğinde bu hata oluşur. Örneğin, az storage account createyürütmek istiyorsanız Microsoft.Storage sağlayıcısının kaydedilmesi gerekir. Bir kaynak sağlayıcısını kaydetmek için bkz. Azure kaynak sağlayıcıları ve türleri.

Hata: Kötü el sıkışma... sertifika doğrulaması başarısız oldu

Bu hatayı düzeltme hakkında bilgi için bkz. Ara sunucu arkasında çalışma.

Ara sunucu arkasında çalışmak

Azure CLI'yı otomatik olarak imzalanan sertifikalar kullanan bir ara sunucu üzerinden kullanıyorsanız, Python Azure CLI tarafından kullanılan istek kitaplığı şu hataya neden olabilir: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",). Bu hatayı gidermek için REQUESTS_CA_BUNDLE ortam değişkenini PEM biçiminde CA paket sertifika dosyasının yoluna ayarlayın.

İşletim sistemi Varsayılan sertifika yetkilisi paketi
Windows 32 bit C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
Windows 64 bit 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 modelleri: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem

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

Ara sunucunun sertifikasını CA paket sertifika dosyasına ekleyin veya içeriği başka bir sertifika dosyasına kopyalayın. Ardından REQUESTS_CA_BUNDLE yeni dosya konumuna ayarlayın. İşte bir örnek:

<Original cacert.pem>

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

Bazı proxy'ler kimlik doğrulaması gerektirir. HTTP_PROXY veya HTTPS_PROXY ortam değişkenlerinin biçimi, HTTPS_PROXY="https://username:password@proxy-server:port"gibi kimlik doğrulamasını içermelidir. Ayrıntılar için bkz. Pythoniçin Azure SDK proxy'lerini yapılandırma.

Hizmet sorumluları

Hizmet sorumlularıyla ilgili sorunları giderme hakkında bilgi için Hizmet sorumlularıyla çalışma öğreticisindeki Temizleme ve Sorun Giderme bakın.

Diğer sorunlar

Azure CLI ile ilgili bu makalede listelenmeyen bir ürün sorunuyla karşılaşırsanız GitHub'nde bir sorun oluşturun.

Ayrıca bkz.

  • Azure CLI'yi başarıyla kullanmaya yönelik İpuçları