Cara menggunakan Azure CLI di lingkungan Bash

Perintah referensi Azure CLI dapat dijalankan di beberapa lingkungan shell yang berbeda, tetapi Microsoft Docs mengutamakan lingkungan Bash. Jika Anda baru menggunakan Bash dan juga Azure CLI, artikel ini merupakan tempat yang tepat untuk memulai perjalanan pembelajaran Anda. Bekerja melalui artikel ini seperti yang Anda lakukan tutorial untuk mempelajari cara menggunakan Azure CLI di lingkungan Bash dengan mudah.

Dalam artikel ini, Anda akan mempelajari cara:

  • Mengkueri hasil sebagai array atau kamus JSON
  • Memformat output sebagai JSON, tabel, atau TSV
  • Mengkueri, memfilter, dan memformat satu dan beberapa nilai
  • Menggunakan sintaks if/exists/then dan case
  • Menggunakan perulangan for
  • Menggunakan perintah grep, sed, paste, dan bc
  • Mengisi dan menggunakan variabel shell dan lingkungan

Jika Anda tidak memiliki langganan Azure, buat akun gratis Azure sebelum memulai.

Memulai Bash

Mulai Bash menggunakan Azure Cloud Shell atau penginstalan lokal Azure CLI. Artikel ini mengasumsikan bahwa Anda menjalankan Bash baik menggunakan Azure Cloud Shell atau menjalankan Azure CLI secara lokal dalam kontainer docker.

Mengkueri hasil kamus

Perintah yang selalu hanya menampilkan satu objek yang menampilkan kamus JSON. Kamus adalah objek yang tidak berurutan yang diakses dengan kunci. Untuk artikel ini, kita akan mulai dengan mengkueri objek Akun menggunakan perintah Perlihatkan Akun.

az account show
az account show --output json # JSON is the default format

Output kamus JSON berikut memiliki beberapa bidang yang dihilangkan agar ringkas, dan mengidentifikasi informasi telah dihapus atau digeneralisasi.

bash-5.1# az account show
{
  "environmentName": "AzureCloud",
  "isDefault": true,
  "managedByTenants": [],
  "name": "My test subscription",
  "state": "Enabled",
  "user": {
    "name": "user@contoso.com",
    "type": "user"
  }
}

Memformat output sebagai YAML

Gunakan argumen --output yaml (atau -o yaml) untuk memformat output dalam format yaml, yaitu format serialisasi data teks biasa. YAML cenderung lebih mudah dibaca daripada JSON, dan dipetakan dengan mudah ke format tersebut. Beberapa aplikasi dan perintah CLI menggunakan YAML sebagai input konfigurasi, bukan JSON.

az account show --output yaml

Untuk informasi selengkapnya tentang memformat output sebagai yaml, lihat format output YAML.

Memformat output sebagai tabel

Gunakan argumen --output table (atau -o table) untuk memformat output sebagai tabel ASCII. Objek bersarang tidak disertakan dalam output tabel, namun masih dapat difilter sebagai bagian dari kueri.

az account show --output table

Untuk informasi selengkapnya tentang memformat output sebagai tabel, lihat Format output tabel.

Mengkueri dan memformat nilai tunggal dan nilai bertingkat

Kueri berikut memperlihatkan proses kueri nilai tunggal, termasuk nilai bertingkat dalam output kamus JSON. Kueri akhir dalam set ini memperlihatkan pemformatan output menggunakan argumen -o tsv. Argumen ini menampilkan hasil sebagai nilai yang dipisahkan tab dan baris baru. Tindakan ini berguna untuk menghapus tanda kutip dalam nilai yang dikembalikan - yang berguna untuk menggunakan output ke perintah dan alat lain yang perlu memproses teks dalam beberapa formulir (seperti yang ditunjukkan nanti dalam artikel ini).

az account show --query name # Querying a single value
az account show --query name -o tsv # Removes quotation marks from the output

az account show --query user.name # Querying a nested value
az account show --query user.name -o tsv # Removes quotation marks from the output

Mengkueri dan memformat properti dari array

Kueri berikut menunjukkan mendapatkan properti dalam array JSON. Dapatkan properti langganan, ditampilkan sebagai tabel langganan.

az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table

Kueri ini mengembalikan hasil yang mirip dengan:

Subscription_id                       Name                                               IsDefault
------------------------------------  -------------------------------------------------  -----------
11111111-3ddc-45ce-8334-c7b28a9e1c3a  C & L Azure developer experience content projects  False
22222222-8f1c-409b-af1e-8e2e65d9b90a  DevCenter - Infrastructure - Dogfood               False
33333333-c080-42a7-8973-1aa853ab4df3  Babel                                              False

Mengkueri dan memformat beberapa nilai, termasuk nilai bertingkat

Untuk mendapatkan lebih dari satu properti, tulis ekspresi dalam tanda kurung siku [ ] (daftar banyak pilihan) sebagai daftar yang dipisahkan koma. Kueri berikut memperlihatkan proses kueri beberapa nilai dalam output kamus JSON, menggunakan beberapa format output.

az account show --query [name,id,user.name] # return multiple values
az account show --query [name,id,user.name] -o table # return multiple values as a table

Untuk informasi selengkapnya tentang menampilkan beberapa nilai, lihat Mendapatkan beberapa nilai.

Mengganti nama properti dalam kueri

Kueri berikut memperlihatkan penggunaan operator { } (hash banyak pilihan) untuk mendapatkan kamus bukan array saat mengkueri beberapa nilai. Kueri ini juga memperlihatkan penggantian nama properti dalam hasil kueri.

az account show --query "{SubscriptionName: name, SubscriptionId: id, UserName: user.name}" # Rename the values returned
az account show --query "{SubscriptionName: name, SubscriptionId: id, UserName: user.name}" -o table # Rename the values returned in a table

Untuk informasi selengkapnya tentang mengganti nama properti dalam kueri, lihat Mengganti nama properti dalam kueri.

Mengkueri nilai boolean

Nilai Boolean diasumsikan benar, sehingga sintaks kueri "[?isDefault]" untuk perintah az account list menampilkan langganan default saat ini. Untuk mendapatkan nilai salah, Anda harus menggunakan karakter escape, seperti \.

Kueri berikut menunjukkan kueri semua akun dalam langganan, berpotensi mengembalikan array JSON jika ada beberapa langganan untuk akun tertentu, lalu mengkueri akun mana yang merupakan langganan default. Ini juga menunjukkan kueri untuk akun yang bukan langganan default. Kueri ini dibangun berdasarkan apa yang Anda pelajari sebelumnya untuk memfilter dan memformat hasilnya. Terakhir, kueri akhir memperlihatkan proses penyimpanan hasil kueri dalam variabel.

az account list
az account list --query "[?isDefault]" # Returns the default subscription
az account list --query "[?isDefault]" -o table # Returns the default subscription as a table
az account list --query "[?isDefault].[name,id]" # Returns the name and id of the default subscription
az account list --query "[?isDefault].[name,id]" -o table # Returns the name and id of the default subscription as a table
az account list --query "[?isDefault].{SubscriptionName: name, SubscriptionId: id}" -o table # Returns the name and id of the default subscription as a table with friendly names

az account list --query "[?isDefault == \`false\`]" # Returns all non-default subscriptions, if any
az account list --query "[?isDefault == \`false\`].name" -o table # Returns all non-default subscriptions, if any, as a table

az account list --query "[?isDefault].id" -o tsv # Returns the subscription id without quotation marks
subscriptionId="$(az account list --query "[?isDefault].id" -o tsv)" # Captures the subscription id as a variable.
echo $subscriptionId # Returns the contents of the variable.
az account list --query "[? contains(name, 'Test')].id" -o tsv # Returns the subscription id of a non-default subscription containing the substring 'Test'
subscriptionId="$(az account list --query "[? contains(name, 'Test')].id" -o tsv) # Captures the subscription id as a variable. 
az account set -s $subscriptionId # Sets the current active subscription

Membuat objek menggunakan variabel dan pengacakan

Mengatur nilai acak untuk digunakan dalam perintah berikutnya

Mengatur dan menggunakan nilai acak untuk digunakan dalam variabel akan memungkinkan Anda menjalankan skrip beberapa kali tanpa konflik penamaan. Konflik penamaan dapat terjadi karena nilai harus unik di seluruh layanan, atau karena objek yang telah Anda hapus masih ada di Azure hingga proses penghapusan selesai.

$RANDOM adalah fungsi bash (bukan konstanta) yang mengembalikan bilangan bulat 16-bit acak yang ditandatangani (dari 0 hingga 32767). Perintah let adalah perintah Bash bawaan untuk mengevaluasi ekspresi aritmetika. Menggunakan perintah berikut akan membuat nilai yang cukup unik untuk sebagian besar tujuan.

let "randomIdentifier=$RANDOM*$RANDOM"

Menggunakan spasi dan tanda kutip

Spasi digunakan untuk memisahkan perintah, opsi, dan argumen. Gunakan tanda kutip guna memberi tahu shell Bash untuk mengabaikan semua karakter khusus, misalnya spasi kosong adalah karakter khusus. Saat melihat tanda kutip pertama, shell Bash mengabaikan karakter khusus hingga tanda kutip penutup. Namun, terkadang Anda ingin shell Bash mengurai karakter khusus tertentu, seperti tanda dolar, tanda kutip terbalik, dan garis miring terbalik. Untuk skenario ini, gunakan tanda kutip ganda.

Perintah berikut menggunakan perintah az group create untuk mengilustrasikan penggunaan tanda kutip tunggal dan ganda. Perintah ini digunakan untuk menangani spasi dan mengevaluasi karakter khusus saat bekerja dengan variabel dan membuat objek.

resourceGroup='msdocs-learn-bash-$randomIdentifier'
echo $resourceGroup # The $ is ignored in the creation of the $resourceGroup variable
resourceGroup="msdocs-learn-bash-$randomIdentifier"
echo $resourceGroup # The $randomIdentifier is evaluated when defining the $resourceGroup variable
location="East US" # The space is ignored when defining the $location variable
echo The value of the location variable is $location # The value of the $location variable is evaluated
echo "The value of the location variable is $location" # The value of the $location variable is evaluated
echo "The value of the location variable is \$location" # The value of the $location variable is not evaluated
echo 'The value of the location variable is $location' # The value of the $location variable is not evaluated
az group create --name $resourceGroup --location $location # Notice that the space in the $location variable is not ignored and the command fails as it treats the value after the space as a new command 
az group create --name $resourceGroup --location "$location" # Notice that the space in the $location variable is ignored and the location argument accepts the entire string as the value 

Dalam output kamus JSON, tinjau properti grup sumber daya yang dibuat.

Menggunakan If Then Else untuk menentukan apakah variabel null

Untuk mengevaluasi string, gunakan != dan untuk mengevaluasi angka, gunakan -ne. Pernyataan If Then Else berikut mengevaluasi apakah variabel $resourceGroup telah diatur. Jika ya, nilai variabel akan ditampilkan. Jika tidak, variabel akan diatur.

if [ $resourceGroup != '' ]; then
   echo $resourceGroup
else
   resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi

Menggunakan If Then untuk membuat atau menghapus grup sumber daya

Skrip berikut membuat grup sumber daya baru hanya jika satu dengan nama yang ditentukan belum ada.

if [ $(az group exists --name $resourceGroup) = false ]; then 
   az group create --name $resourceGroup --location "$location" 
else
   echo $resourceGroup
fi

Skrip berikut menghapus grup sumber daya baru yang sudah ada jika sudah ada grup sumber daya dengan nama yang ditentukan. Anda dapat menggunakan argumen --no-wait untuk menampilkan kontrol tanpa menunggu perintah selesai. Namun, untuk artikel ini, kami ingin menunggu grup sumber daya dihapus sebelum melanjutkan. Untuk informasi selengkapnya tentang operasi asinkron, lihat Operasi asinkron. Kami menunjukkan penggunaan --no-wait argumen di akhir artikel ini.

if [ $(az group exists --name $resourceGroup) = true ]; then 
   az group delete --name $resourceGroup -y # --no-wait
else
   echo The $resourceGroup resource group does not exist
fi

Menggunakan Grep untuk menentukan apakah grup sumber daya ada, dan membuat grup sumber daya jika tidak

Perintah berikut menyalurkan output perintah az group list ke perintah grep. Jika grup sumber daya yang ditentukan tidak ada, perintah membuat grup sumber daya menggunakan variabel yang ditentukan sebelumnya.

az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"

Menggunakan pernyataan CASE untuk menentukan apakah grup sumber daya ada, dan buat grup sumber daya jika tidak

Pernyataan CASE berikut membuat grup sumber daya baru hanya jika satu dengan nama yang ditentukan belum ada. Jika ada grup sumber daya dengan nama yang ditentukan, pernyataan CASE akan menampilkan bahwa grup sumber daya ada.

var=$(az group list --query "[? contains(name, '$resourceGroup')].name" --output tsv)
case $resourceGroup in
$var)
echo The $resourceGroup resource group already exists.;;
*)
az group create --name $resourceGroup --location "$location";;
esac

Menggunakan perulangan for dan mengkueri array

Di bagian artikel ini, kami membuat akun penyimpanan lalu menggunakan untuk perulangan untuk membuat blob dan kontainer. Kami juga menunjukkan kueri array JSON dan bekerja dengan variabel lingkungan.

Membuat akun penyimpanan

Perintah berikut menggunakan perintah az storage account create untuk membuat akun penyimpanan yang kami gunakan saat membuat kontainer penyimpanan.

storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob

Mendapatkan kunci akun penyimpanan

Perintah berikut menggunakan perintah az storage account keys list untuk menampilkan nilai kunci akun penyimpanan. Kemudian, kita akan menyimpan nilai kunci dalam variabel untuk digunakan saat membuat kontainer penyimpanan.

az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[].value" -o tsv # returns both storage account key values

az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[0].value" -o tsv # returns a single storage account key value

accountKey=$(az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[0].value" -o tsv)

echo $accountKey

Buat kontainer penyimpanan

Kita mulai dengan menggunakan az storage container create untuk membuat satu kontainer penyimpanan lalu menggunakan az storage container list untuk mengkueri nama kontainer yang dibuat.

container="learningbash"
az storage container create --account-name $storageAccount --account-key $accountKey --name $container

az storage container list --account-name $storageAccount --account-key $accountKey --query [].name

Mengunggah data ke kontainer

Skrip berikut membuat tiga file sampel menggunakan perulangan for.

for i in `seq 1 3`; do
    echo $randomIdentifier > container_size_sample_file_$i.txt
done

Skrip berikut menggunakan perintah az storage blob upload-batch untuk mengunggah blob ke kontainer penyimpanan.

az storage blob upload-batch \
    --pattern "container_size_sample_file_*.txt" \
    --source . \
    --destination $container \
    --account-key $accountKey \
    --account-name $storageAccount

Skrip berikut menggunakan perintah az storage blob list untuk membuat daftar blob di kontainer penyimpanan.

az storage blob list \
    --container-name $container \
    --account-key $accountKey \
    --account-name $storageAccount \
    --query "[].name"

Skrip berikut menampilkan total byte dalam kontainer penyimpanan.

bytes=`az storage blob list \
    --container-name $container \
    --account-key $accountKey \
    --account-name $storageAccount \
    --query "[*].[properties.contentLength]" \
    --output tsv | paste -s -d+ | bc`

echo "Total bytes in container: $bytes"
echo $bytes

Membuat banyak kontainer menggunakan perulangan

Selanjutnya, kami membuat beberapa kontainer menggunakan perulangan yang menunjukkan beberapa cara untuk menulis perulangan.

for i in `seq 1 4`; do 
az storage container create --account-name $storageAccount --account-key $accountKey --name learnbash-$i
done

for value in {5..8}
for (( i=5; i<10; i++));
do
az storage container create --account-name $storageAccount --account-key $accountKey --name learnbash-$i
done

az storage container list --account-name $storageAccount --account-key $accountKey --query [].name

Menggunakan EXPORT untuk menentukan variabel lingkungan

Dalam skrip kontainer penyimpanan sebelumnya, kita menentukan nama akun dan kunci akun dengan setiap perintah. Sebagai gantinya, Anda dapat menyimpan kredensial autentikasi menggunakan variabel lingkungan yang sesuai: AZURE_STORAGE_ACCOUNT dan AZURE_STORAGE_KEY. Untuk melakukan tindakan ini, gunakan EKSPOR.

export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.

Skrip berikut membuat string metadata dan kemudian menggunakan perintah az storage container metadata update untuk memperbarui kontainer dengan string tersebut, tentunya menggunakan variabel lingkungan.

metadata="key=value pie=delicious" # Define metadata
az storage container metadata update \
    --name $container \
    --metadata $metadata # Update the metadata
az storage container metadata show \
    --name $containerName # Show the metadata

Perintah berikut menggunakan perintah az storage container delete untuk menghapus satu kontainer bernama dan kemudian menghapus beberapa kontainer dalam perulangan.

az storage container delete \
    --name $container

Dapatkan daftar kontainer yang berisi awalan tertentu dan simpan hasil ke dalam variabel.

containerPrefix="learnbash"
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --output tsv)

Hapus daftar kontainer dalam perulangan menggunakan argumen --prefix.

for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    az storage container delete \
    --name $tmpName 
done

Penanganan kesalahan

Untuk segera keluar dari skrip jika perintah mengembalikan status bukan nol, jalankan perintah berikut:

set -e

Untuk informasi selengkapnya tentang mengatur opsi shell dan bantuan lainnya, jalankan perintah berikut:

help set
help help

Membersihkan sumber daya

Setelah selesai artikel ini, hapus grup sumber daya dan semua sumber daya di dalamnya. Gunakan argumen --no-wait.

if [ $(az group exists --name $resourceGroup) = true ]; then 
   az group delete --name $resourceGroup -y  --no-wait
else
   echo The $resourceGroup resource group does not exist
fi

Lihat juga