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. Pertama - tama pilih alat baris perintah yang tepat dan instal Azure CLI. Kemudian 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:
jsonFormat menunjukkan informasi sebagai string JSON.- JSON memberi Anda informasi paling komprehensif.
- Format ini adalah default tetapi Anda dapat menggunakan
--outputparameter 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. - Perhatikan bahwa format JSON mempertahankan tanda kutip ganda, umumnya dibuat dengan tidak cocok untuk tujuan pembuatan skrip.
tableFormat menyajikan output sebagai tabel yang dapat dibaca. Anda bisa menentukan nilai mana yang muncul dalam tabel dan menggunakan kueri untuk mengkustomisasi output seperti yang diperlihatkan di sini:# command az vm show --resource-group myResourceGroup --name myVMname --query "{name: name, os:storageProfile.imageReference.offer}" --output table # output Name Os ------ ------------ myVMname UbuntuServerFormat
tsvmenampilkan nilai yang dipisahkan tab dan dipisahkan baris baru tanpa pemformatan tambahan, kunci, atau simbol lainnya.- Format TSV berguna untuk output ringkas dan tujuan pembuatan skrip.
- TSV akan menghapus tanda kutip ganda yang dipertahankan format JSON.
- Untuk menentukan format yang Anda inginkan untuk TSV, gunakan
--queryparameter .
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 akan 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 pipa.
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 "untuk":
#!/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 doneAtau, gunakan
xargsdan pertimbangkan untuk menggunakan-Pbendera untuk menjalankan operasi secara paralel untuk 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
--idssecara paralel untuk mencapai efek xarg yang sama. Perhatikan bahwa@-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, jika.. Kemudian.. lainnya, dan penanganan kesalahan, lihat Pelajari 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, Anda perlu memahami 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 yang tidak diperhitungkan, berikut adalah beberapa saran:
Jika Anda memberikan parameter yang berisi spasi kosong, bungkus dalam tanda kutip.
Di Bash atau PowerShell, tanda kutip 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 di dalam string JSON. Ini diperlukan saat memasok nilai JSON sebaris. Misalnya, JSON ini benar di Bash:
'{"key": "value"}'.Jika perintah Anda akan dijalankan pada Prompt Perintah Windows, Anda harus menggunakan tanda kutip ganda. Jika nilai berisi tanda kutip ganda, Anda harus menghindarinya. Setara dengan string JSON di atas adalah
"{\"key\": \"value\"}"Gunakan konvensi Azure CLI
@<file>untuk memuat dari file dan melewati mekanisme interpretasi shell.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.jsonBash 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". Contohnya:az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"Ketika 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 dipisahkan spasi yang dikutip
--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.jsonJika Anda menggunakan parameter
--querydengan perintah, beberapa karakter JMESPath harus dikeluarkan dari program dalam shell.Ketiga perintah ini benar dan setara di 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 lainnya antara Bash, PowerShell dan Cmd, lihat Kueri output perintah Azure CLI
Cara terbaik untuk memecahkan masalah kutipan adalah dengan menjalankan perintah dengan
--debugbendera . 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 mencoba mengurainya sebagai nama parameter. Untuk mengurainya sebagai nilai, gunakan = untuk menggabungkan nama dan nilai parameter: --password="-VerySecret".
Operasi Asinkron
Operasi di Azure dapat memakan waktu banyak waktu. Misalnya, mengonfigurasi komputer virtual di pusat data tidak seketika. Azure CLI menunggu hingga perintah selesai untuk menerima perintah lain. Oleh karena itu, banyak perintah menawarkan parameter seperti yang --no-wait ditunjukkan di sini:
az group delete --name MyResourceGroup --no-wait
Saat menghapus grup sumber daya, semua sumber daya milik grup ini juga dihapus. Diperlukan waktu yang lama untuk menghapus sumber daya ini. Eksekusi perintah dengan parameter --no-wait, memungkinkan konsol untuk menerima perintah baru tanpa mengganggu proses 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 dapat menyebabkan kesalahan berikut: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",). Untuk mengatasi kesalahan ini, atur variabel REQUESTS_CA_BUNDLE lingkungan ke jalur file sertifikat bundel CA dalam format PEM.
| OS | Bundel otoritas sertifikat default |
|---|---|
| Windows | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
| Ubuntu/Debian Linux | /opt/az/lib/python/site-packages/certifi/cacert.pem |
| CentOS/RHEL/SUSE Linux | /usr/lib64/az/lib/python/site-packages/certifi/cacert.pem |
| macOS | /usr/local/Cellar/azure-cli/<cliversion>/libexec/lib/python/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 contohnya:
```console
<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.
Build bersamaan
Jika Anda menjalankan Azure CLI di mesin build tempat beberapa pekerjaan dapat dijalankan secara paralel, token akses dapat dibagikan antara dua pekerjaan build yang dijalankan sebagai pengguna OS yang sama. Untuk menghindari campuran, atur AZURE_CONFIG_DIR ke direktori tempat token akses disimpan.
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 kerjakan mungkin tidak 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 sumber daya az tidak memenuhi kebutuhan Anda, Anda dapat menggunakan 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 aplikasi Pembaruan , 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 bekerja dengan Azure Virtual Machines. Untuk contoh mendalam tentang menggunakan konstruksi Bash dengan Azure CLI termasuk perulangan, pernyataan kasus, if.. Kemudian.. lainnya, dan penanganan kesalahan, lihat Pelajari 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
)
Penanganan kesalahan untuk Azure CLI di PowerShell
Anda dapat menjalankan perintah Azure CLI di PowerShell, seperti yang dijelaskan dalam Memilih alat baris perintah Azure yang tepat. Jika demikian, pastikan Anda memahami penanganan kesalahan Azure CLI di PowerShell. Khususnya, Azure CLI tidak membuat pengecualian untuk diambil PowerShell.
Alternatifnya adalah menggunakan variabel otomatis $?. Variabel ini berisi status perintah terbaru. Jika perintah sebelumnya gagal, $? memiliki nilai $False. Untuk informasi selengkapnya, lihat about_Automatic_Variables.
Contoh berikut menunjukkan bagaimana variabel otomatis ini dapat bekerja untuk penanganan kesalahan:
az group create --name MyResourceGroup
if ($? -eq $false) {
Write-Error "Error creating resource group."
}
Perintah az gagal karena kehilangan parameter --location yang diperlukan. Pernyataan bersyarat menemukan bahwa $? salah dan menulis kesalahan.
Jika Anda ingin menggunakan try kata kunci dan catch, Anda dapat menggunakan throw untuk membuat pengecualian agar blok try dapat mengambil:
$ErrorActionPreference = "Stop"
try {
az group create --name MyResourceGroup
if ($? -eq $false) {
throw 'Group create failed.'
}
}
catch {
Write-Error "Error creating the resource group."
}
$ErrorActionPreference = "Continue"
Secara default, PowerShell hanya mengambil kesalahan pengakhiran. Contoh ini menetapkan variabel global $ErrorActionPreference ke Stop sehingga PowerShell dapat menangani kesalahan.
Pernyataan bersyarat menguji variabel $? untuk mengetahui apakah perintah sebelumnya gagal. Jika demikian, kata kunci throw membuat pengecualian untuk mengambil. Blok catch dapat digunakan untuk menulis pesan kesalahan atau menangani kesalahan.
Contoh tersebut mengembalikan $ErrorActionPreference ke nilai default-nya.
Untuk informasi selengkapnya tentang penanganan kesalahan PowerShell, lihat Segala hal yang ingin Anda ketahui tentang pengecualian.
Lihat juga
Saran dan Komentar
Kirim dan lihat umpan balik untuk