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:
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=table
a . - A JSON formátum megőrzi a dupla idézőjeleket, így általában nem megfelelő szkriptkészítési célokra.
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
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:
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
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 "{}"
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.
- Bash. Idézve
- PowerShell. Tudnivalók az idéző szabályokról
- Windows parancssor. Útmutató: Escape Characters, Delimiters and Quotes at the Windows parancssor
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ó:
- Nem kvótált, szóközzel elválasztott lista
--parameterName firstValue secondValue
- 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"
- Nem kvótált, szóközzel elválasztott lista
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_PROXY
HTTPS_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
)