Azure CLI 使用指南 #

什么是 Azure CLI? #

Azure CLI(命令行界面)是微软提供的跨平台命令行工具,用于管理 Azure 资源。

text
┌─────────────────────────────────────────────────────────────┐
│                    Azure CLI 概览                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  特点                                                        │
│  ├── 跨平台: Windows, macOS, Linux                         │
│  ├── 轻量级: 基于 Python                                    │
│  ├── 易用性: 简洁的命令语法                                 │
│  ├── 可脚本化: 支持 Bash, PowerShell                       │
│  └── 可扩展: 支持扩展插件                                   │
│                                                             │
│  与其他工具对比                                              │
│  ├── Azure Portal: 图形界面,适合初学者                     │
│  ├── Azure CLI: 命令行,适合自动化                          │
│  ├── Azure PowerShell: PowerShell 模块                      │
│  └── REST API: 编程接口                                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

安装 Azure CLI #

各平台安装方式 #

text
┌─────────────────────────────────────────────────────────────┐
│                    安装方式                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  macOS (使用 Homebrew)                                       │
│  $ brew install azure-cli                                   │
│                                                             │
│  Windows (使用 MSI)                                          │
│  下载并运行 MSI 安装包                                       │
│  https://aka.ms/installazurecliwindows                      │
│                                                             │
│  Linux (Ubuntu/Debian)                                       │
│  $ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash   │
│                                                             │
│  Linux (RHEL/CentOS)                                         │
│  $ sudo rpm --import https://packages.microsoft.com/keys... │
│  $ sudo dnf install azure-cli                               │
│                                                             │
│  Docker                                                      │
│  $ docker run -it mcr.microsoft.com/azure-cli               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

验证安装 #

bash
# 检查版本
az --version

# 输出示例
azure-cli                         2.50.0

core                              2.50.0
telemetry                          1.0.8

Dependencies:
msal                              1.20.0
azure-mgmt-resource               23.0.1

Python location '/usr/local/Cellar/azure-cli/2.50.0/libexec/bin/python'
Extensions directory '/Users/you/.azure/cliextensions'

Python (Darwin) 3.11.4

更新 Azure CLI #

bash
# macOS
brew upgrade azure-cli

# Windows
az upgrade

# Linux
sudo dnf update azure-cli
# 或
sudo apt-get update && sudo apt-get upgrade azure-cli

登录与认证 #

登录方式 #

text
┌─────────────────────────────────────────────────────────────┐
│                    登录方式                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  交互式登录(推荐)                                          │
│  $ az login                                                 │
│  └── 自动打开浏览器进行认证                                 │
│                                                             │
│  设备码登录                                                  │
│  $ az login --use-device-code                               │
│  └── 适用于无浏览器环境                                     │
│                                                             │
│  服务主体登录                                                │
│  $ az login --service-principal \                           │
│      -u <app-id> \                                          │
│      -p <password-or-cert> \                                │
│      --tenant <tenant-id>                                   │
│  └── 适用于自动化脚本                                       │
│                                                             │
│  托管身份登录                                                │
│  $ az login --identity                                      │
│  └── 适用于 Azure 资源内部                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

交互式登录 #

bash
# 登录 Azure
az login

# 输出示例
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "xxx-xxx-xxx",
    "id": "subscription-id",
    "isDefault": true,
    "name": "My Subscription",
    "state": "Enabled",
    "tenantId": "xxx-xxx-xxx"
  }
]

服务主体登录 #

bash
# 创建服务主体
az ad sp create-for-rbac --name myServicePrincipal

# 输出
{
  "appId": "xxx-xxx-xxx",
  "displayName": "myServicePrincipal",
  "password": "xxx-xxx-xxx",
  "tenant": "xxx-xxx-xxx"
}

# 使用服务主体登录
az login --service-principal \
  -u <appId> \
  -p <password> \
  --tenant <tenant-id>

订阅管理 #

查看和管理订阅 #

bash
# 列出所有订阅
az account list --output table

# 输出
Name                    CloudName    SubscriptionId    State    IsDefault
----------------------  -----------  ----------------  -------  -----------
My Subscription         AzureCloud   xxx-xxx-xxx       Enabled  True
Test Subscription       AzureCloud   yyy-yyy-yyy       Enabled  False

# 设置默认订阅
az account set --subscription "<subscription-id-or-name>"

# 查看当前订阅
az account show

# 切换订阅
az account set --subscription "Test Subscription"

常用命令 #

资源组管理 #

bash
# 创建资源组
az group create \
  --name myResourceGroup \
  --location eastus

# 列出所有资源组
az group list --output table

# 查看资源组详情
az group show --name myResourceGroup

# 删除资源组(包含所有资源)
az group delete --name myResourceGroup --yes --no-wait

虚拟机管理 #

bash
# 创建虚拟机
az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

# 列出虚拟机
az vm list --output table

# 启动虚拟机
az vm start --resource-group myResourceGroup --name myVM

# 停止虚拟机
az vm stop --resource-group myResourceGroup --name myVM

# 重启虚拟机
az vm restart --resource-group myResourceGroup --name myVM

# 删除虚拟机
az vm delete --resource-group myResourceGroup --name myVM --yes

# 获取虚拟机公网 IP
az vm show \
  --resource-group myResourceGroup \
  --name myVM \
  -d --query publicIps -o tsv

存储账户管理 #

bash
# 创建存储账户
az storage account create \
  --name mystorageaccount123 \
  --resource-group myResourceGroup \
  --location eastus \
  --sku Standard_LRS \
  --kind StorageV2

# 列出存储账户
az storage account list --output table

# 获取存储账户密钥
az storage account keys list \
  --resource-group myResourceGroup \
  --account-name mystorageaccount123

# 删除存储账户
az storage account delete \
  --name mystorageaccount123 \
  --resource-group myResourceGroup

Web 应用管理 #

bash
# 创建 App Service 计划
az appservice plan create \
  --name myAppServicePlan \
  --resource-group myResourceGroup \
  --sku F1 \
  --is-linux

# 创建 Web 应用
az webapp create \
  --name myWebApp123 \
  --resource-group myResourceGroup \
  --plan myAppServicePlan \
  --runtime "NODE|18-lts"

# 列出 Web 应用
az webapp list --output table

# 部署代码
az webapp deployment source config \
  --name myWebApp123 \
  --resource-group myResourceGroup \
  --repo-url https://github.com/Azure-Samples/nodejs-docs-hello-world \
  --branch master \
  --manual-integration

# 查看 Web 应用日志
az webapp log tail \
  --name myWebApp123 \
  --resource-group myResourceGroup

数据库管理 #

bash
# 创建 SQL Server
az sql server create \
  --name mysqlserver123 \
  --resource-group myResourceGroup \
  --location eastus \
  --admin-user sqladmin \
  --admin-password "P@ssw0rd123!"

# 创建 SQL 数据库
az sql db create \
  --name myDatabase \
  --resource-group myResourceGroup \
  --server mysqlserver123 \
  --service-objective S0

# 创建防火墙规则
az sql server firewall-rule create \
  --name AllowAllIPs \
  --resource-group myResourceGroup \
  --server mysqlserver123 \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 255.255.255.255

输出格式 #

支持的输出格式 #

text
┌─────────────────────────────────────────────────────────────┐
│                    输出格式                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  json (默认)                                                 │
│  └── 完整的 JSON 格式                                       │
│                                                             │
│  jsonc                                                       │
│  └── 带颜色高亮的 JSON                                      │
│                                                             │
│  table                                                       │
│  └── 表格格式,适合查看                                     │
│                                                             │
│  tsv                                                         │
│  └── 制表符分隔,适合脚本处理                               │
│                                                             │
│  yaml                                                        │
│  └── YAML 格式                                              │
│                                                             │
│  none                                                        │
│  └── 无输出                                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

输出示例 #

bash
# JSON 输出
az vm list --output json

# 表格输出
az vm list --output table

# TSV 输出(适合脚本)
az vm list --query "[].{Name:name, RG:resourceGroup}" --output tsv

# YAML 输出
az vm list --output yaml

查询语法 #

JMESPath 查询 #

bash
# 列出所有虚拟机名称
az vm list --query "[].name" --output tsv

# 获取特定字段
az vm list --query "[].{Name:name, RG:resourceGroup, Location:location}" --output table

# 过滤结果
az vm list --query "[?location=='eastus'].name" --output tsv

# 获取第一个结果
az vm list --query "[0].name" --output tsv

# 排序
az vm list --query "sort_by([], &name)" --output table

# 聚合
az vm list --query "length([])" --output tsv

常用查询示例 #

bash
# 获取虚拟机 IP 地址
az vm list-ip-addresses \
  --resource-group myResourceGroup \
  --query "[].virtualMachine.network.publicIpAddresses[0].ipAddress" \
  --output tsv

# 获取存储账户主密钥
az storage account keys list \
  --resource-group myResourceGroup \
  --account-name mystorageaccount \
  --query "[0].value" \
  --output tsv

# 获取订阅 ID
az account show --query "id" --output tsv

脚本编写 #

Bash 脚本示例 #

bash
#!/bin/bash

# 设置变量
RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
VM_NAME="myVM"

# 创建资源组
echo "Creating resource group..."
az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

# 创建虚拟机
echo "Creating virtual machine..."
az vm create \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys \
  --output json

# 获取虚拟机 IP
echo "Getting VM public IP..."
PUBLIC_IP=$(az vm show \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  -d --query publicIps \
  --output tsv)

echo "VM created successfully!"
echo "Public IP: $PUBLIC_IP"
echo "SSH: ssh azureuser@$PUBLIC_IP"

PowerShell 脚本示例 #

powershell
# 设置变量
$RESOURCE_GROUP = "myResourceGroup"
$LOCATION = "eastus"
$VM_NAME = "myVM"

# 创建资源组
Write-Host "Creating resource group..."
az group create `
  --name $RESOURCE_GROUP `
  --location $LOCATION

# 创建虚拟机
Write-Host "Creating virtual machine..."
az vm create `
  --resource-group $RESOURCE_GROUP `
  --name $VM_NAME `
  --image UbuntuLTS `
  --admin-username azureuser `
  --generate-ssh-keys

# 获取虚拟机 IP
$PUBLIC_IP = az vm show `
  --resource-group $RESOURCE_GROUP `
  --name $VM_NAME `
  -d --query publicIps `
  --output tsv

Write-Host "VM created successfully!"
Write-Host "Public IP: $PUBLIC_IP"

使用变量和参数 #

bash
#!/bin/bash

# 参数处理
if [ $# -eq 0 ]; then
  echo "Usage: $0 <resource-group> <vm-name>"
  exit 1
fi

RESOURCE_GROUP=$1
VM_NAME=$2
LOCATION="eastus"

# 检查资源组是否存在
if az group show --name $RESOURCE_GROUP &>/dev/null; then
  echo "Resource group exists"
else
  echo "Creating resource group..."
  az group create --name $RESOURCE_GROUP --location $LOCATION
fi

# 创建虚拟机
az vm create \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

扩展管理 #

安装和管理扩展 #

bash
# 列出已安装扩展
az extension list --output table

# 查看可用扩展
az extension list-available --output table

# 安装扩展
az extension add --name azure-devops

# 更新扩展
az extension update --name azure-devops

# 移除扩展
az extension remove --name azure-devops

常用扩展 #

扩展名 功能
azure-devops Azure DevOps 管理
aks-preview AKS 预览功能
storage-preview 存储预览功能
vm-repair 虚拟机修复工具

配置管理 #

配置文件 #

text
┌─────────────────────────────────────────────────────────────┐
│                    配置文件位置                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Linux/macOS                                                 │
│  ~/.azure/config                                             │
│                                                             │
│  Windows                                                     │
│  %USERPROFILE%\.azure\config                                 │
│                                                             │
│  配置内容示例:                                              │
│  [cloud]                                                     │
│  name = AzureCloud                                          │
│                                                             │
│  [core]                                                      │
│  output = table                                             │
│  collect_telemetry = yes                                    │
│                                                             │
│  [logging]                                                   │
│  enable_log_file = yes                                      │
│  log_dir = ~/.azure/logs                                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

配置命令 #

bash
# 查看当前配置
az configure --list-defaults

# 设置默认输出格式
az configure --defaults output=table

# 设置默认资源组
az configure --defaults group=myResourceGroup

# 设置默认位置
az configure --defaults location=eastus

# 清除默认设置
az configure --defaults group='' location=''

最佳实践 #

命令编写建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    最佳实践                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 使用变量                                                 │
│     └── 避免硬编码,便于维护                                │
│                                                             │
│  2. 添加错误处理                                             │
│     └── 检查命令执行结果                                    │
│                                                             │
│  3. 使用 --output 参数                                       │
│     └── 控制输出格式                                        │
│                                                             │
│  4. 使用 --no-wait 参数                                      │
│     └── 长时间操作异步执行                                  │
│                                                             │
│  5. 使用 --query 参数                                        │
│     └── 提取所需信息                                        │
│                                                             │
│  6. 使用服务主体                                             │
│     └── 自动化脚本避免交互登录                              │
│                                                             │
│  7. 使用 --dry-run 参数                                      │
│     └── 预览变更(部分命令支持)                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

错误处理示例 #

bash
#!/bin/bash

set -e  # 遇错即停

RESOURCE_GROUP="myResourceGroup"

# 检查命令是否成功
if az group show --name $RESOURCE_GROUP &>/dev/null; then
  echo "Resource group exists"
else
  echo "Creating resource group..."
  az group create --name $RESOURCE_GROUP --location eastus
fi

# 使用 || 处理错误
az vm create --resource-group $RESOURCE_GROUP --name myVM || {
  echo "Failed to create VM"
  exit 1
}

echo "VM created successfully"

下一步 #

现在你已经掌握了 Azure CLI 的基本使用,接下来学习 虚拟机基础 深入了解 Azure 计算服务!

最后更新:2026-03-29