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:

  1. 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.
  2. 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
    
  3. 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:

  1. 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
    
  2. 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 "{}"
    
  3. 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.

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:

      1. Daftar yang tidak dikutip dan dipisahkan spasi --parameterName firstValue secondValue
      2. 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"

  • 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
)

Lihat juga