Tips untuk menggunakan Azure CLI dengan sukses
Azure CLI adalah alat baris perintah yang memungkinkan Anda mengonfigurasi dan mengelola sumber daya Azure dari banyak lingkungan shell. Setelah Anda memilih lingkungan shell pilihan Anda dan menginstal Azure CLI, gunakan artikel ini untuk menemukan tips yang berguna tentang cara menghindari perangkap umum dan berhasil menggunakan Azure CLI.
Untuk mempelajari selengkapnya tentang perintah Azure CLI tertentu, lihat daftar Referensi Azure CLI.
Pemformatan output
Tiga format output umum digunakan dengan perintah Azure CLI:
Format
json
menunjukkan informasi sebagai string JSON.- JSON memberi Anda informasi paling komprehensif.
- Format ini adalah default tetapi Anda dapat menggunakan parameter
--output
untuk menentukan opsi yang berbeda. - Ubah format default global ke salah satu preferensi pribadi Anda dengan menggunakan konfigurasi az seperti
az config set core.output=table
. - Format JSON mempertahankan tanda kutip ganda, umumnya membuatnya tidak cocok untuk tujuan pembuatan skrip.
Format
table
menampilkan output sebagai tabel yang dapat dibaca. Anda dapat menentukan nilai mana yang akan muncul dalam tabel dan menggunakan kueri untuk menyesuaikan output seperti yang ditampilkan di sini:# command az vm show --resource-group myResourceGroup --name myVMname --query "{name: name, os:storageProfile.imageReference.offer}" --output table # output Name Os ------ ------------ myVMname UbuntuServer
Format
tsv
menampilkan nilai yang dipisahkan tab dan dipisahkan baris baru tanpa pemformatan tambahan, kunci, atau simbol lainnya.- Format TSV berguna untuk output ringkas dan pembuatan skrip.
- Strip TSV mengutip ganda yang dipertahankan format JSON.
- Untuk menentukan format yang Anda inginkan untuk TSV, gunakan parameter
--query
.
export vm_ids=$(az vm list --show-details --resource-group myResourceGroup --query "[?powerState=='VM running'].id" --output tsv) az vm stop --ids $vm_ids
Untuk informasi selengkapnya, lihat Format output untuk perintah Azure CLI.
Meneruskan nilai ke perintah lain
Jika nilai digunakan lebih dari sekali, tetapkan ke variabel. Variabel memungkinkan Anda menggunakan nilai lebih dari sekali atau untuk membuat lebih banyak skrip umum. Contoh ini menetapkan ID yang ditemukan oleh perintah az vm list ke variabel.
# assign the list of running VMs to a variable
running_vm_ids=$(az vm list --resource-group MyResourceGroup --show-details \
--query "[?powerState=='VM running'].id" --output tsv)
# verify the value of the variable
echo $running_vm_ids
Jika nilai hanya digunakan sekali, pertimbangkan penyaluran. (Piping meneruskan output dari satu perintah sebagai input ke perintah kedua.)
az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm
Untuk daftar multinilai, pertimbangkan opsi berikut:
Jika Anda memerlukan lebih banyak kontrol pada hasilnya, gunakan perulangan "for":
#!/usr/bin/env bash for vmList in $(az vm list --resource-group MyResourceGroup --show-details --query "[?powerState=='VM running'].id" --output tsv); do echo stopping $vmList az vm stop --ids $vmList if [ $? -ne 0 ]; then echo "Failed to stop $vmList" exit 1 fi echo $vmList stopped done
Atau, gunakan
xargs
dan pertimbangkan untuk menggunakan bendera-P
untuk menjalankan operasi secara paralel guna meningkatkan performa:az vm list --resource-group MyResourceGroup --show-details \ --query "[?powerState=='VM stopped'].id" \ --output tsv | xargs -I {} -P 10 az vm start --ids "{}"
Akhirnya, Azure CLI memiliki dukungan bawaan untuk memproses perintah dengan beberapa
--ids
secara paralel untuk mencapai efek xarg yang sama.@-
digunakan untuk mendapatkan nilai dari pipa:az vm list --resource-group MyResourceGroup --show-details \ --query "[?powerState=='VM stopped'].id" \ --output tsv | az vm start --ids @-
Untuk informasi selengkapnya tentang menggunakan konstruksi Bash dengan Azure CLI termasuk perulangan, pernyataan kasus, if..then..else, dan penanganan kesalahan, lihat Mempelajari cara menggunakan Bash dengan Azure CLI.
Menggunakan tanda kutip dalam parameter
Saat Anda bekerja dengan perintah Azure CLI, ketahui cara shell menggunakan tanda kutip dan karakter escape. Jika Anda mendukung skrip yang digunakan dalam shell yang berbeda, pahami perbedaannya.
- Bash. Mengutip
- PowerShell. Tentang Aturan Mengutip
- Windows Command Prompt. Cara: Menggunakan Karakter Escape, Pemisah dan Kutipan di baris perintah Windows
Catatan
Karena masalah yang diketahui di PowerShell, beberapa aturan penggunaan karakter escape tambahan diberlakukan. Untuk informasi selengkapnya, lihat Mengutip masalah dengan PowerShell.
Untuk menghindari hasil tak terduga, berikut adalah beberapa saran:
Jika Anda menyediakan parameter yang berisi spasi, apit dengan tanda kutip.
Di Bash atau PowerShell, kutipan tunggal dan ganda ditafsirkan dengan benar. Di Perintah Windows, hanya tanda kutip ganda yang ditafsirkan dengan benar -- tanda kutip tunggal diperlakukan sebagai bagian dari nilai.
Jika perintah Anda hanya akan berjalan di Bash (atau Zsh), gunakan tanda kutip tunggal untuk mempertahankan konten dalam string JSON. Tanda kutip tunggal diperlukan saat menyediakan nilai JSON sebaris. Misalnya, JSON ini benar di Bash:
'{"key": "value"}'
.Jika perintah Anda berjalan pada Prompt Perintah Windows, Anda harus menggunakan tanda kutip ganda. Jika nilai berisi tanda kutip ganda, Anda harus melakukan escape pada nilai tersebut. String yang setara dengan string JSON di atas adalah
"{\"key\": \"value\"}"
Di PowerShell, jika nilai Anda adalah string kosong, gunakan
'""'
.Di Bash atau PowerShell, jika nilai Anda adalah string
''
tanda kutip kosong, gunakan"''"
.Gunakan konvensi
@<file>
Azure CLI untuk memuat dari file dan melewati mekanisme interpretasi shell.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
Bash mengevaluasi kutipan ganda dalam variabel yang diekspor. Jika perilaku ini bukan yang Anda inginkan, hindari variabel:
"\$variable"
.Beberapa perintah Azure CLI mengambil daftar nilai yang dipisahkan spasi.
Jika nama kunci atau nilai berisi spasi, apit seluruh pasangan:
"my key=my value"
. Misalnya:az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
Saat parameter CLI menyatakan bahwa parameter menerima daftar yang dipisahkan spasi, salah satu dari dua format diharapkan:
- Daftar yang tidak dikutip dan dipisahkan spasi
--parameterName firstValue secondValue
- Daftar yang dikutip dan dipisahkan spasi
--parameterName "firstValue" "secondValue"
Contoh ini adalah string dengan spasi di dalamnya. Ini bukan daftar yang dipisahkan spasi:
--parameterName "firstValue secondValue"
- Daftar yang tidak dikutip dan dipisahkan spasi
Ada karakter khusus PowerShell, seperti di
@
. Untuk menjalankan Azure CLI di PowerShell, tambahkan`
sebelum karakter khusus untuk mengeluarkannya dari program. Anda juga dapat mengapit nilai dalam tanda kutip tunggal atau ganda"
/"
.# The following three examples will work in PowerShell --parameterName `@parameters.json --parameterName '@parameters.json' --parameterName "@parameters.json" # This example will not work in PowerShell --parameterName @parameters.json
Jika Anda menggunakan parameter
--query
dengan perintah, beberapa karakter JMESPath harus dikeluarkan dari program dalam shell.Ketiga perintah ini benar dan setara dalam Bash:
az version --query '"azure-cli"' az version --query \"azure-cli\" az version --query "\"azure-cli\""
Berikut adalah dua contoh perintah yang salah di Bash:
# Wrong, as the dash needs to be quoted in a JMESPath query az version --query azure-cli az version: error: argument --query: invalid jmespath_type value: 'azure-cli' # Wrong, as the dash needs to be quoted in a JMESPath query, but quotes are interpreted by Bash az version --query "azure-cli" az version: error: argument --query: invalid jmespath_type value: 'azure-cli'
Untuk contoh perbandingan lain antara Bash, PowerShell, dan Cmd, lihat Mengkueri output perintah Azure CLI
Cara terbaik untuk memecahkan masalah kutipan adalah menjalankan perintah dengan bendera
--debug
. Bendera ini mengungkapkan argumen aktual yang diterima oleh Azure CLI dalam sintaks Python.# Correct $ az '{"key":"value"}' --debug Command arguments: ['{"key":"value"}', '--debug'] # Correct $ az "{\"key\":\"value\"}" --debug Command arguments: ['{"key":"value"}', '--debug'] # Wrong, as quotes and spaces are interpreted by Bash $ az {"key": "value"} --debug Command arguments: ['{key:', 'value}', '--debug'] # Wrong, as quotes are interpreted by Bash $ az {"key":"value"} --debug Command arguments: ['{key:value}', '--debug']
Menggunakan karakter tanda hubung dalam parameter
Jika nilai parameter dimulai dengan tanda hubung, Azure CLI akan mencoba mengurainya sebagai nama parameter. Untuk mengurainya sebagai nilai, gunakan =
untuk menggabungkan nama parameter dan nilai: --password="-VerySecret"
.
Operasi Asinkron
Operasi di Azure dapat memakan waktu banyak waktu. Misalnya, mengonfigurasi mesin virtual di pusat data tidaklah instan. Azure CLI menunggu hingga perintah selesai untuk menerima perintah lain. Oleh karena itu, banyak perintah menawarkan parameter --no-wait
seperti yang ditunjukkan di sini:
az group delete --name MyResourceGroup --no-wait
Saat Anda menghapus grup sumber daya, semua sumber daya miliknya juga dihapus. Diperlukan waktu yang lama untuk menghapus sumber daya ini. Saat Anda menjalankan perintah dengan --no-wait
parameter , konsol menerima perintah baru tanpa mengganggu penghapusan.
Banyak perintah menawarkan opsi tunggu, yang menjeda konsol hingga beberapa kondisi terpenuhi. Contoh berikut menggunakan perintah az vm wait untuk mendukung pembuatan sumber daya independen secara paralel:
az vm create --resource-group VMResources --name virtual-machine-01 --image centos --no-wait
az vm create --resource-group VMResources --name virtual-machine-02 --image centos --no-wait
subscription=$(az account show --query "id" -o tsv)
vm1_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-01"
vm2_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-02"
az vm wait --created --ids $vm1_id $vm2_id
Setelah kedua ID dibuat, Anda dapat menggunakan konsol lagi.
Bekerja di belakang proksi
Jika Anda menggunakan Azure CLI melalui server proksi yang menggunakan sertifikat yang ditandatangani sendiri, pustaka permintaan Python yang digunakan oleh Azure CLI mungkin akan 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 paket CA sertifikat dalam format PEM.
OS | Bundel 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/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 |
Tambahkan sertifikat server proksi ke file sertifikat paket CA, atau salin kontennya ke file sertifikat lain. Kemudian atur REQUESTS_CA_BUNDLE
ke lokasi file baru. Berikut contohnya:
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Beberapa proksi memerlukan autentikasi. Format variabel lingkungan HTTP_PROXY
atau HTTPS_PROXY
lingkungan harus menyertakan autentikasi, seperti HTTPS_PROXY="https://username:password@proxy-server:port"
. Untuk mengetahui detailnya, lihat Cara mengonfigurasi proksi untuk pustaka Azure.
Eksekusi bersamaan
Jika Anda menjalankan perintah Azure CLI secara bersamaan pada komputer yang sama, konflik tulis dapat terjadi jika beberapa perintah Azure CLI menulis ke cache token MSAL yang sama.
Untuk menghindari potensi kegagalan, Anda dapat mengisolasi folder konfigurasi Azure CLI untuk setiap skrip dengan mengatur variabel AZURE_CONFIG_DIR
lingkungan untuk setiap skrip ke direktori terpisah. Perintah Azure CLI dalam skrip tersebut menyimpan konfigurasi dan cache token ke lokasi yang dikonfigurasi alih-alih folder default ~/.azure
.
export AZURE_CONFIG_DIR=/my/config/dir
Parameter pembaruan generik
Grup perintah Azure CLI sering menonjolkan perintah pembaruan. Misalnya, Azure Virtual Machines menyertakan perintah az vm update. Sebagian besar perintah pembaruan menawarkan tiga parameter generik: --add
, --set
, dan --remove
.
Parameter --set
dan --add
menggunakan daftar pasangan nilai kunci yang dipisahkan spasi: key1=value1 key2=value2
. Untuk melihat properti yang dapat diperbarui, gunakan perintah tampilkan, seperti az vm show.
az vm show --resource-group VMResources --name virtual-machine-01
Untuk menyederhanakan perintah, pertimbangkan untuk menggunakan string JSON. Misalnya, untuk menyertakan disk data baru ke mesin virtual, gunakan nilai berikut:
az vm update --resource-group VMResources --name virtual-machine-01 \
--add storageProfile.dataDisks "{\"createOption\": \"Attach\", \"managedDisk\":
{\"id\":
\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/yg/providers/Microsoft.Compute/disks/yg-disk\"},
\"lun\": 1}"
Perintah sumber daya generik (sumber daya az)
Layanan yang ingin Anda gunakan untuk mungkin belum memiliki dukungan Azure CLI. Anda dapat menggunakan perintah az resource untuk bekerja dengan sumber daya ini.
Jika Anda hanya memerlukan perintah buat dan perbarui, gunakan az deployment group create. Sebagai contoh kerja, lihat Template Mulai Cepat Azure.
Perintah REST API (az rest)
Jika parameter pembaruan generik dan az resource tidak memenuhi kebutuhan Anda, gunakan perintah az rest untuk memanggil REST API. Perintah secara otomatis melakukan autentikasi menggunakan info masuk dimasukkan dan mengatur header Content-Type: application/json
. Untuk informasi selengkapnya, lihat Referensi Azure REST API.
Contoh ini berfungsi dengan Microsoft Graph API. Untuk memperbarui URI pengalihan untuk Aplikasi, panggil REST API Perbarui aplikasi, seperti dalam kode ini:
# Get the application
az rest --method GET \
--uri 'https://graph.microsoft.com/v1.0/applications/b4e4d2ab-e2cb-45d5-a31a-98eb3f364001'
# Update `redirectUris` for `web` property
az rest --method PATCH \
--uri 'https://graph.microsoft.com/v1.0/applications/b4e4d2ab-e2cb-45d5-a31a-98eb3f364001' \
--body '{"web":{"redirectUris":["https://myapp.com"]}}'
Saat menggunakan --uri-parameters
untuk permintaan dalam bentuk OData, pastikan untuk melarikan diri $
di lingkungan yang berbeda: di Bash
, escape $
sebagai \$
dan di PowerShell
, escape $
sebagai `$
Contoh skrip
Berikut adalah contoh penggunaan variabel dan perulangan melalui daftar saat menggunakan Azure Virtual Machines. Untuk contoh mendalam tentang menggunakan konstruksi Bash dengan Azure CLI termasuk perulangan, pernyataan kasus, if..then..else, dan penanganan kesalahan, lihat Mempelajari cara menggunakan Bash dengan Azure CLI.
Gunakan skrip ini untuk menyimpan ID ke variabel:
ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
`az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
SET "vm_ids=%%F %vm_ids%" :: construct the id list
)
az vm stop --ids %vm_ids% :: CLI stops all VMs in parallel
Gunakan skrip ini untuk mengulang daftar:
ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
`az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
ECHO Stopping %%F
az vm stop --ids %%F
)