练习 - 创建虚拟机
让我们从最明显的任务开始:创建 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/Learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/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": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"zones": ""
}