Bagikan melalui


Pemecahan masalah Azure CLI

Kategori kesalahan

Sebagian besar kesalahan yang dikembalikan oleh Azure CLI termasuk dalam salah satu kategori berikut:

Kategori kesalahan Penyebab kesalahan umum
Argumen tidak dikenal Parameter salah eja atau tidak ada.
Argumen yang diperlukan hilang Parameter yang diperlukan tidak ditentukan atau hanya salah satu dari dua "pasangan parameter" yang ditentukan. Parameter mungkin juga salah eja.
Argumen saling eksklusif Dua parameter atau lebih tidak dapat ditentukan bersama-sama.
nilai argumen tidak valid Parameter nilai tidak valid. Kesalahan ini sering disebabkan oleh kutipan, karakter escape, atau penspasian.
Permintaan buruk Kode status HTTP 400 mengembalikan kesalahan ini. Periksa ruang yang hilang, tanda hubung pada parameter yang hilang, atau tanda kutip tunggal atau ganda yang tambahan atau hilang. Kesalahan ini juga terjadi ketika nilai parameter tidak berisi nilai yang diizinkan.
Sumber Daya tidak ditemukan Sumber daya Azure yang dirujuk dalam nilai parameter tidak dapat ditemukan.
Otentikasi Autentikasi Microsoft Entra gagal.

Parameter --debug

Salah satu cara terbaik untuk melihat apa yang dijalankan Azure CLI untuk setiap perintah referensi Azure CLI adalah dengan menggunakan parameter --debug. Berikut contoh-contoh --debug untuk perintah yang gagal dan berhasil:

# 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

Berikut adalah bagian dari output debug. Perhatikan lokasi log dan argumen yang tidak dikenali.

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

Bandingkan kesalahan --debug output yang diberikan di atas dengan eksekusi yang berhasil:

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

Berikut adalah bagian dari output debug. Perhatikan lokasi log, panggilan API, dan run time.

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)

Untuk contoh --debug untuk pemformatan JSON, lihat Mengutip perbedaan antara bahasa pembuatan skrip - string JSON.

Kesalahan sintaks umum

Meskipun Azure CLI dapat berjalan di Bash, PowerShell, dan Windows Cmd, ada perbedaan sintaks antara bahasa skrip. Skrip Azure CLI yang berisi tanda kutip tunggal, tanda kutip ganda, dan karakter escape biasanya harus dimodifikasi saat disalin antar bahasa. Tantangan ini paling sering terlihat dalam nilai parameter, terutama nilai yang ditugaskan ke parameter --query. Berikut adalah beberapa pesan kesalahan umum:

  • Permintaan buruk ... {something} tidak validmungkin disebabkan oleh adanya spasi, tanda kutip tunggal atau ganda, atau kekurangan tanda kutip.

  • "Token tak terduga ..." muncul ketika terdapat spasi atau tanda kutip tambahan.

  • kesalahan "nilai jmespath_type tidak valid" sering berasal dari kutipan yang salah dalam parameter --query.

  • "Referensi variabel tidak valid" diterima ketika string tidak diformat dengan benar, seringkali disebabkan oleh perangkaian atau karakter escape yang hilang.

  • "Argumen yang tidak dikenali" sering disebabkan oleh karakter kelanjutan baris yang salah atau nama parameter yang salah eja.

  • "Ekspresi hilang setelah operator unary" terlihat ketika karakter kelanjutan baris hilang.

Ada beberapa artikel Azure CLI yang didedikasikan untuk menjelaskan kesalahan sintaksis dan memberikan contoh kerja:

Petunjuk / Saran

Jika Anda tidak dapat mengatasi kesalahan perintah, coba gunakan bahasa skrip yang berbeda. Sebagian besar dokumentasi Azure CLI ditulis dan diuji di Azure Cloud Shell (ACS) dengan bahasa skrip Bash. Jika Anda bisa mendapatkan contoh artikel untuk dijalankan di ACS Bash, tetapi tidak akan dijalankan di Windows PowerShell, tinjau penggunaan tanda kutip tunggal dan ganda Anda, dan karakter escape.

Kesalahan: Nilai tidak valid atau tidak ada

Kesalahan ini sering terjadi saat mencoba menggunakan nilai variabel yang berisi format yang salah. Output default untuk Azure CLI adalah JSON, jadi jika Anda mencoba menyimpan ID untuk sumber daya Azure dalam variabel, Anda harus menentukan --output tsv. Berikut adalah sebuah contoh:

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

Sekarang gunakan jenis output 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

Kesalahan: Argumen diharapkan atau diperlukan

Anda menerima kesalahan ini ketika perintah Azure CLI kehilangan parameter yang diperlukan, atau ada kesalahan tipografi yang menyebabkan Azure CLI salah mengurai perintah referensi. Saat bekerja dengan skrip, Anda juga menerima kesalahan ini ketika satu atau beberapa kondisi benar:

  • Karakter kelanjutan baris hilang atau salah.
  • Spasi akhir ada di kanan karakter kelanjutan baris saat bekerja dalam bahasa skrip PowerShell. Saat ini, splatting tidak didukung dengan perintah Azure CLI.
  • Nama variabel berisi karakter khusus, seperti tanda hubung (-).

Kesalahan: Sumber daya tidak ditemukan

Saat Azure CLI tidak dapat menemukan nama sumber daya atau ID yang diteruskan dalam nilai parameter, biasanya karena salah satu alasan berikut:

  • Nama sumber daya atau ID salah dieja.
  • Nama sumber daya berisi karakter khusus dan tidak dikelilingi oleh tanda kutip tunggal atau ganda.
  • Nilai yang diteruskan ke variabel memiliki spasi di awal atau di akhir yang tidak terlihat.
  • Sumber daya ada, tetapi berada dalam langganan yang berbeda.

Kesalahan: Gagal mengurai string sebagai JSON

Ada perbedaan kutipan antara Bash, PowerShell di Linux, dan PowerShell di Windows. Selain itu, versi PowerShell yang berbeda dapat menghasilkan hasil yang berbeda. Untuk parameter kompleks, seperti string JSON, praktik terbaiknya adalah menggunakan konvensi @<file> Azure CLI untuk melewati interpretasi shell. Untuk informasi selengkapnya, lihat salah satu artikel berikut ini:

Untuk contoh sintaks JSON untuk Bash, PowerShell, dan Cmd.exe, lihat Mengutip perbedaan antara bahasa pembuatan skrip - string JSON tutorial.

Kesalahan: InvalidTemplateDeployment

Saat Anda mencoba membuat sumber daya Azure di lokasi yang tidak menawarkan sumber daya tersebut, Anda menerima kesalahan yang mirip dengan pesan ini: "SKU berikut gagal untuk Pembatasan Kapasitas: myDesiredSkuName' saat ini tidak tersedia di lokasi 'mySpecifiedLocation'."

Berikut adalah contoh kesalahan lengkap untuk VM yang tidak dapat dibuat di lokasi 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."}]}}

Solusinya adalah mengubah properti sumber daya Azure yang Anda minta, atau mencoba lokasi lain.

Kesalahan: Langganan tidak ditemukan

Dengan asumsi Anda belum salah mengetik nama atau ID langganan, kesalahan ini terjadi ketika penyedia sumber daya tidak terdaftar dalam langganan aktif. Misalnya, jika Anda ingin menjalankan az storage account create, penyedia Microsoft.Storage harus terdaftar. Untuk mendaftarkan penyedia sumber daya, lihat Penyedia dan jenis sumber daya Azure.

Kesalahan: Jabat tangan buruk... verifikasi sertifikat gagal

Lihat Bekerja dengan proksi untuk informasi tentang cara mengatasi kesalahan ini.

Bekerja melalui proksi

Jika Anda menggunakan Azure CLI melalui server proksi yang menggunakan sertifikat yang ditandatangani sendiri, pustaka permintaan Python digunakan oleh Azure CLI dapat menyebabkan kesalahan berikut: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",). Untuk mengatasi kesalahan ini, atur variabel lingkungan REQUESTS_CA_BUNDLE ke jalur file sertifikat bundel CA dalam format PEM.

Sistem operasi Paket otoritas sertifikat default
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 Model Intel: /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python<version>/site-packages/certifi/cacert.pem

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

Tambahkan sertifikat server proksi ke file sertifikat bundel CA, atau salin konten ke file sertifikat lain. Kemudian atur REQUESTS_CA_BUNDLE ke lokasi file baru. Berikut adalah sebuah contoh:

<Original cacert.pem>

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

Beberapa proksi memerlukan autentikasi. Format variabel lingkungan HTTP_PROXY atau HTTPS_PROXY harus menyertakan autentikasi, seperti HTTPS_PROXY="https://username:password@proxy-server:port". Untuk detailnya, lihat Cara mengonfigurasi proksi untuk Azure SDK for Python.

Prinsipal layanan

Untuk informasi tentang pemecahan masalah prinsipal layanan, lihat Pembersihan dan Pemecahan Masalah di tutorial Bekerja dengan prinsipal layanan.

Masalah Lain

Jika Anda mengalami masalah produk dengan Azure CLI yang tidak tercantum dalam artikel ini, mengajukan masalah di GitHub.

Lihat juga