Tippek az Azure CLI sikeres használatához

Az Azure CLI egy parancssori eszköz, amellyel számos rendszerhéj-környezetből konfigurálhatja és kezelheti az Azure-erőforrásokat. Miután kiválasztotta az előnyben részesített rendszerhéj-környezetet , és telepítette az Azure CLI-t, ebből a cikkből hasznos tippeket talál a gyakori buktatók elkerüléséhez és az Azure CLI sikeres használatához.

Az Egyes Azure CLI-parancsokkal kapcsolatos további információkért tekintse meg az Azure CLI referencialistáját.

Kimeneti formázás

Az Azure CLI-parancsok három gyakori kimeneti formátumot használnak:

  1. A json formátum JSON-sztringként jeleníti meg az információkat.

    • A JSON a legátfogóbb információkat nyújtja.
    • Ez a formátum az alapértelmezett, de a --output paraméterrel megadhat egy másik beállítást.
    • Módosítsa a globális alapértelmezett formátumot az egyik személyes beállításra az az konfiguráció, például az config set core.output=tablea .
    • A JSON formátum megőrzi a dupla idézőjeleket, így általában nem megfelelő szkriptkészítési célokra.
  2. A table formátum olvasható táblázatként jeleníti meg a kimenetet. Megadhatja, hogy mely értékek jelenjenek meg a táblában, és lekérdezésekkel szabja testre a kimenetet az itt látható módon:

    # command
    az vm show --resource-group myResourceGroup --name myVMname --query "{name: name, os:storageProfile.imageReference.offer}" --output table
    
    # output
    Name    Os
    ------  ------------
    myVMname   UbuntuServer
    
  3. A tsv formátum tabulátorral elválasztott és új vonallal elválasztott értékeket ad vissza további formázás, kulcsok és egyéb szimbólumok nélkül.

    • A TSV formátum tömör kimeneti és szkriptelési célokra hasznos.
    • A TSV a JSON formátum által megőrzött dupla idézőjeleket csíkozza.
    • A TSV formátumának megadásához használja a paramétert --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
    

Ezekről és más formátumokról további információt az Azure CLI-parancsok kimeneti formátumai című témakörben talál.

Értékek átadása egy másik parancsnak

Ha az értéket többször használják, rendelje hozzá egy változóhoz. A változók lehetővé teszik az értékek többszöri használatát, vagy általánosabb szkriptek létrehozását. Ez a példa az az virtuálisgép-lista parancs által talált azonosítót rendel egy változóhoz.

# 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

Ha az értéket csak egyszer használja, fontolja meg a pipálást. (A Piping egy parancs kimenetét egy második parancs bemeneteként adja át.)

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

Többértékű listák esetén vegye figyelembe a következő beállításokat:

  1. Ha további vezérlőkre van szüksége az eredményhez, használjon "for" hurkot:

    #!/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. Másik lehetőségként használja xargs és fontolja meg a -P jelölő használatát a műveletek párhuzamos futtatásához a jobb teljesítmény érdekében:

    az vm list --resource-group MyResourceGroup --show-details \
      --query "[?powerState=='VM stopped'].id" \
      --output tsv | xargs -I {} -P 10 az vm start --ids "{}"
    
  3. Végül az Azure CLI beépített támogatással rendelkezik a parancsok párhuzamos --ids feldolgozásához, hogy az xargok ugyanazt a hatást érjék el. @- a cső értékeinek lekérésére szolgál:

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

További információ a Bash-szerkezetek Azure CLI-vel való használatáról, beleértve a hurkokat, a kis- és nagybetűket. Akkor.. máskülönben a hibakezeléssel kapcsolatban lásd a Bash azure CLI-vel való használatát ismertető témakört.

Idézőjelek használata paraméterekben

Az Azure CLI-parancsok használatakor vegye figyelembe, hogy a rendszerhéj hogyan használ idézőjeleket, és hogyan menekül a karakterek elől. Ha támogatja a különböző rendszerhéjakban használt szkripteket, ismerje meg, hogy miben különböznek.

Feljegyzés

A PowerShell ismert hibája miatt néhány további menekülési szabály is érvényben van. További információ: A PowerShell-lel kapcsolatos problémák idézetelése.

A nem várt eredmények elkerülése érdekében íme néhány javaslat:

  • Ha olyan paramétert ad meg, amely szóközt tartalmaz, azt idézőjelek közé csomagolja.

  • A Bashben vagy a PowerShellben az egyszeres és a dupla idézőjel is helyesen lesz értelmezve. A Windows parancssorában csak a kettős idézőjelek értelmezhetők helyesen – az egyes idézőjelek az érték részeként lesznek kezelve.

  • Ha a parancs csak Bashen (vagy Zsh-n) fog futni, használjon egyetlen idézőjelet a JSON-sztringben lévő tartalom megőrzéséhez. A beágyazott JSON-értékek megadásához egyszeri idézőjelekre van szükség. Ez a JSON például a Bashben helyes: '{"key": "value"}'.

  • Ha a parancs windowsos parancssorban fut, dupla idézőjeleket kell használnia. Ha az érték dupla idézőjeleket tartalmaz, akkor el kell menekülnie. A fenti JSON-sztring megfelelője "{\"key\": \"value\"}"

  • A PowerShellben, ha az érték egy üres sztring, használja a .'""'

  • Ha az érték egy üres idézőjel-sztring ''a Bashben vagy a PowerShellben, használja a következőt "''":

  • Az Azure CLI konvenciójával @<file> betölthet egy fájlt, és megkerülheti a rendszerhéj értelmezési mechanizmusait.

    az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
    
  • A Bash az exportált változókban lévő dupla idézőjeleket értékeli ki. Ha ez a viselkedés nem az, amit szeretne, meneküljön el a változótól: "\$variable".

  • Egyes Azure CLI-parancsok a szóközzel elválasztott értékek listáját veszik fel.

    • Ha a kulcs neve vagy értéke szóközöket tartalmaz, csomagolja be az egész párt: "my key=my value". Példa:

      az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
      
    • Ha egy CLI-paraméter azt állítja, hogy egy szóközzel elválasztott listát fogad el, a következő két formátum egyike várható:

      1. Nem kvótált, szóközzel elválasztott lista --parameterName firstValue secondValue
      2. Idézett térelválasztó lista --parameterName "firstValue" "secondValue"

      Ez a példa egy szóközzel rendelkező sztring. Ez nem szóközzel elválasztott lista: --parameterName "firstValue secondValue"

  • A PowerShellnek vannak speciális karakterei, például: @. Az Azure CLI PowerShellben való futtatásához adja hozzá ` a speciális karaktert, hogy elkerülje azt. Az értéket egy vagy két idézőjelbe is belefoglalhatja "/".

    # 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
    
  • Ha a --query paramétert egy paranccsal használja, a JMESPath néhány karakterét meg kell szökni a rendszerhéjban.

    Ez a három parancs helyes és egyenértékű a Bashben:

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

    Íme két példa a Bash helytelen parancsaira:

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

    A Bash, a PowerShell és a Cmd közötti összehasonlítást lásd: Azure CLI-parancskimenet lekérdezése


  • Az idézőjelekkel kapcsolatos problémák elhárításának legjobb módja, ha a parancsot a --debug jelölővel futtatja. Ez a jelző az Azure CLI által a Python szintaxisában kapott tényleges argumentumokat jeleníti meg.

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

Kötőjelkarakterek használata paraméterekben

Ha egy paraméter értéke kötőjellel kezdődik, az Azure CLI megpróbálja paraméternévként elemezni. Értékként való elemzéséhez használja = a paraméter nevét és értékét: --password="-VerySecret".

Aszinkron műveletek

Az Azure-beli műveletek jelentős időt vehet igénybe. Egy virtuális gép adatközpontban való konfigurálása például nem azonnali. Az Azure CLI megvárja, amíg a parancs befejezi a többi parancs elfogadását. Ezért számos parancs kínál paramétert --no-wait az itt látható módon:

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

Ha töröl egy erőforráscsoportot, a program az ahhoz tartozó összes erőforrást is eltávolítja. Az erőforrások eltávolítása hosszú időt vehet igénybe. Amikor a paraméterrel futtatja a --no-wait parancsot, a konzol az eltávolítás megszakítása nélkül fogadja az új parancsokat.

Számos parancs kínál várakozási lehetőséget, és szünetelteti a konzolt, amíg valamilyen feltétel nem teljesül. Az alábbi példa az az vm wait paranccsal támogatja a független erőforrások párhuzamos létrehozását:

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

A két azonosító létrehozása után újra használhatja a konzolt.

Proxy mögötti munka

Ha önaláírt tanúsítványokat használó proxykiszolgálón használja az Azure CLI-t, az Azure CLI által használt Python-kérések tára a következő hibát okozhatja: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",) A hiba elhárításához állítsa a környezeti változót REQUESTS_CA_BUNDLE a CA-csomag tanúsítványfájljának elérési útjára PEM formátumban.

OS Alapértelmezett hitelesítésszolgáltatói csomag
Windows 32 bites C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
Windows 64 bites 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/SU Standard kiadás 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

Fűzze hozzá a proxykiszolgáló tanúsítványát a ca-csomag tanúsítványfájljához, vagy másolja a tartalmat egy másik tanúsítványfájlba. Ezután állítsa be REQUESTS_CA_BUNDLE az új fájl helyét. Példa:

<Original cacert.pem>

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

Egyes proxyk hitelesítést igényelnek. A vagy környezeti HTTP_PROXYHTTPS_PROXY változók formátumának tartalmaznia kell a hitelesítést, például HTTPS_PROXY="https://username:password@proxy-server:port". További információ: Proxyk konfigurálása az Azure-kódtárakhoz.

Egyidejű végrehajtás

Ha egyszerre futtat Azure CLI-parancsokat ugyanazon a gépen, írási ütközések akkor fordulhatnak elő, ha több Azure CLI-parancs is ugyanarra az MSAL-jogkivonat-gyorsítótárra ír.

A lehetséges hibák elkerülése érdekében elkülönítheti az Azure CLI konfigurációs mappáját az egyes szkriptekhez úgy, hogy az egyes szkriptek környezeti változóit AZURE_CONFIG_DIR külön könyvtárba állítja. Az azure CLI-parancsok ebben a szkriptben az alapértelmezett ~/.azure mappa helyett a konfigurált helyre menti a konfigurációt és a jogkivonat-gyorsítótárat.

export AZURE_CONFIG_DIR=/my/config/dir

Általános frissítési paraméterek

Az Azure CLI-parancscsoportok gyakran rendelkeznek frissítési paranccsal. Az Azure Virtual Machines például tartalmazza az az vm update parancsot. A legtöbb frissítési parancs a három általános paramétert kínálja: --add, --setés --remove.

A --set paraméterek a --add szóközzel elválasztott kulcs-érték párok listáját veszik fel: key1=value1 key2=value2. A frissíthető tulajdonságok megtekintéséhez használjon megjelenítési parancsot, például az az vm show-t.

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

A parancs egyszerűsítése érdekében fontolja meg egy JSON-sztring használatát. Ha például egy új adatlemezt szeretne egy virtuális géphez csatolni, használja a következő értéket:

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

Általános erőforrásparancsok (az resource)

Előfordulhat, hogy a használni kívánt szolgáltatás nem rendelkezik Azure CLI-támogatással. Az az erőforrásparancsokkal dolgozhat ezekkel az erőforrásokkal.

Ha csak létrehozási vagy frissítési parancsra van szüksége, használja az az deployment group create parancsot. A gyakorlati példákért tekintse meg az Azure rövid útmutatósablonjait.

REST API-parancsok (az rest)

Ha az általános frissítési paraméterek és az az erőforrás nem felelnek meg az igényeinek, az az rest paranccsal meghívhatja a REST API-t. A parancs automatikusan hitelesíti a bejelentkezett hitelesítő adatokat, és beállítja a fejlécet Content-Type: application/json. További információ: Azure REST API-referencia.

Ez a példa a Microsoft Graph API-val működik. Egy alkalmazás átirányítási URI-jainak frissítéséhez hívja meg az Update application REST API-t, ahogyan az ebben a kódban látható:

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

Ha OData formátumú kéréseket használ--uri-parameters, győződjön meg arról, hogy különböző környezetekben menekül$: a Bash, az as \$$ and in , a escape as és in PowerShell, escape $ as `$

Példaszkriptek

Az alábbiakban példákat talál a változók használatára és a listákon való ciklusokra az Azure Virtual Machines használatakor. Részletes példák a Bash-szerkezetek Azure CLI-vel való használatára, beleértve a hurkokat, a kis- és nagybetűket, az if.. Akkor.. máskülönben a hibakezeléssel kapcsolatban lásd a Bash azure CLI-vel való használatát ismertető témakört.

Ezekkel a szkriptekkel mentheti az azonosítókat változókba:

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

Ezeket a szkripteket használva végighaladhat egy listá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
)

Lásd még