Tipy pro úspěšné používání Azure CLI
Azure CLI je nástroj příkazového řádku, který umožňuje konfigurovat a spravovat prostředky Azure z mnoha prostředí prostředí. Jakmile zvolíte upřednostňované prostředí a nainstalujete Azure CLI, v tomto článku se dozvíte užitečné tipy, jak se vyhnout běžným nástrahám a úspěšně používat Azure CLI.
Další informace o konkrétních příkazech Azure CLI najdete v seznamu referenčních informací k Azure CLI.
Formátování výstupu
Tři běžné formáty výstupu se používají s příkazy Azure CLI:
Formát
json
zobrazuje informace jako řetězec JSON.- JSON poskytuje nejkomplexnější informace.
- Tento formát je výchozí, ale pomocí parametru
--output
můžete zadat jinou možnost. - Změňte globální výchozí formát na jednu z vašich osobních preferencí pomocí příkazu az config , například
az config set core.output=table
. - Formát JSON zachovává dvojité uvozovky, což obecně zneužito pro skriptovací účely.
Formát
table
představuje výstup jako čitelné tabulky. Můžete určit, které hodnoty se zobrazí v tabulce, a pomocí dotazů přizpůsobit výstup, jak je znázorněno tady:# command az vm show --resource-group myResourceGroup --name myVMname --query "{name: name, os:storageProfile.imageReference.offer}" --output table # output Name Os ------ ------------ myVMname UbuntuServer
Formát
tsv
vrátí hodnoty oddělené tabulátorem a novými spojnicemi bez dalšího formátování, klíčů nebo jiných symbolů.- Formát TSV je užitečný pro stručné účely výstupu a skriptování.
- TSV odstraní dvojité uvozovky, které zachová formát JSON.
- K určení požadovaného formátu pro TSV použijte
--query
parametr.
export vm_ids=$(az vm list --show-details --resource-group myResourceGroup --query "[?powerState=='VM running'].id" --output tsv) az vm stop --ids $vm_ids
Další informace o těchto a dalších formátech najdete v tématu Výstupní formáty pro příkazy Azure CLI.
Předání hodnot jinému příkazu
Pokud se hodnota používá více než jednou, přiřaďte ji proměnné. Proměnné umožňují používat hodnoty více než jednou nebo vytvářet obecnější skripty. Tento příklad přiřadí ID nalezené příkazem az vm list k proměnné.
# 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
Pokud se hodnota použije jenom jednou, zvažte propojení. (Piping předává výstup jednoho příkazu jako vstup druhému příkazu.)
az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm
U seznamů s více hodnotami zvažte následující možnosti:
Pokud potřebujete více ovládacích prvků ve výsledku, použijte smyčku "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
Případně můžete použít
xargs
příznak a zvážit použití příznaku-P
ke spuštění operací paralelně, aby se zlepšil výkon:az vm list --resource-group MyResourceGroup --show-details \ --query "[?powerState=='VM stopped'].id" \ --output tsv | xargs -I {} -P 10 az vm start --ids "{}"
Azure CLI má navíc integrovanou podporu pro zpracování příkazů s několika
--ids
paralelně, aby se dosáhlo stejného efektu xargs.@-
slouží k získání hodnot z kanálu:az vm list --resource-group MyResourceGroup --show-details \ --query "[?powerState=='VM stopped'].id" \ --output tsv | az vm start --ids @-
Další informace o použití konstruktorů Bash s Azure CLI, včetně smyček, příkazů case, if.. Pak.. jinak a zpracování chyb najdete v tématu Informace o použití bashe s Azure CLI.
Použití uvozovek v parametrech
Při práci s příkazy Azure CLI mějte na paměti, jak vaše prostředí používá uvozovky a řídicí znaky. Pokud podporujete skripty používané v různých prostředích, zjistěte, jak se liší.
- Bash. Cituje
- PowerShell. O pravidlech uvozování
- Příkazový řádek systému Windows. Postupy: Řídicí znaky, oddělovače a uvozovky na příkazovém řádku Windows
Poznámka:
Kvůli známému problému v PowerShellu platí některá další pravidla pro zapouzdření. Další informace najdete v tématu Problémy s uvozováním v PowerShellu.
Pokud se chcete vyhnout neočekáženým výsledkům, tady je několik návrhů:
Pokud zadáte parametr, který obsahuje prázdné znaky, zabalte ho do uvozovek.
V prostředí Bash nebo PowerShell jsou jednoduché i dvojité uvozovky interpretovány správně. V příkazovém řádku Windows se správně interpretují pouze dvojité uvozovky – jednoduché uvozovky se považují za součást hodnoty.
Pokud se váš příkaz spustí jenom na Bash (nebo Zsh), použijte jednoduché uvozovky, abyste zachovali obsah uvnitř řetězce JSON. Jednoduché uvozovky jsou nezbytné při zadávání vložených hodnot JSON. Tento kód JSON je například správný v prostředí Bash:
'{"key": "value"}'
.Pokud příkaz běží na příkazovém řádku Windows, musíte použít dvojité uvozovky. Pokud hodnota obsahuje dvojité uvozovky, musíte utéct. Ekvivalentem výše uvedeného řetězce JSON je
"{\"key\": \"value\"}"
Pokud je hodnota v PowerShellu prázdný řetězec, použijte
'""'
.Pokud je hodnota v Bashu nebo PowerShellu prázdným řetězcem
''
uvozovek , použijte"''"
.Použijte konvenci Azure CLI
@<file>
k načtení ze souboru a obejití mechanismů interpretace prostředí.az ad app create --display-name myName --native-app --required-resource-accesses @manifest.json
Bash vyhodnocuje dvojité uvozovky v exportovaných proměnných. Pokud toto chování není to, co chcete, uchytejte proměnnou:
"\$variable"
.Některé příkazy Azure CLI přebírají seznam hodnot oddělených mezerami.
Pokud název klíče nebo hodnota obsahuje mezery, zabalte celý pár:
"my key=my value"
. Příklad:az web app config app settings set --resource-group myResourceGroup --name myWebAppName --settings "client id=id1" "my name=john"
Když parametr rozhraní příkazového řádku uvádí, že přijímá seznam oddělený mezerami, očekává se jeden ze dvou formátů:
- Seznam oddělený mezerami
--parameterName firstValue secondValue
- Seznam oddělený mezerami
--parameterName "firstValue" "secondValue"
Tento příklad je řetězec s mezerou. Nejedná se o seznam oddělený mezerami:
--parameterName "firstValue secondValue"
- Seznam oddělený mezerami
Existují speciální znaky PowerShellu, například na adrese
@
. Pokud chcete spustit Azure CLI v PowerShellu, přidejte`
ho před speciální znak, který ho unikne. Hodnotu můžete uzavřít také do jednoduchých nebo dvojitých uvozovek"
/"
.# 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
Pokud použijete
--query
parametr s příkazem, některé znaky JMESPath musí být v prostředí uchycené.Tyto tři příkazy jsou v Bash správné a ekvivalentní:
az version --query '"azure-cli"' az version --query \"azure-cli\" az version --query "\"azure-cli\""
Tady jsou dva příklady nesprávných příkazů v 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'
Další příklady porovnání mezi Bashem, PowerShellem a Cmd najdete v tématu Dotazování výstupu příkazu Azure CLI.
Nejlepším způsobem, jak vyřešit problém s uvozováním, je spustit příkaz s příznakem
--debug
. Tento příznak odhalí skutečné argumenty přijaté rozhraním příkazového řádku Azure v syntaxi Pythonu.# 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']
Použití znaků spojovníku v parametrech
Pokud hodnota parametru začíná pomlčkou, Azure CLI se ji pokusí analyzovat jako název parametru. Chcete-li jej analyzovat jako hodnotu, použijte =
ke zřetězení názvu a hodnoty parametru: --password="-VerySecret"
.
Asynchronních operace
Operace v Azure můžou trvat značné množství času. Například konfigurace virtuálního počítače v datacentru není okamžitá. Azure CLI čeká, až se příkaz dokončí, aby přijímal další příkazy. Mnoho příkazů proto nabízí --no-wait
parametr, jak je znázorněno tady:
az group delete --name MyResourceGroup --no-wait
Když odstraníte skupinu prostředků, odeberou se také všechny prostředky, které do ní patří. Odebrání těchto prostředků může trvat dlouho. Při spuštění příkazu s parametrem --no-wait
konzola přijímá nové příkazy bez přerušení odebrání.
Mnoho příkazů nabízí možnost čekání, která konzolu pozastaví, dokud nebude splněna určitá podmínka. Následující příklad používá příkaz az vm wait k podpoře paralelního vytváření nezávislých prostředků:
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
Po vytvoření obou ID můžete konzolu znovu použít.
Práce za proxy serverem
Pokud používáte Azure CLI přes proxy server, který používá certifikáty podepsané svým držitelem, může knihovna požadavků Pythonu používaná Azure CLI způsobit následující chybu: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
Pokud chcete tuto chybu vyřešit, nastavte proměnnou REQUESTS_CA_BUNDLE
prostředí na cestu k souboru certifikátu certifikační autority ve formátu PEM.
Operační systém | Výchozí sada certifikační autority |
---|---|
Windows 32bitová verze | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
Windows 64bitová verze | 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 |
Připojte certifikát proxy serveru k souboru certifikátu certifikační autority nebo zkopírujte obsah do jiného souboru certifikátu. Pak nastavte REQUESTS_CA_BUNDLE
nové umístění souboru. Tady je příklad:
<Original cacert.pem>
-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----
Některé proxy servery vyžadují ověření. Formát proměnných HTTP_PROXY
prostředí HTTPS_PROXY
by měl zahrnovat ověřování, například HTTPS_PROXY="https://username:password@proxy-server:port"
. Podrobnosti najdete v tématu Konfigurace proxy pro knihovny Azure.
Souběžné spuštění
Pokud spouštíte příkazy Azure CLI souběžně na stejném počítači, může dojít ke konfliktům zápisu, pokud do stejné mezipaměti tokenů MSAL zapisuje více příkazů Azure CLI.
Abyste se vyhnuli potenciálním selháním, můžete izolovat konfigurační složku Azure CLI pro každý skript nastavením proměnné AZURE_CONFIG_DIR
prostředí pro každý skript do samostatného adresáře. Příkazy Azure CLI v daném skriptu ukládají konfiguraci a mezipaměť tokenů do nakonfigurovaného umístění místo výchozí ~/.azure
složky.
export AZURE_CONFIG_DIR=/my/config/dir
Obecné parametry aktualizace
Skupiny příkazů Azure CLI často obsahují příkaz update. Azure Virtual Machines například zahrnuje příkaz az vm update. Většina aktualizačních příkazů nabízí tři obecné parametry: --add
, --set
a --remove
.
--add
Parametry --set
mají seznam dvojic klíč-hodnota oddělených mezerami: key1=value1 key2=value2
. Pokud chcete zjistit, jaké vlastnosti můžete aktualizovat, použijte příkaz show, například az vm show.
az vm show --resource-group VMResources --name virtual-machine-01
Pokud chcete tento příkaz zjednodušit, zvažte použití řetězce JSON. Pokud například chcete k virtuálnímu počítači připojit nový datový disk, použijte následující hodnotu:
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}"
Obecné příkazy prostředků (az resource)
Služba, se kterou chcete pracovat, nemusí mít podporu Azure CLI. K práci s těmito prostředky můžete použít příkazy az resource .
Pokud potřebujete jenom příkazy pro vytvoření nebo aktualizaci, použijte příkaz az deployment group create. Pracovní příklady najdete v tématu Šablony pro rychlý start Azure.
Příkazy rozhraní REST API (az rest)
Pokud obecné parametry aktualizace a az resource nevyhovují vašim potřebám, můžete k volání rozhraní REST API použít příkaz az rest . Příkaz se automaticky ověří pomocí přihlášených přihlašovacích údajů a nastaví hlavičku Content-Type: application/json
. Další informace najdete v referenčních informacích k rozhraní Azure REST API.
Tento příklad funguje s rozhraním Microsoft Graph API. Pokud chcete aktualizovat identifikátory URI přesměrování pro aplikaci, zavolejte rozhraní REST API pro aktualizaci aplikace , jak je znázorněno v tomto kódu:
# 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"]}}'
Při použití --uri-parameters
pro požadavky ve formě OData nezapomeňte utéct $
v různých prostředích: v Bash
, escape $
as \$
a in PowerShell
, escape $
as `$
Příklady skriptu
Tady jsou příklady použití proměnných a procházení seznamu při práci se službou Azure Virtual Machines. Podrobné příklady použití konstruktorů Bash s Azure CLI, včetně smyček, příkazů case, if. Pak.. jinak a zpracování chyb najdete v tématu Informace o použití bashe s Azure CLI.
Pomocí těchto skriptů uložte ID do proměnných:
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
Pomocí těchto skriptů můžete procházet seznam:
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
)
Viz také
- Konfigurace Azure CLI
- Naučte se používat Bash s Azure CLI.
- Dotazování výstupu příkazu Azure CLI
- Použití proměnných v příkazech Azure CLI
- Vyhledání ukázek Azure CLI a publikovaných článků