Azure CLI'yi başarıyla kullanmaya yönelik ipuçları

Azure CLI, birçok kabuk ortamından Azure kaynaklarını yapılandırmanıza ve yönetmenize olanak tanıyan bir komut satırı aracıdır. Tercih ettiğiniz kabuk ortamını seçtikten ve Azure CLI'yı yükledikten sonra, yaygın tuzaklardan kaçınma ve Azure CLI'yi başarıyla kullanma hakkında yararlı ipuçları bulmak için bu makaleyi kullanın.

Belirli Azure CLI komutları hakkında daha fazla bilgi edinmek için Bkz . Azure CLI Başvurusu listesi.

Çıkış biçimlendirmesi

Azure CLI komutları ile üç yaygın çıkış biçimi kullanılır:

  1. json biçimi bilgileri JSON dizesi olarak gösterir.

    • JSON size en kapsamlı bilgileri verir.
    • Bu biçim varsayılandır, ancak parametresini --output kullanarak farklı bir seçenek belirtebilirsiniz.
    • gibi az config set core.output=tableaz config kullanarak genel varsayılan biçimi kişisel tercihlerinizden biriyle değiştirin.
    • JSON biçimi çift tırnakları korur ve genellikle betik oluşturma amacıyla uygun değildir.
  2. table biçimi, çıktıyı okunabilir bir tablo olarak sunar. Tabloda hangi değerlerin görüneceğini belirtebilir ve burada gösterildiği gibi çıktıyı özelleştirmek için sorguları kullanabilirsiniz:

    # command
    az vm show --resource-group myResourceGroup --name myVMname --query "{name: name, os:storageProfile.imageReference.offer}" --output table
    
    # output
    Name    Os
    ------  ------------
    myVMname   UbuntuServer
    
  3. Biçim, tsv ek biçimlendirme, tuşlar veya diğer simgeler olmadan sekmeyle ayrılmış ve yeni satırla ayrılmış değerler döndürür.

    • TSV biçimi, kısa çıkış ve betik oluşturma amacıyla kullanışlıdır.
    • TSV, JSON biçiminin koruduğu çift tırnakları şeritler.
    • TSV için istediğiniz biçimi belirtmek için parametresini --query kullanın.
    export vm_ids=$(az vm list --show-details --resource-group myResourceGroup --query "[?powerState=='VM running'].id" --output tsv)
    az vm stop --ids $vm_ids
    

Bu ve diğer biçimler hakkında daha fazla bilgi için bkz . Azure CLI komutları için çıkış biçimleri.

Değerleri başka bir komuta geçirme

Değer birden çok kez kullanılıyorsa bir değişkene atayın. Değişkenler, değerleri birden çok kez kullanmanıza veya daha fazla genel betik oluşturmanıza olanak sağlar. Bu örnek, az vm list komutu tarafından bulunan bir kimliği bir değişkene atar.

# 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

Değer yalnızca bir kez kullanılıyorsa, boru kullanmayı göz önünde bulundurun. (Piping, bir komutun çıkışını ikinci bir komuta giriş olarak geçirir.)

az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm

Çok değerli listeler için aşağıdaki seçenekleri göz önünde bulundurun:

  1. Sonuç üzerinde daha fazla denetime ihtiyacınız varsa bir "for" döngüsü kullanın:

    #!/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. Alternatif olarak, gelişmiş performans için işlemleri paralel olarak çalıştırmak için bayrağını kullanın xargs ve kullanmayı -P göz önünde bulundurun:

    az vm list --resource-group MyResourceGroup --show-details \
      --query "[?powerState=='VM stopped'].id" \
      --output tsv | xargs -I {} -P 10 az vm start --ids "{}"
    
  3. Son olarak Azure CLI, xargs'nin aynı etkisini elde etmek için komutları paralel --ids olarak işlemek için yerleşik desteğe sahiptir. @- borudan değerleri almak için kullanılır:

    az vm list --resource-group MyResourceGroup --show-details \
      --query "[?powerState=='VM stopped'].id" \
      --output tsv | az vm start --ids @-
    

Bash yapılarını Azure CLI ile kullanma hakkında daha fazla bilgi için döngüler, durum deyimleri,.. Sonra.. değilse ve hata işleme için bkz . Bash'i Azure CLI ile kullanmayı öğrenme.

Parametrelerde tırnak işaretleri kullanma

Azure CLI komutlarıyla çalışırken kabuğunuzun tırnak işaretlerini ve kaçış karakterlerini nasıl kullandığını unutmayın. Farklı kabuklarda kullanılan betikleri destekliyorsanız bunların nasıl farklılık gösterdiğini anlayın.

Not

PowerShell'deki bilinen bir sorun nedeniyle bazı ek kaçış kuralları geçerlidir. Daha fazla bilgi için bkz . PowerShell ile ilgili sorunları alıntılama.

Tahmin edilmeyen sonuçlardan kaçınmak için birkaç öneri aşağıdadır:

  • Boşluk içeren bir parametre sağlarsanız, bunu tırnak içine alın.

  • Bash veya PowerShell'de hem tek hem de çift tırnak işaretleri doğru yorumlanır. Windows Komut İstemi'nde yalnızca çift tırnaklar doğru yorumlanır; tek tırnaklar değerin bir parçası olarak kabul edilir.

  • Komutunuz yalnızca Bash (veya Zsh) üzerinde çalıştırılacaksa, JSON dizesinin içindeki içeriği korumak için tek tırnak kullanın. Satır içi JSON değerleri sağlanırken tek tırnak işareti gerekir. Örneğin, bu JSON Bash'te doğrudur: '{"key": "value"}'.

  • Komutunuz bir Windows Komut İstemi'nde çalışıyorsa, çift tırnak kullanmanız gerekir. Değer çift tırnak içeriyorsa, bu değerden kaçmalısınız. Yukarıdaki JSON dizesinin eşdeğeri şudur: "{\"key\": \"value\"}"

  • PowerShell'de, değeriniz boş bir dizeyse kullanın '""'.

  • Bash veya PowerShell'de, değeriniz boş bir tırnak işareti dizesiyse ''kullanın "''".

  • Bir dosyadan yüklemek ve kabuğun yorumlama mekanizmalarını atlamak için Azure CLI @<file> kuralını kullanın.

    az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
    
  • Bash, dışarı aktarılan değişkenlerde çift tırnakları değerlendirir. İstediğiniz davranış bu değilse değişkeninden kurtulabilirsiniz: "\$variable".

  • Bazı Azure CLI komutları boşlukla ayrılmış değerlerin listesini alır.

    • Anahtar adı veya değer boşluk içeriyorsa, çiftin tamamını sarmalayın: "my key=my value". Örneğin:

      az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
      
    • CLI parametresi boşlukla ayrılmış bir liste kabul ettiğini belirttiğinde, iki biçimden biri beklenir:

      1. Sıralanmamış, boşlukla ayrılmış liste --parameterName firstValue secondValue
      2. Tırnak içine alınmış boşlukla ayrılmış liste --parameterName "firstValue" "secondValue"

      Bu örnek, içinde boşluk bulunan bir dizedir. Boşlukla ayrılmış bir liste değildir: --parameterName "firstValue secondValue"

  • PowerShell'in @gibi özel karakterleri vardır. Azure CLI'yi PowerShell'de çalıştırmak için, kaçış için özel karakterin önüne ekleyin ` . Değeri tek veya çift tırnak "/"içine de alabilirsiniz.

    # 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
    
  • parametresini --query bir komutla kullandığınızda, JMESPath'in bazı karakterlerinin kabukta kaçılması gerekir.

    Bu üç komut Bash'te doğru ve eşdeğerdir:

    az version --query '"azure-cli"'
    az version --query \"azure-cli\"
    az version --query "\"azure-cli\""
    

    Bash'teki yanlış komutlara iki örnek aşağıda verilmiştir:

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

    Bash, PowerShell ve Cmd arasında daha fazla örnek karşılaştırma için bkz . Azure CLI komut çıktısını sorgulama


  • Alıntılama sorununu gidermenin en iyi yolu, komutu bayrağıyla --debug çalıştırmaktır. Bu bayrak, Python söz diziminde Azure CLI tarafından alınan gerçek bağımsız değişkenleri gösterir.

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

Parametrelerde kısa çizgi karakterleri kullanma

Parametrenin değeri kısa çizgiyle başlıyorsa, Azure CLI bunu parametre adı olarak ayrıştırmaya çalışır. Değer olarak ayrıştırmak için parametresinin adını ve değerini birleştirmek için kullanın = : --password="-VerySecret".

Zaman uyumsuz işlemler

Azure'daki işlemler dikkate değer bir süre alabilir. Örneğin, bir veri merkezinde sanal makine yapılandırmak anlık bir işlem değildir. Azure CLI, komutun diğer komutları kabul etme işlemini tamamlayana kadar bekler. Bu nedenle birçok komut burada gösterildiği gibi bir --no-wait parametre sunar:

az group delete --name MyResourceGroup --no-wait

Bir kaynak grubunu sildiğinizde, buna ait olan tüm kaynaklar da kaldırılır. Bu kaynakların kaldırılması uzun sürebilir. komutunu parametresiyle --no-wait çalıştırdığınızda, konsol kaldırma işlemini kesintiye uğratmadan yeni komutları kabul eder.

Birçok komut, bazı koşullar karşılanıncaya kadar konsolu duraklatan bir bekleme seçeneği sunar. Aşağıdaki örnek, paralel olarak bağımsız kaynaklar oluşturmayı desteklemek için az vm wait komutunu kullanır:

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

her iki kimlik de oluşturulduktan sonra konsolunu yeniden kullanabilirsiniz.

Ara sunucu arkasında çalışma

Azure CLI'yı otomatik olarak imzalanan sertifikalar kullanan bir ara sunucu üzerinden kullanıyorsanız, Azure CLI tarafından kullanılan Python istek kitaplığı aşağıdaki hataya neden olabilir: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",). Bu hatayı gidermek için ortam değişkenini REQUESTS_CA_BUNDLE PEM biçiminde CA paket sertifika dosyasının yoluna ayarlayın.

OS Varsayılan sertifika yetkilisi paketi
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

Ara sunucunun sertifikasını CA paket sertifika dosyasına ekleyin veya içeriği başka bir sertifika dosyasına kopyalayın. Ardından yeni dosya konumuna ayarlayın REQUESTS_CA_BUNDLE . Bir örnek aşağıda verilmiştir:

<Original cacert.pem>

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

Bazı proxy'ler kimlik doğrulaması gerektirir. veya HTTPS_PROXY ortam değişkenlerinin HTTP_PROXY biçimi gibi HTTPS_PROXY="https://username:password@proxy-server:port"kimlik doğrulamasını içermelidir. Ayrıntılar için bkz . Azure kitaplıkları için proxy'leri yapılandırma.

Eşzamanlı yürütme

Azure CLI komutlarını aynı makinede eşzamanlı olarak çalıştırırsanız, aynı MSAL belirteci önbelleğine birden çok Azure CLI komutu yazarsa yazma çakışmaları oluşabilir.

Olası hataları önlemek için, her betik için ortam değişkenini AZURE_CONFIG_DIR ayrı bir dizine ayarlayarak her betik için Azure CLI yapılandırma klasörünü yalıtabilirsiniz. Bu betikteki Azure CLI komutları yapılandırmayı ve belirteç önbelleğini varsayılan ~/.azure klasör yerine yapılandırılmış konuma kaydeder.

export AZURE_CONFIG_DIR=/my/config/dir

Genel güncelleştirme parametreleri

Azure CLI komut grupları genellikle bir güncelleştirme komutuna sahiptir. Örneğin Azure Sanal Makineler az vm update komutunu içerir. Güncelleştirme komutlarının çoğu üç genel parametre sunar: --add, --setve --remove.

--set ve --add parametreleri, boşlukla ayrılmış anahtar-değer çiftlerinin listesini alır: key1=value1 key2=value2. Hangi özellikleri güncelleştirebileceğinizi görmek için az vm show gibi bir show komutu kullanın.

az vm show --resource-group VMResources --name virtual-machine-01

Komutu basitleştirmek için bir JSON dizesi kullanmayı göz önünde bulundurun. Örneğin, bir sanal makineye yeni bir veri diski eklemek için aşağıdaki değeri kullanın:

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}"

Genel kaynak komutları (az resource)

Çalışmak istediğiniz bir hizmette Azure CLI desteği olmayabilir. Bu kaynaklarla çalışmak için az resource komutlarını kullanabilirsiniz.

Yalnızca oluşturma veya güncelleştirme komutlarını kullanmanız gerekiyorsa az deployment group create komutunu kullanın. Çalışan örnekler için bkz . Azure Hızlı Başlangıç Şablonları.

REST API komutları (az rest)

Genel güncelleştirme parametreleri ve az resource gereksinimlerinizi karşılamıyorsa rest API'yi çağırmak için az rest komutunu kullanabilirsiniz. komutu oturum açma kimlik bilgilerini kullanarak otomatik olarak kimlik doğrulaması yapar ve üst bilgisini Content-Type: application/jsonayarlar. Daha fazla bilgi için bkz . Azure REST API başvurusu.

Bu örnek, Microsoft Graph API'siyle birlikte çalışır. Bir Uygulamanın yeniden yönlendirme URI'lerini güncelleştirmek için, bu kodda olduğu gibi Uygulamayı güncelleştir REST API'sini çağırın:

# 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"]}}'

İstekler için OData biçiminde kullanırken--uri-parameters, farklı ortamlarda kaçış $ yaptığınızdan emin olun: içindeBash, $ olarak \$ kaçış ve içinde PowerShell, farklı kaçış $ `$

Betik örnekleri

Azure Sanal Makineler ile çalışırken değişkenleri kullanma ve listede döngü oluşturma örnekleri aşağıda verilmiştir. Azure CLI ile Bash yapılarını kullanmayla ilgili döngüler, durum deyimleri ve varsa dahil olmak üzere ayrıntılı örnekler için.. Sonra.. değilse ve hata işleme için bkz . Bash'i Azure CLI ile kullanmayı öğrenme.

Değişkenlerin kimliklerini kaydetmek için şu betikleri kullanın:

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

Listede döngü yapmak için şu betikleri kullanın:

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
)

Ayrıca bkz.