前置知识: 运维与中间件

Azure 资源组与 VM

2 min入门

Azure CLI 实战:资源组与虚拟机的创建、生命周期、磁盘/镜像与连接管理。

资源组管理

基本写法:创建资源组 az group create --name <资源组名> --location <区域>

# 在 eastus 区域创建资源组
az group create --name MyResourceGroup --location eastus

基本写法:列出所有资源组 az group list [--output table]

# 以表格形式列出资源组
az group list --output table

基本写法:查看资源组详情 az group show --name <资源组名>

# 查看指定资源组信息
az group show --name MyResourceGroup

基本写法:删除资源组 az group delete --name <资源组名> [--yes] [--no-wait]

# 删除资源组及所有资源不等待
az group delete --name MyResourceGroup --yes --no-wait

基本写法:按名称过滤资源组 az group list --query "[?starts_with(name, 'msdocs') == \true`].name” -o table`

# 列出以 msdocs 开头的资源组
az group list --query "[?starts_with(name, 'msdocs') == \`true\`].name" -o table

虚拟机创建

基本写法:创建 Ubuntu VM az vm create --resource-group <资源组名> --name <VM名> --image Ubuntu2204 [--admin-username <用户名>] [--generate-ssh-keys]

# 创建 Ubuntu 22.04 VM 并自动生成 SSH 密钥
az vm create --resource-group MyResourceGroup --name my-vm --image Ubuntu2204 --admin-username azureuser --generate-ssh-keys

基本写法:指定镜像与大小创建 az vm create --resource-group <资源组名> --name <VM名> --image <镜像> --size <VM大小>

# 创建 Standard_B2s 大小的 VM
az vm create --resource-group MyResourceGroup --name my-vm --image Ubuntu2204 --size Standard_B2s

基本写法:在 VNet 子网中创建 az vm create --resource-group <资源组名> --name <VM名> --image <镜像> --vnet-name <VNet名> --subnet <子网名>

# 指定虚拟网络与子网创建 VM
az vm create --resource-group test-rg --name vm-public --image Ubuntu2204 --vnet-name vnet-1 --subnet subnet-public

基本写法:使用已有 SSH 公钥 az vm create --resource-group <资源组名> --name <VM名> --image <镜像> --ssh-key-values <公钥路径>

# 使用本地公钥创建 VM
az vm create --resource-group MyResourceGroup --name my-vm --image Ubuntu2204 --ssh-key-values ~/.ssh/id_rsa.pub

VM 查询

基本写法:列出所有 VM az vm list [--resource-group <资源组名>] [-d]

# 列出所有 VM 并显示电源状态
az vm list -d

基本写法:查看 VM 详情 az vm show --resource-group <资源组名> --name <VM名>

# 查看 VM 完整配置
az vm show --resource-group MyResourceGroup --name my-vm

基本写法:按创建时间过滤 VM az vm list -d --query "[?timeCreated >= '2024-01-01'].[name, powerState]"

# 查询 2024 年后创建的 VM
az vm list -d --query "[?timeCreated >= '2024-01-01'].[name, powerState]"

VM 生命周期

基本写法:启动 VM az vm start --resource-group <资源组名> --name <VM名>

# 启动已停止的 VM
az vm start --resource-group MyResourceGroup --name my-vm

基本写法:停止 VM az vm stop --resource-group <资源组名> --name <VM名>

# 停止运行中的 VM
az vm stop --resource-group MyResourceGroup --name my-vm

基本写法:分配(释放计算资源) az vm deallocate --resource-group <资源组名> --name <VM名>

# 释放 VM 不再产生计算费用
az vm deallocate --resource-group MyResourceGroup --name my-vm

基本写法:重启 VM az vm restart --resource-group <资源组名> --name <VM名>

# 重启指定 VM
az vm restart --resource-group MyResourceGroup --name my-vm

基本写法:删除 VM az vm delete --resource-group <资源组名> --name <VM名> [--yes]

# 删除 VM 不询问确认
az vm delete --resource-group MyResourceGroup --name my-vm --yes

VM 连接

基本写法:获取 SSH 连接信息 az vm show --resource-group <资源组名> --name <VM名> -d --query publicIps -o tsv

# 获取 VM 公网 IP 用于 SSH 连接
az vm show --resource-group MyResourceGroup --name my-vm -d --query publicIps -o tsv

基本写法:打开端口 az vm open-port --resource-group <资源组名> --name <VM名> --port <端口>

# 打开 80 端口入站
az vm open-port --resource-group MyResourceGroup --name my-vm --port 80

基本写法:执行远程命令 az vm run-command invoke --resource-group <资源组名> --name <VM名> --command-id RunShellScript --scripts "<命令>"

# 远程执行 shell 命令
az vm run-command invoke --resource-group MyResourceGroup --name my-vm --command-id RunShellScript --scripts "uptime"

磁盘管理

基本写法:列出磁盘 az disk list --resource-group <资源组名>

# 列出资源组下所有托管磁盘
az disk list --resource-group MyResourceGroup

基本写法:创建磁盘 az disk create --resource-group <资源组名> --name <磁盘名> --size-gb <GB>

# 创建 20GB 数据磁盘
az disk create --resource-group MyResourceGroup --name my-disk --size-gb 20

基本写法:附加磁盘到 VM az vm disk attach --resource-group <资源组名> --vm-name <VM名> --name <磁盘名>

# 将现有磁盘附加到 VM
az vm disk attach --resource-group MyResourceGroup --vm-name my-vm --name my-disk

小结

  • 初学者要点:一切资源属于资源组,删除组等于删全部资源(清理利器, 也是最大风险);az vm create 一条命令连带创建 NIC/公网 IP/NSG; 停机省计算费必须用 deallocate,仅 stop 仍计费;SSH 公网 IP 用 az vm show -d --query publicIps -o tsv 取。
  • 进阶注意:run-command invoke 免 SSH 远程执行命令,适合批量运维与 排障;磁盘(Managed Disk)独立于 VM 生命周期,删除 VM 后按需清理, 否则持续计费;生产 VM 建议配置自动关闭(DevTest 计划或 Azure Automation)防止开发机整夜空转。