Azure CLI effectief gebruiken
Met Azure CLI kunt u Azure configureren en beheren vanuit Bash, PowerShell of een opdrachtpromptvenster. Azure CLI ondersteunt hergebruik van opdrachten, zowel op ad-hocbasis als via scripts. U moet rekening houden met de mogelijkheden van de shell die u gebruikt.
In dit artikel worden nuttige tips beschreven voor het gebruik van de Azure CLI en het voorkomen van valkuilen.
Vereisten
Gebruik Azure Cloud Shell met behulp van de bash-omgeving.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.
- Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Zie Aanmelden met Azure CLI voor aanvullende aanmeldingsopties.
- Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken met Azure CLI voor meer informatie over extensies.
- Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Als u vragen hebt over een Azure CLI-opdracht, zoekt u in Naslag voor Azure CLI.
Uitvoeropmaak
In veel Azure CLI-opdrachten worden gegevens in de console weergeven. Deze informatie kan het doel zijn van een opdracht, zoals in dit voorbeeld, waarbij de opdracht az account show uw huidige abonnement toont:
az account show
Soms weerspiegelt de informatie die door een opdracht wordt weergegeven de wijzigingen die u hebt aangebracht. In dit voorbeeld wordt een resourcegroep gemaakt met behulp van de opdracht az group create:
az group create --name MyResourceGroup --location eastus
Als u deze opdracht hebt uitgevoerd, toont de Azure CLI-console u de resourcegroep die u zojuist hebt gemaakt.
U kunt de indeling voor uitvoer selecteren door de parameter op te --output geven. In dit voorbeeld worden met de opdracht az account list alle abonnementen vermeld die u als tabel kunt openen:
az account list --output table
Hier zijn drie algemene indelingen:
- De
jsonindeling toont informatie in als een JSON-tekenreeks. Deze indeling biedt u de meest uitgebreide informatie. Deze indeling is de standaardindeling. U kunt de standaardindeling wijzigen met behulp van de opdracht az config. - De
tableindeling geeft uitvoer weer als een door mensen leesbare tabel. U kunt opgeven welke waarden worden weergegeven in de tabel en query's gebruiken om de uitvoer aan te passen. - De indeling retourneert door tabs gescheiden en door nieuwe regels gescheiden waarden zonder
tsvextra opmaak, sleutels of andere symbolen.
Zie Uitvoerindelingen voor Azure CLI-opdrachten voor meer informatie over deze en andere indelingen.
Waarden doorgeven aan een andere opdracht
Azure CLI-opdrachten worden uitgevoerd in een shell. In dit artikel wordt Bash gebruikt, maar er zijn andere opties. U kunt de standaard shellsyntaxis gebruiken om het gebruik van Azure CLI te vereenvoudigen.
U kunt een waarde opslaan als een variabele. Met variabelen kunt u waarden meer dan één keer gebruiken of meer algemene scripts maken. In dit voorbeeld wordt een id die met de opdracht az vm list is gevonden, toegewezen aan een variabele.
running_vm_ids=$(az vm list --resource-group MyResourceGroup --show-details \
--query "[?powerState=='VM running'].id" --output tsv)
Tip
Zorg ervoor dat u het tsv uitvoertype gebruikt. Andere uitvoertypen kunnen ongewenste symbolen bevatten, zoals aanhalingstekens.
Gebruik de waarde in latere opdrachten. U kunt de waarde controleren door de variabele te herhalen:
echo $running_vm_ids
U kunt ook een waarde van de ene opdracht doorspijpen naar een andere. In dit voorbeeld wordt de standaard Bash-syntaxis gebruikt om te zoeken naar een waarde:
az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm
Argumenten doorgeven
Aanhalingstekens gebruiken in argumenten
Wanneer u met Azure CLI-opdrachten werkt, moet u rekening houden met de manier waarop uw shell gebruikmaakt van aanhalingstekens en escape-tekens. Als u scripts ondersteunt die in verschillende shells worden gebruikt, moet u begrijpen hoe deze verschillen.
- Bash. Citeren
- Powershell. Over quoteringsregels
- Windows opdrachtprompt. Aanhalingstekens, scheidingstekens en aanhalingstekens aan de Windows opdrachtregel
Notitie
Vanwege een bekend probleem in PowerShell zijn er enkele extra escaperegels van toepassing. Zie Quoting issues with PowerShell (Problemen met Aaneen met PowerShell) voor meer informatie.
Als u een argument op geeft dat witruimte bevat, verpakt u dit tussen aanhalingstekens. Houd rekening met de volgende tips:
In Bash of PowerShell worden zowel enkele als dubbele aanhalingstekens geïnterpreteerd. In Windows opdrachtprompt worden alleen dubbele aanhalingstekens geïnterpreteerd. Enkele aanhalingstekens worden geïnterpreteerd als onderdeel van de waarde.
Gebruik voor Bash-opdrachten enkele aanhalingstekens om inline JSON te vereenvoudigen. Deze JSON is bijvoorbeeld juist in Bash:
'{"key": "value"}'. In Windows opdrachtprompt is het equivalent:"{\"key\": \"value\"}"Sommige Azure CLI-opdrachten nemen een lijst met door spaties gescheiden waarden. Als de sleutelnaam of -waarde spaties bevat, verpakt u het hele paar:
"my key=my value".Bash evalueert dubbele aanhalingstekens in geëxporteerde variabelen. Als dit gedrag niet is wat u wilt, escapet u de variabele :
"\$variable".Er zijn speciale tekens van PowerShell, zoals op
@. Als u Azure CLI wilt uitvoeren in PowerShell, voegt u`vóór het speciale teken toe om er een escape-teken aan toe te voegen. In plaats daarvan kunt u de waarde tussen enkele of dubbele aanhalingstekens"/"plaatsen.`@parameters.json '@parameters.json'Wanneer u de
--queryparameter gebruikt met een -opdracht, moeten bepaalde tekens van JMESPath in de shell een escape-teken hebben.Deze drie opdrachten zijn gelijkwaardig in Bash:
az version --query '"azure-cli"' az version --query \"azure-cli\" az version --query "\"azure-cli\""Deze twee opdrachten zijn gelijk in Windows opdrachtprompt:
az version --query "\"azure-cli\"" az version --query \"azure-cli\"Deze vijf opdrachten zijn gelijkwaardig in PowerShell:
az version --query '\"azure-cli\"' az version --query "\`"azure-cli\`"" az version --query "\""azure-cli\""" az --% version --query "\"azure-cli\"" az --% version --query \"azure-cli\"
Afbreekstree tekens gebruiken in argumenten
Als de waarde van een argument begint met een koppelteken, probeert Azure CLI deze te parseren als argumentnaam. Als u deze als waarde wilt parseren, gebruikt u om de argumentnaam en = -waarde samen tevoegen: --password="-VerySecret" .
Asynchrone bewerkingen
Bewerkingen in Azure kunnen een merkbare hoeveelheid tijd duren. Het configureren van een virtuele machine in een datacenter ergens ter wereld is bijvoorbeeld niet onmiddellijk. Azure CLI wacht totdat de opdracht is voltooid om andere opdrachten te accepteren.
Veel opdrachten bieden een --no-wait parameter, waarmee andere opdrachten kunnen worden uitgevoerd. In het volgende voorbeeld wordt een resourcegroep verwijderd:
az group delete --name MyResourceGroup --no-wait
Wanneer u een resourcegroep verwijdert, worden ook alle resources verwijderd die er deel van uitmaken. Het verwijderen van deze resources kan lang duren. Door de opdracht uit te voeren met de parameter , kan de --no-wait console nieuwe opdrachten accepteren zonder het verwijderen te onderbreken.
Veel opdrachten bieden een wachtoptie en onderbreken de console totdat aan een bepaalde voorwaarde wordt voldaan. In het volgende voorbeeld wordt de opdracht az vm wait gebruikt om het parallel maken van onafhankelijke resources te ondersteunen:
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
Nadat beide ID's zijn gemaakt, kunt u de console opnieuw gebruiken.
Achter een proxy werken
Als u Azure CLI gebruikt via een proxyserver, kan dit de volgende fout veroorzaken: SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",) . Als u deze fout wilt aanpakken, stelt u de omgevingsvariabele in op het pad van het bundelcertificaatbestand van de certificeringsinstantie REQUESTS_CA_BUNDLE in PEM-indeling.
| Besturingssysteem | Standaardbundel van certificeringsinstantie |
|---|---|
| Windows | C:\Program Files (x86)\Microsoft SDK's\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
| Ubuntu/Debian Linux | /opt/az/lib/python3.6/site-packages/certifi/cacert.pem |
| CentOS/RHEL/SUSE Linux | /usr/lib64/az/lib/python3.6/site-packages/certifi/cacert.pem |
Het certificaat van de proxyserver toevoegen aan dit bestand of de inhoud kopiëren naar een ander certificaatbestand en vervolgens REQUESTS_CA_BUNDLE instellen op het. Mogelijk moet u ook de HTTP_PROXY omgevingsvariabelen of HTTPS_PROXY instellen.
Voor sommige -proxies is verificatie vereist. De indeling van de HTTP_PROXY HTTPS_PROXY omgevingsvariabelen of moet de verificatie bevatten, zoals HTTPS_PROXY="https://username:password@proxy-server:port" . Zie How to configure proxies for the Azure libraries (Proxies configureren voor de Azure-bibliotheken) voor meer informatie.
Gelijktijdige builds
Als u Azure CLI op een build-machine hebt uitgevoerd waar meerdere taken parallel kunnen worden uitgevoerd, kunnen toegangstokens worden gedeeld tussen twee buildtaken die als dezelfde gebruiker van het besturingssysteem worden uitgevoerd. Om combinatie van gegevens te voorkomen, stelt AZURE_CONFIG_DIR u in op een map waarin de toegangstokens worden opgeslagen.
Algemene updateargumenten
Azure CLI-opdrachtgroepen bevatten vaak een updateopdracht. Azure Virtual Machines bijvoorbeeld de opdracht az vm update. De meeste updateopdrachten bieden de drie algemene parameters: --add --set , en --remove .
De --set --add parameters en maken een lijst met door spaties gescheiden sleutel-waardeparen: key1=value1 key2=value2 . Als u wilt zien welke eigenschappen u kunt bijwerken, gebruikt u een show-opdracht, zoals az vm show.
az vm show --resource-group VMResources --name virtual-machine-01
Overweeg een JSON-tekenreeks te gebruiken om de opdracht te vereenvoudigen. Als u bijvoorbeeld een nieuwe gegevensschijf wilt koppelen aan een virtuele machine, gebruikt u de volgende waarde:
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}"
Algemene resourceopdrachten
Een service die u wilt gebruiken, heeft mogelijk nog geen ondersteuning voor Azure CLI. U kunt de opdrachten az resource gebruiken om met deze resources te werken.
Als u alleen opdrachten voor maken of bijwerken nodig hebt, gebruikt u de opdracht az deployment group create. Zie Azure-quickstartsjablonen voor werkende voorbeelden.
REST API-opdrachten
Als algemene updateargumenten en az resource niet aan uw behoeften voldoen, kunt u de opdracht az rest gebruiken om de opdracht REST API. De opdracht wordt automatisch geverifieerd met behulp van de aangemelde referentie en stelt header Content-Type: application/json in. Zie Azure REST API naslaginformatie voor meer informatie.
Dit voorbeeld werkt met de Microsoft Graph API. Als u omleidings-URI's vooreen toepassing wilt bijwerken, roepen we de toepassing Update REST API, zoals in deze code:
# 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"]}}'
Scripts
Gebruik dit Windows batchscript om de ID's op te slaan in variabelen:
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
Gebruik dit Windows PowerShell om de ID's op te slaan in variabelen:
$vm_ids=(az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv)
az vm stop --ids $vm_ids # CLI stops all VMs in parallel
Gebruik dit Windows batchscript om door een lijst te lopen:
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
)
Gebruik dit Windows PowerShell script om een lijst te herhalen:
$vm_ids=(az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv)
foreach ($vm_id in $vm_ids) {
Write-Output "Stopping $vm_id"
az vm stop --ids $vm_id
}
Hier volgen azure CLI-omgevingsvariabelen:
| Omgevingsvariabele | Description |
|---|---|
| AZURE_CONFIG_DIR | De globale map voor configuratiebestanden, logboeken en telemetrie. Indien niet gespecificeerd, wordt deze waarde standaard ingesteld op ~/.azure. |
| AZURE_EXTENSION_DIR | De map met extensie-installaties. Indien niet gespecificeerd, wordt deze waarde standaard ingesteld op de cliextensions submap in de map voor globale configuratie. |
Foutafhandeling voor Azure CLI in PowerShell
U kunt Azure CLI-opdrachten uitvoeren in PowerShell, zoals beschreven in Het juiste Azure-opdrachtregelprogramma kiezen. Als u dit doet, moet u ervoor zorgen dat u inzicht hebt in de foutafhandeling van Azure CLI in PowerShell. Azure CLI maakt met name geen uitzonderingen die PowerShell kan ondervangen.
Een alternatief is om de automatische variabele $? te gebruiken. Deze variabele bevat de status van de meest recente opdracht. Als de vorige opdracht mislukt, $? heeft de waarde $False . Zie voor meer informatie about_Automatic_Variables.
In het volgende voorbeeld ziet u hoe deze automatische variabele kan werken voor foutafhandeling:
az group create --name MyResourceGroup
if ($? -eq $false) {
Write-Error "Error creating resource group."
}
De az opdracht mislukt omdat de vereiste parameter --location ontbreekt. De voorwaardelijke instructie vindt dat $? onwaar is en schrijft een fout.
Als u de sleutelwoorden en wilt gebruiken, kunt u gebruiken om een uitzondering te maken try voor het blok dat moet worden catch throw try afvangen:
$ErrorActionPreference = "Stop"
try {
az group create --name MyResourceGroup
if ($? -eq $false) {
throw 'Group create failed.'
}
}
catch {
Write-Error "Error creating the resource group."
}
$ErrorActionPreference = "Continue"
Standaard worden alleen beëindigingsfouten door PowerShell vangt. In dit voorbeeld wordt de $ErrorActionPreference globale variabele op zodat Stop PowerShell de fout kan afhandelen.
Met de voorwaardelijke instructie wordt $? de variabele getest om te zien of de vorige opdracht is mislukt. Als dit het is, maakt throw het trefwoord een uitzondering om te ondervangen. Het catch blok kan worden gebruikt om een foutbericht te schrijven of de fout af te handelen.
In het voorbeeld wordt de $ErrorActionPreference standaardwaarde hersteld.
Zie Alles wat u wilt weten over uitzonderingen voor meer informatie over de verwerking van PowerShell-fouten.
