| name | az |
| description | Use az CLI for Azure cloud resource management, Azure DevOps operations, VMs, storage, networking, AKS, and Key Vault with comprehensive authentication and output control. |
Azure CLI (az) Skill
You are an Azure CLI specialist. This skill provides comprehensive guidance for managing Azure resources, Azure DevOps, and cloud infrastructure using the az command-line tool.
Core Principles
Authentication
Always ensure proper authentication before running Azure commands:
- Use
az login for interactive authentication
- Use
az account show to verify current subscription
- Use
az account set to switch subscriptions
- Service principal authentication for automation
Output Formats
Azure CLI supports multiple output formats:
--output table - Human-readable table (default for many commands)
--output json - Full JSON output for scripting
--output tsv - Tab-separated values for parsing
--output yaml - YAML format
--output jsonc - Colorized JSON
-o - Short form for --output
Query and Filtering
Use JMESPath queries with --query to filter results:
az vm list --query "[?location=='eastus'].name" -o table
az resource list --query "[?type=='Microsoft.Compute/virtualMachines']"
Authentication and Account Management
Login and Authentication
az login
az login --tenant <tenant-id>
az login --service-principal -u <app-id> -p <password-or-cert> --tenant <tenant-id>
az login --identity
az account show
az account list -o table
Subscription Management
az account show
az account list -o table
az account set --subscription <subscription-id-or-name>
az account show --query "{SubscriptionName:name, SubscriptionId:id, TenantId:tenantId}"
Service Principal Management
az ad sp create-for-rbac --name <name>
az ad sp create-for-rbac --name <name> --role contributor --scopes /subscriptions/<subscription-id>
az ad sp list --display-name <name>
az ad sp delete --id <app-id>
az ad sp credential reset --id <app-id>
Resource Management
Resource Groups
az group list -o table
az group create --name <name> --location <location>
az group show --name <name>
az group delete --name <name> --yes --no-wait
az group update --name <name> --tags Environment=Dev Project=MyApp
az resource list --resource-group <name> -o table
az group export --name <name>
Generic Resource Operations
az resource list -o table
az resource list --resource-type Microsoft.Compute/virtualMachines -o table
az resource show --ids <resource-id>
az resource show --resource-group <group> --name <name> --resource-type <type>
az resource tag --tags Environment=Prod --ids <resource-id>
az resource delete --ids <resource-id>
az resource move --destination-group <dest-group> --ids <resource-id1> <resource-id2>
Locations and Providers
az account list-locations -o table
az provider list -o table
az provider show --namespace Microsoft.Compute
az provider register --namespace Microsoft.Compute
az provider show --namespace Microsoft.Compute --query "registrationState"
Azure DevOps
DevOps Configuration
az devops configure --defaults organization=https://dev.azure.com/myorg project=MyProject
az devops configure --list
az devops login --organization https://dev.azure.com/myorg
Projects
az devops project list --organization https://dev.azure.com/myorg -o table
az devops project create --name <name>
az devops project show --project <name>
az devops project delete --id <project-id> --yes
Repositories
az repos list --organization https://dev.azure.com/myorg --project <project> -o table
az repos show --repository <repo-name>
az repos create --name <name> --project <project>
az repos delete --id <repo-id> --yes
az repos import create --git-source-url <url> --repository <repo-name>
az repos ref list --repository <repo-name>
az repos pr list --repository <repo-name> -o table
Pipelines
az pipelines list --organization https://dev.azure.com/myorg --project <project> -o table
az pipelines show --name <pipeline-name>
az pipelines run --name <pipeline-name>
az pipelines runs list -o table
az pipelines runs show --id <run-id>
az pipelines build list -o table
az pipelines build queue --definition-name <name>
Virtual Machines
VM Management
az vm list -o table
az vm list --resource-group <group> -o table
az vm show --resource-group <group> --name <vm-name>
az vm create \
--resource-group <group> \
--name <vm-name> \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
az vm create \
--resource-group <group> \
--name <vm-name> \
--image Ubuntu2204 \
--size Standard_DS2_v2 \
--admin-username azureuser \
--ssh-key-values @~/.ssh/id_rsa.pub \
--vnet-name myVnet \
--subnet mySubnet \
--public-ip-address myPublicIP \
--nsg myNSG
az vm start --resource-group <group> --name <vm-name>
az vm deallocate --resource-group <group> --name <vm-name>
az vm stop --resource-group <group> --name <vm-name>
az vm restart --resource-group <group> --name <vm-name>
az vm delete --resource-group <group> --name <vm-name> --yes
az vm resize --resource-group <group> --name <vm-name> --size Standard_DS3_v2
az vm list-sizes --location eastus -o table
VM Images
az vm image list -o table
az vm image list --publisher Canonical --all -o table
az vm image show --urn Canonical:Ubuntu2204:latest
az vm list-skus --location eastus --size Standard_D -o table
VM Extensions
az vm extension list --resource-group <group> --vm-name <vm-name>
az vm extension set \
--resource-group <group> \
--vm-name <vm-name> \
--name customScript \
--publisher Microsoft.Azure.Extensions
az vm extension delete --resource-group <group> --vm-name <vm-name> --name <extension-name>
Storage
Storage Accounts
az storage account list -o table
az storage account create \
--name <account-name> \
--resource-group <group> \
--location eastus \
--sku Standard_LRS
az storage account show --name <account-name>
az storage account show-connection-string --name <account-name>
az storage account keys list --account-name <account-name>
az storage account delete --name <account-name> --yes
Blob Storage
az storage container list --account-name <account-name> -o table
az storage container create --name <container-name> --account-name <account-name>
az storage blob upload \
--account-name <account-name> \
--container-name <container-name> \
--name <blob-name> \
--file <local-file-path>
az storage blob download \
--account-name <account-name> \
--container-name <container-name> \
--name <blob-name> \
--file <local-file-path>
az storage blob list --account-name <account-name> --container-name <container-name> -o table
az storage blob delete --account-name <account-name> --container-name <container-name> --name <blob-name>
az storage blob copy start \
--account-name <dest-account> \
--destination-container <dest-container> \
--destination-blob <dest-blob> \
--source-uri <source-blob-url>
Networking
Virtual Networks
az network vnet list -o table
az network vnet create \
--resource-group <group> \
--name <vnet-name> \
--address-prefix 10.0.0.0/16 \
--subnet-name <subnet-name> \
--subnet-prefix 10.0.1.0/24
az network vnet show --resource-group <group> --name <vnet-name>
az network vnet delete --resource-group <group> --name <vnet-name>
az network vnet subnet list --resource-group <group> --vnet-name <vnet-name> -o table
az network vnet subnet create \
--resource-group <group> \
--vnet-name <vnet-name> \
--name <subnet-name> \
--address-prefix 10.0.2.0/24
Network Security Groups (NSGs)
az network nsg list -o table
az network nsg create --resource-group <group> --name <nsg-name>
az network nsg rule list --resource-group <group> --nsg-name <nsg-name> -o table
az network nsg rule create \
--resource-group <group> \
--nsg-name <nsg-name> \
--name <rule-name> \
--priority 100 \
--source-address-prefixes '*' \
--source-port-ranges '*' \
--destination-address-prefixes '*' \
--destination-port-ranges 80 \
--access Allow \
--protocol Tcp \
--description "Allow HTTP"
az network nsg rule delete --resource-group <group> --nsg-name <nsg-name> --name <rule-name>
Public IPs and Load Balancers
az network public-ip list -o table
az network public-ip create --resource-group <group> --name <ip-name>
az network public-ip show --resource-group <group> --name <ip-name> --query "ipAddress"
az network lb list -o table
az network lb create \
--resource-group <group> \
--name <lb-name> \
--sku Standard \
--public-ip-address <ip-name>
App Services
Web Apps
az appservice plan list -o table
az appservice plan create \
--name <plan-name> \
--resource-group <group> \
--sku B1 \
--is-linux
az webapp list -o table
az webapp create \
--resource-group <group> \
--plan <plan-name> \
--name <app-name> \
--runtime "NODE:18-lts"
az webapp show --resource-group <group> --name <app-name>
az webapp deployment source config \
--name <app-name> \
--resource-group <group> \
--repo-url <git-url> \
--branch main \
--manual-integration
az webapp deployment source config-zip \
--resource-group <group> \
--name <app-name> \
--src <zip-file-path>
az webapp start --resource-group <group> --name <app-name>
az webapp stop --resource-group <group> --name <app-name>
az webapp restart --resource-group <group> --name <app-name>
az webapp log tail --resource-group <group> --name <app-name>
az webapp delete --resource-group <group> --name <app-name>
App Settings and Configuration
az webapp config appsettings list --name <app-name> --resource-group <group>
az webapp config appsettings set \
--name <app-name> \
--resource-group <group> \
--settings KEY1=value1 KEY2=value2
az webapp config appsettings delete \
--name <app-name> \
--resource-group <group> \
--setting-names KEY1
az webapp config connection-string set \
--name <app-name> \
--resource-group <group> \
--connection-string-type SQLAzure \
--settings DefaultConnection="connection-string-value"
Container Services (AKS)
AKS Cluster Management
az aks list -o table
az aks create \
--resource-group <group> \
--name <cluster-name> \
--node-count 3 \
--enable-addons monitoring \
--generate-ssh-keys
az aks get-credentials --resource-group <group> --name <cluster-name>
az aks show --resource-group <group> --name <cluster-name>
az aks scale --resource-group <group> --name <cluster-name> --node-count 5
az aks upgrade --resource-group <group> --name <cluster-name> --kubernetes-version 1.28.0
az aks stop --resource-group <group> --name <cluster-name>
az aks start --resource-group <group> --name <cluster-name>
az aks delete --resource-group <group> --name <cluster-name> --yes
Container Registry (ACR)
az acr list -o table
az acr create --resource-group <group> --name <registry-name> --sku Basic
az acr login --name <registry-name>
az acr repository list --name <registry-name> -o table
az acr repository show-tags --name <registry-name> --repository <repo-name>
az acr repository delete --name <registry-name> --image <repo-name>:<tag> --yes
az acr import \
--name <registry-name> \
--source docker.io/library/nginx:latest \
--image nginx:latest
Databases
SQL Databases
az sql server list -o table
az sql server create \
--name <server-name> \
--resource-group <group> \
--location eastus \
--admin-user <admin-user> \
--admin-password <admin-password>
az sql db list --resource-group <group> --server <server-name> -o table
az sql db create \
--resource-group <group> \
--server <server-name> \
--name <db-name> \
--service-objective S0
az sql db show-connection-string \
--client ado.net \
--name <db-name> \
--server <server-name>
az sql server firewall-rule create \
--resource-group <group> \
--server <server-name> \
--name AllowMyIP \
--start-ip-address <ip> \
--end-ip-address <ip>
Cosmos DB
az cosmosdb list -o table
az cosmosdb create \
--name <account-name> \
--resource-group <group> \
--kind GlobalDocumentDB
az cosmosdb sql database list \
--account-name <account-name> \
--resource-group <group>
az cosmosdb sql database create \
--account-name <account-name> \
--resource-group <group> \
--name <db-name>
az cosmosdb keys list \
--name <account-name> \
--resource-group <group> \
--type connection-strings
Monitoring and Logs
Activity Logs
az monitor activity-log list -o table
az monitor activity-log list --resource-group <group> -o table
az monitor activity-log list --start-time 2024-01-01T00:00:00Z -o table
az monitor activity-log list --filters "eventName eq 'Create or Update Virtual Machine'"
Metrics
az monitor metrics list-definitions --resource <resource-id>
az monitor metrics list \
--resource <resource-id> \
--metric "Percentage CPU" \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-02T00:00:00Z
az monitor metrics alert list -o table
az monitor metrics alert create \
--name <alert-name> \
--resource-group <group> \
--scopes <resource-id> \
--condition "avg Percentage CPU > 80" \
--description "Alert when CPU exceeds 80%"
Log Analytics
az monitor log-analytics workspace list -o table
az monitor log-analytics workspace create \
--resource-group <group> \
--workspace-name <workspace-name>
az monitor log-analytics query \
--workspace <workspace-id> \
--analytics-query "AzureActivity | limit 10"
az monitor log-analytics workspace table list \
--resource-group <group> \
--workspace-name <workspace-name>
Azure Functions
Function Apps
az functionapp list -o table
az functionapp create \
--resource-group <group> \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 18 \
--functions-version 4 \
--name <function-app-name> \
--storage-account <storage-account-name>
az functionapp deployment source config-zip \
--resource-group <group> \
--name <function-app-name> \
--src <zip-file-path>
az functionapp function list --resource-group <group> --name <function-app-name>
az functionapp function show \
--resource-group <group> \
--name <function-app-name> \
--function-name <function-name>
az functionapp start --resource-group <group> --name <function-app-name>
az functionapp stop --resource-group <group> --name <function-app-name>
az functionapp log tail --resource-group <group> --name <function-app-name>
Key Vault
Key Vault Management
az keyvault list -o table
az keyvault create \
--name <vault-name> \
--resource-group <group> \
--location eastus
az keyvault show --name <vault-name>
az keyvault delete --name <vault-name>
az keyvault purge --name <vault-name>
Secrets Management
az keyvault secret list --vault-name <vault-name> -o table
az keyvault secret set --vault-name <vault-name> --name <secret-name> --value <secret-value>
az keyvault secret show --vault-name <vault-name> --name <secret-name>
az keyvault secret show --vault-name <vault-name> --name <secret-name> --query "value" -o tsv
az keyvault secret delete --vault-name <vault-name> --name <secret-name>
az keyvault secret list-versions --vault-name <vault-name> --name <secret-name>
Keys and Certificates
az keyvault key list --vault-name <vault-name> -o table
az keyvault key create --vault-name <vault-name> --name <key-name> --protection software
az keyvault certificate list --vault-name <vault-name> -o table
az keyvault certificate import \
--vault-name <vault-name> \
--name <cert-name> \
--file <cert-file-path>
Role-Based Access Control (RBAC)
Role Assignments
az role assignment list -o table
az role assignment list --resource-group <group> -o table
az role assignment create \
--assignee <user-email-or-sp-id> \
--role "Contributor" \
--scope /subscriptions/<subscription-id>/resourceGroups/<group>
az role assignment create \
--assignee <user-email-or-sp-id> \
--role "Reader" \
--subscription <subscription-id>
az role assignment delete \
--assignee <user-email-or-sp-id> \
--role "Contributor" \
--resource-group <group>
Role Definitions
az role definition list -o table
az role definition list --query "[?type=='BuiltInRole'].{Name:roleName}" -o table
az role definition list --name "Contributor"
az role definition create --role-definition <json-file-path>
az role definition update --role-definition <json-file-path>
az role definition delete --name <role-name>
Complete Workflows
Workflow 1: Deploy Web Application
az group create --name myapp-rg --location eastus
az appservice plan create --name myapp-plan --resource-group myapp-rg --sku B1 --is-linux
az webapp create --resource-group myapp-rg --plan myapp-plan --name myapp-webapp --runtime "NODE:18-lts"
az webapp config appsettings set --name myapp-webapp --resource-group myapp-rg --settings NODE_ENV=production
az webapp deployment source config-zip --resource-group myapp-rg --name myapp-webapp --src app.zip
az webapp show --resource-group myapp-rg --name myapp-webapp --query "defaultHostName" -o tsv
Workflow 2: Create AKS Cluster with ACR
az group create --name k8s-rg --location eastus
az acr create --resource-group k8s-rg --name myacr --sku Basic
az aks create --resource-group k8s-rg --name myk8s --node-count 2 --generate-ssh-keys --attach-acr myacr
az aks get-credentials --resource-group k8s-rg --name myk8s
kubectl get nodes
Workflow 3: Mirror Azure DevOps Repository to GitHub
az devops configure --defaults organization=https://dev.azure.com/myorg project=MyProject
az repos list -o table
REPO_URL=$(az repos show --repository MyRepo --query "remoteUrl" -o tsv)
git clone --mirror "$REPO_URL"
cd MyRepo.git
git remote add github git@github.com:myuser/myrepo.git
git push --mirror github
Workflow 4: Setup Virtual Machine with Storage
az group create --name vm-rg --location eastus
az storage account create --name vmstorage --resource-group vm-rg --sku Standard_LRS
az network vnet create --resource-group vm-rg --name myVnet --subnet-name mySubnet
az network public-ip create --resource-group vm-rg --name myPublicIP
az network nsg create --resource-group vm-rg --name myNSG
az network nsg rule create --resource-group vm-rg --nsg-name myNSG --name AllowSSH --priority 1000 --destination-port-ranges 22 --protocol Tcp --access Allow
az vm create \
--resource-group vm-rg \
--name myVM \
--image Ubuntu2204 \
--vnet-name myVnet \
--subnet mySubnet \
--public-ip-address myPublicIP \
--nsg myNSG \
--admin-username azureuser \
--generate-ssh-keys
az vm show --resource-group vm-rg --name myVM --show-details --query "publicIps" -o tsv
Workflow 5: Deploy Function App with Key Vault Integration
az group create --name func-rg --location eastus
az storage account create --name funcstorage --resource-group func-rg --sku Standard_LRS
az keyvault create --name myfuncvault --resource-group func-rg --location eastus
az keyvault secret set --vault-name myfuncvault --name DatabasePassword --value "SuperSecret123!"
az functionapp create \
--resource-group func-rg \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 18 \
--functions-version 4 \
--name myfuncapp \
--storage-account funcstorage
az functionapp identity assign --name myfuncapp --resource-group func-rg
FUNC_IDENTITY=$(az functionapp identity show --name myfuncapp --resource-group func-rg --query "principalId" -o tsv)
az keyvault set-policy --name myfuncvault --object-id $FUNC_IDENTITY --secret-permissions get list
az functionapp config appsettings set \
--name myfuncapp \
--resource-group func-rg \
--settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://myfuncvault.vault.azure.net/secrets/DatabasePassword/)"
Best Practices
Output and Querying
-
Use appropriate output format for context:
--output table for human review
--output json for scripting and automation
--output tsv for simple parsing
-
Master JMESPath queries:
- Filter results:
--query "[?location=='eastus']"
- Select fields:
--query "[].{Name:name, Location:location}"
- First element:
--query "[0]"
-
Use --query with -o tsv for clean scripting:
RESOURCE_ID=$(az resource show --name myapp --resource-group myrg --query "id" -o tsv)
Resource Management
-
Tag resources consistently:
az group create --name myrg --location eastus --tags Environment=Production Owner=TeamA CostCenter=12345
-
Use resource groups for lifecycle management:
- Group related resources together
- Delete entire environments by deleting resource group
-
Check resource limits and quotas:
az vm list-usage --location eastus -o table
Security
- Use managed identities when possible instead of service principals
- Store secrets in Key Vault instead of app settings
- Enable soft delete on Key Vaults for production
- Use Azure RBAC for fine-grained access control
- Regularly rotate credentials for service principals
Performance
-
Use --no-wait for long-running operations:
az vm create --resource-group myrg --name myvm --image Ubuntu2204 --no-wait
-
Batch operations when possible:
az vm start --ids $(az vm list -g myrg --query "[].id" -o tsv)
-
Use parallel execution for multiple operations:
az vm list --query "[].name" -o tsv | xargs -P 5 -I {} az vm start --name {} --resource-group myrg
Cost Management
-
Stop/deallocate VMs when not in use:
az vm deallocate --resource-group myrg --name myvm
-
Use appropriate SKUs - don't over-provision
-
Clean up unused resources regularly
-
Set up budgets and alerts:
az consumption budget list
Common Patterns
Pattern 1: List Resources with Custom Output
az vm list --query "[].{Name:name, ResourceGroup:resourceGroup, Location:location, PowerState:powerState}" -o table
az webapp list --query "[].{Name:name, URL:defaultHostName, State:state}" -o table
Pattern 2: Bulk Operations
az vm start --ids $(az vm list -g myrg --query "[].id" -o tsv)
az vm deallocate --ids $(az vm list --query "[].id" -o tsv)
az group list --tag Environment=Dev --query "[].name" -o tsv | xargs -I {} az group delete --name {} --yes --no-wait
Pattern 3: Resource Creation with Dependencies
VNET_ID=$(az network vnet create --name myVnet --resource-group myrg --query "newVNet.id" -o tsv)
SUBNET_ID=$(az network vnet subnet create --name mySubnet --vnet-name myVnet --resource-group myrg --query "id" -o tsv)
VM_ID=$(az vm create --name myVM --resource-group myrg --image Ubuntu2204 --subnet $SUBNET_ID --query "id" -o tsv)
Pattern 4: Configuration Backup
az group export --name myrg > myrg-template.json
az resource show --ids <resource-id> > resource-config.json
az group list --query "[].name" -o tsv | while read rg; do
az group export --name "$rg" > "${rg}-template.json"
done
Pattern 5: Health Checks and Monitoring
az vm get-instance-view --resource-group myrg --name myvm --query "instanceView.statuses[?starts_with(code, 'PowerState/')].displayStatus" -o tsv
az webapp show --resource-group myrg --name myapp --query "state" -o tsv
az monitor activity-log list --start-time $(date -u -d '1 hour ago' '+%Y-%m-%dT%H:%M:%SZ') --query "[?level=='Error']" -o table
Troubleshooting
Issue: Authentication Failures
az logout
az login
rm -rf ~/.azure
az login --tenant <tenant-id>
az account show
Issue: Subscription Not Found
az account list -o table
az account set --subscription <subscription-id>
az account show --query "{Name:name, ID:id}" -o table
Issue: Resource Already Exists
az resource show --name <resource-name> --resource-group <group> --resource-type <type>
az resource list --name <resource-name> -o table
az resource delete --ids <resource-id>
Issue: Insufficient Permissions
az role assignment list --assignee $(az account show --query "user.name" -o tsv) -o table
Issue: Quota or Limit Exceeded
az vm list-usage --location eastus -o table
az account list-locations -o table
Issue: Long-Running Operation Timeout
az vm create --resource-group myrg --name myvm --image Ubuntu2204 --no-wait
az vm show --resource-group myrg --name myvm --query "provisioningState"
while true; do
STATE=$(az vm show --resource-group myrg --name myvm --query "provisioningState" -o tsv 2>/dev/null)
echo "Current state: $STATE"
[[ "$STATE" == "Succeeded" ]] && break
sleep 10
done
Quick Reference
az login
az account show
az account set --subscription <id>
az group create --name <name> --location <location>
az group list -o table
az group delete --name <name> --yes
az vm list -o table
az vm create --resource-group <rg> --name <name> --image Ubuntu2204
az vm start/stop/restart --resource-group <rg> --name <name>
az storage account create --name <name> --resource-group <rg>
az storage blob upload --account-name <account> --container <container> --name <blob> --file <file>
az webapp create --resource-group <rg> --plan <plan> --name <name> --runtime "NODE:18-lts"
az webapp deployment source config-zip --resource-group <rg> --name <name> --src <zip>
az repos list -o table
az pipelines list -o table
az pipelines run --name <pipeline>
az network vnet create --resource-group <rg> --name <vnet>
az network nsg create --resource-group <rg> --name <nsg>
az aks create --resource-group <rg> --name <cluster>
az aks get-credentials --resource-group <rg> --name <cluster>
az acr create --resource-group <rg> --name <registry>
az keyvault create --name <vault> --resource-group <rg>
az keyvault secret set --vault-name <vault> --name <secret> --value <value>
az keyvault secret show --vault-name <vault> --name <secret> --query "value" -o tsv
az monitor activity-log list -o table
az monitor metrics list --resource <id> --metric <metric>
--query "[].{Name:name, Location:location}" -o table
--query "[?location=='eastus'].name" -o tsv
--query "[0].id" -o tsv
Integration with Other Tools
Working with Git
After Azure DevOps repository operations, integrate with git workflow:
REPO_URL=$(az repos show --repository MyRepo --query "remoteUrl" -o tsv)
git clone "$REPO_URL"
Working with Kubernetes
After AKS operations, use kubectl:
az aks get-credentials --resource-group myrg --name myk8s
kubectl get nodes
kubectl apply -f deployment.yaml
Working with Docker
After ACR operations, use docker:
az acr login --name myacr
docker build -t myacr.azurecr.io/myapp:v1 .
docker push myacr.azurecr.io/myapp:v1
Summary
Primary directives:
- Always authenticate before running commands
- Use appropriate output formats for context (table for humans, json/tsv for scripts)
- Master --query for filtering results
- Tag resources consistently for organization
- Use --no-wait for long operations to avoid timeouts
- Store secrets in Key Vault, not in app settings
- Use managed identities when possible
- Clean up resources to avoid unnecessary costs
Most common commands:
az login - Authenticate
az account set --subscription <id> - Set subscription
az group create/delete - Manage resource groups
az <service> list -o table - List resources
az <service> show --query "<path>" -o tsv - Get specific values
az devops configure --defaults - Set DevOps defaults
az repos list - List repositories
az pipelines run - Run pipelines