练习 - 使用 Azure CLI 以交互方式创建 Azure 资源

已完成

在原始方案中,必须创建虚拟机 (VM) 来测试客户关系管理 (CRM) 软件。 当新版本可用时,你想要快速新建 VM,以便通过干净的映像测试完整安装体验。 测试完成后,可以删除 VM。

让我们来尝试用于创建 VM 的命令。

练习 - 使用 Azure CLI 创建 Linux VM

我们使用的是 Azure 沙盒,因此无需创建资源组。 使用现有的沙盒资源组 [沙盒资源组名称]。 请注意位置限制。

下面介绍如何使用 Azure CLI 创建新的 Azure VM:

  1. 使用 az vm create 命令创建 VM。

    • 使用 az group list 命令获取沙盒资源组的名称。

    • 根据组织的命名标准为 VM 分配名称。

    • 从可用 Azure 沙盒位置的列表中选择靠近你的位置:

      • 美国西部2
      • 美国中南部
      • 美国中部
      • 美国东部
      • 欧洲西部
      • 亚洲东南部
      • 日本东部
      • 巴西南部
      • 澳大利亚东南部
      • 印度中部
    • 使用 Linux 映像:Ubuntu2204

    • 按照组织的命名标准分配管理员用户名。

    #!/bin/bash
    
    # Get the single resource group name created by the sandbox.
    rgName=$(az group list --query "[].{Name:name}" --output tsv)
    echo $rgName
    
    # Create additional variables with values of your choice.
    vmName="msdocs-vm-01"
    vmLocation="westus"
    vmImage="Ubuntu2204"
    vmAdminUserName="myAzureUserName"
    
    # Create the VM
    az vm create \
      --resource-group $rgName \
      --name $vmName \
      --location $vmLocation \
      --image $vmImage \
      --public-ip-sku Standard \
      --admin-username $vmAdminUserName \
      --generate-ssh-keys
    

    提示

    是否刚刚使用了“复制”按钮并注意到移除了所有行延续字符? 此行为是特意这样设计的。 由于 Azure CLI 可以在具有不同行继续符的许多环境中运行,因此“复制”按钮会移除它们。 如果希望复制已设置格式的脚本,请使用鼠标选择并复制代码块的内容。

    要在 Azure Cloud Shell 中粘贴,请右键单击 Cloud Shell 终端中的新行,然后选择“粘贴”,或使用 Shift+Insert 键盘快捷方式(在 macOS 上为 ⌘+V)。

    如果脚本未正确复制并且沙盒终端正在等待添加输入,请使用 CTRL + Z 返回到提示,然后重试。

  2. 等待 Linux VM 创建:

    VM 创建过程需要几分钟才能完成。

  3. 获取有关 VM 的信息

    完成后,Azure CLI 会以 JSON 格式返回有关 VM 的信息。 使用命令 az vm listaz vm show 获取有关 VM 的特定信息。 以下是一些示例:

    其中几个脚本会使用上面的步骤中存储的变量名称和值。

    获取表格式的所有 VM 的列表。

    az vm list --output table
    

    获取 JSON 格式的单个 VM 的相关信息。

    其中一些输出将在创建新 VM 后显示。 但在确定嵌套属性名称以在脚本中引用时,返回更多信息会非常有用。 属性名称区分大小写。

    az vm show --resource-group $rgName --name $vmName
    

    获取有关 VM 属性的信息。

    # Get the time the VM was created
    az vm show --resource-group $rgName --name $vmName --query "timeCreated"
    
    # Get the OS disk storage account type
    az vm show --resource-group $rgName --name $vmName --query "storageProfile.osDisk.managedDisk.storageAccountType"
    

    将 VM 的属性存储在变量中。

    Azure CLI 具有多个可用的输出类型。 JSON 是默认类型,但在变量中存储值时,请使用 --output tsv 移除额外的格式设置。

    #!/bin/bash
    # Store the VM id
    vmID=$(az vm show --resource-group $rgName --name $vmName --query id --output tsv)
    echo $vmID
    
    # Store the public IP address
    publicIP=$(az vm list-ip-addresses \
        --resource-group $rgName \
        --name $vmName \
        --query "[].virtualMachine.network.publicIpAddresses[0].ipAddress" --output tsv)
    echo $publicIP
    
  4. 连接到 VM。**

    #!/bin/bash
    az ssh vm --private-key-file \path\to\private\key \
        --resource-group $rgName \
        --name $vmName \
        --local-user $vmAdminUserName
    

    通过键入 exit 进行注销。

了解更多 VM 选项

在命令行中使用 Azure 资源时,你使用的不是通常提供属性选项选择列表的 Azure 门户。 例如,可用位置和 VM 大小的列表。 在 Azure CLI 的许多命令组中,可以使用多个命令来提供此信息。 下面是适用于 VM 的一些示例:

提示

Azure CLI --output table 格式不会返回 100% 的可用信息,但它通常会使大型命令结果更易于阅读。 使用 --query 参数指定你最感兴趣的信息。

  1. 获取某个位置的可用 VM 大小:

    az vm list-sizes --location westus --output table
    
  2. 获取某个位置的可用 SKU:

    根据你选择的 --location,Azure CLI 可能需要一两分钟才能返回完整的 SKU 列表。

    # virtual machines
    az vm list-skus --location westus --resource-type virtualMachines --output table
    
    # disks
    az vm list-skus --location westus --resource-type disks --output table
    
  3. 获取现有 VM 的可用重设大小选项:

    az vm list-vm-resize-options --resource-group $rgName --name $vmName --output table
    
  4. 显示资源组中所有 VM 的详细信息。**

    如果选择在本地环境中工作,并在订阅中具有多台 VM,请查询满足筛选条件的 VM。

    #!/bin/bash
    # details of all VMs in a specified resource group
    az vm show --show-details --ids $(az vm list --resource-group $rgName --query "[].id" -o tsv)
    
    # list of all VMs created in the last 7 days
    createDate=$(date +%F -d "-7days")
    az vm list --resource-group $rgName \
            --query "[?timeCreated >='$createDate'].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
            --output table
    
    # list all VMs whose disks are of a certain type
    # first get a list of the disk types or organization is using
    az vm list --resource-group $rgName --query "[].{Name:name, osDiskSize:storageProfile.osDisk.diskSizeGb, managedDiskTypes:storageProfile.osDisk.managedDisk.storageAccountType}" --output table
    
    diskType="Premium_LRS"
    az vm list --resource-group $rgName \
            --query "[?storageProfile.osDisk.managedDisk.storageAccountType =='$diskType'].{Name:name, admin:osProfile.adminUsername, osDiskSize:storageProfile.osDisk.diskSizeGb, CreatedOn:timeCreated, vmID:id}" \
            --output table
    

停止或删除 VM

  1. 关闭 VM:

    可以关闭(停止)正在运行的 VM,尽管该 VM 将继续计费。

    az vm stop --resource-group $rgName --name $vmName
    

    提示是否继续时,输入“Y”,然后按 Enter

  2. 解除分配 VM:

    要避免为已停止的 VM 计费,可以解除分配该 VM。 解除分配 VM 包含不再分配的资源(不再收取费用)。 VM 的状态将从“已停止”更改为“已停止(已解除分配)”。

    az vm deallocate --resource-group $rgName --name $vmName
    
  3. 删除 VM:

    VM 停止后,请通过运行 az vm delete 命令将其删除。

    az vm delete --resource-group $rgName --name $vmName
    

    提示是否继续时,输入“Y”,然后按 Enter

虽然以交互方式执行了这些命令,但更好的方法是编写 Azure CLI 脚本。 利用脚本,你将来能够重用创建或删除 VM 的逻辑。

在下一单元中,我们将使用 Azure CLI 脚本自动执行这些任务。