练习 - 创建虚拟机

已完成

让我们从最明显的任务开始:创建 Azure 虚拟机。

登录名、订阅和资源组

你将在右侧的 Azure Cloud Shell 中工作。 激活沙盒后,你将使用 Microsoft Learn 管理的免费订阅登录 Azure。 你不必自己登录 Azure,也不必选择订阅 - 系统将为你完成此操作。 通常你还会创建一个资源组来保存新资源。 在此模块中,Azure 沙盒为你创建一个你将用于执行所有命令的资源组。

使用 Azure CLI 创建 Linux VM

Azure CLI 包含用于在 Azure 中使用虚拟机的 vm 命令。 可提供几个用于执行特定任务的子命令。 最常见的子命令包括:

子命令 说明
create 新建虚拟机
deallocate 解除分配虚拟机
delete 删除虚拟机
list 列出订阅中已创建的虚拟机
open-port 打开特定于入站流量的网络端口
restart 重启虚拟机
show 获取虚拟机详细信息
start 启动已停止的虚拟机
stop 停止正在运行的虚拟机
update 更新虚拟机属性

注意

有关命令的完整列表,可查看 Azure CLI 参考文档

我们先从第一个命令 az vm create 开始。 你可以使用此命令在资源组中创建虚拟机。 你可以传递几个参数用于配置新 VM 的所有方面。 必须提供下面四个参数:

参数 说明
--resource-group 将拥有虚拟机的资源组;请使用 [沙盒资源组]
--name 虚拟机名称;它在资源组中必须唯一。
--image 用于创建 VM 的操作系统映像。
--location 要在其中放置 VM 的区域。 通常此区域会离 VM 的使用者很近。

此外,添加 --verbose 标志有助于在创建 VM 时查看进度。

创建 Linux 虚拟机

让我们创建一个新的 Linux 虚拟机。 在 Azure Cloud Shell 中执行以下命令,以在“美国西部”位置创建一个 Ubuntu VM。

az vm create \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --location westus \
  --name SampleVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --verbose 

提示

可以使用“复制”按钮将命令复制到剪贴板。 要粘贴,请右键单击 Cloud Shell 终端中的新行,然后选择“粘贴”,或使用 Shift+Insert 键盘快捷方式(在 macOS 上为 ⌘+V)。

此命令新建一个名为 SampleVM 的 Ubuntu Linux 虚拟机。 请注意,Azure CLI 工具会在创建 VM 时等待。 你可以添加 --no-wait 选项以告知 Azure CLI 工具立即返回,并让 Azure 继续在后台创建 VM。 如果是在脚本中执行命令,这将非常有用。

我们将通过 --admin-username 标志将管理员帐户名指定为 azureuser。 如果你省略此标志,az vm create 命令会使用你的当前用户名。 由于每个操作系统的帐户名称规则不同,因此指定特定名称会更安全。

注意

大多数映像不允许使用“root”和“admin”等常用名称。

我们还会使用 generate-ssh-keys 标志。 Linux 分发版使用此参数,此参数会创建一对安全密钥,以便我们可使用 ssh 工具远程访问虚拟机。 这两个文件位于计算机和 VM 中的 .ssh 文件夹中。 如果目标文件夹中已有一个名为 id_rsa 的 SSH 密钥,则将使用该 SSH 密钥而不生成新密钥。

Azure CLI 创建完成 VM 后,将获得 JSON 响应,其中包含虚拟机的当前状态及 Azure 分配的公共和专用 IP 地址:

{
  "fqdns": "",
  "id": "/subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/Learn-2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Compute/virtualMachines/SampleVM",
  "location": "westus",
  "macAddress": "00-0D-3A-58-F8-45",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "40.83.165.85",
  "resourceGroup": "2568d0d0-efe3-4d04-a08f-df7f009f822a",
  "zones": ""
}