练习 - 控制资源的部署顺序

已完成

在本部分中,首先执行一些基本设置任务。 在 Visual Studio Code 中,将终端会话连接到由免费的 Azure 沙箱环境提供的 Azure 订阅。 这样做可以对 Azure 的命令进行身份验证。

然后,运行用于预配 Linux 虚拟机 (VM) 的基本 ARM 模板。 部署完成后,验证 VM 是否正在运行并可连接。

尽管使用 VM 是一项常见的任务,但你发现 VM 资源需要必须存在才能创建 VM 的网络和存储组件。 你将了解 dependsOn 构造如何使你能够设置资源的预配顺序。

设置

在这里,你将打开 Visual Studio Code,创建 PowerShell 会话,并连接到由免费的 Azure 沙箱环境提供的 Azure 订阅。

你需要在此模块中执行一次这些设置任务。 如果在后续练习中注销或断开连接,则可以参考这些步骤。

在 Visual Studio Code 中打开 PowerShell

  1. 打开 Visual Studio Code。

  2. 使用“终端”菜单打开终端窗口。

  3. 如果终端窗口右侧的下拉菜单显示“pwsh”,即表示你有了要使用的正确 shell,可以跳到下一部分继续进行操作。

    Screenshot of Terminal window, terminal type.

  4. 如果没有,请选择下拉列表,然后选择“选择默认 Shell”。

  5. 选择“pwsh”。

    Screenshot that shows selecting a shell from the drop-down menu.

  6. 选择终端中的 +,以 pwsh 作为 shell 创建一个新的终端。

登录 Azure

  1. 运行 Connect-AzAccount 以登录到你的帐户。

    Connect-AzAccount
    

    将会出现一个浏览器窗口。

  2. 选择用于激活沙盒的帐户,并在出现提示时关闭浏览器窗口。

设置活动订阅

  1. 运行 Get-AzSubscription 以获取沙盒环境的订阅 ID。

    Get-AzSubscription
    

    找到 Concierge Subscription 并复制第二列。 它的格式类似于 cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0。

  2. 运行 Set-AzContext,将活动订阅更改为 Concierge 订阅。

    注意

    确保将 {你的订阅 ID} 替换为在上一个命令中获得的 Concierge 订阅的 ID。

    $subscription = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $subscription
    

设置默认资源组

通常,当你运行 Azure CLI 命令时,需要指定一个资源组。

沙盒为你提供默认资源组。 若要使以下 Azure CLI 命令更易于运行,请在此处设置默认资源组。

运行 Set-AzDefault cmdlet 以设置默认资源组。

Set-AzDefault -ResourceGroupName <rgn>resource group name</rgn>

注意

通常,当你使用 PowerShell 在 Azure 上部署资源时,需要指定一个资源组。 通过使用 Set-AzDefault 设置部署的上下文来绕过这一要求。

典型 VM 部署中的内容

部署 VM 时,请记住需要与 VM 一起部署多个资源,才能使 VM 正常工作。

下面简要概述了通常需要与 VM 一起部署的资源类型:

  • Microsoft.Storage/storageAccounts。 存储帐户为操作系统和文件提供磁盘空间。
  • Microsoft.Network/publicIPAddresses。 通过公共 IP 地址可以从 Internet 连接到 VM。
  • Microsoft.Network/networkSecurityGroups。 网络安全组包含用于处理到虚拟网络的入站和出站流量的规则。
  • Microsoft.Network/virtualNetworks。 需要将 VM 放在虚拟网络中。 此资源需要先部署网络安全组。
  • Microsoft.Network/networkInterfaces。 此资源依赖于另外两个资源:公共 IP 地址和虚拟网络。
  • Microsoft.Compute/virtualMachines。 虚拟机是要部署的主要资源。 它依赖于两个不同的资源:存储帐户和网络接口。

部署 Linux VM

在这里,你将从我们为你提供的 GitHub 存储库下载 ARM 模板。 该模板将预配 Linux VM 以及运行它所需的所有资源。

  1. 运行以下 curl 命令以下载 ARM 模板:

    curl -O 'https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json'
    
  2. 运行 ConvertTo-SecureString cmdlet,并将结果分配给名为 $secure 的 PowerShell 变量:

    $secure = "insecurepassword123!" | ConvertTo-SecureString -AsPlainText -Force
    

    现在,你拥有了密码的加密版本,接下来可以传递部署脚本。

  3. 运行 New-AzResourceGroupDeployment 命令以部署模板:

    New-AzResourceGroupDeployment `
      -TemplateFile "./azuredeploy.json" `
      -adminUsername "azureuser" `
      -vmName "vm1" `
      -adminPasswordOrKey $secure
    

    该命令可能需要几分钟才能完成运行。 当命令运行时,如果愿意,可在单独的浏览器选项卡中检查 ARM 模板

    通过搜索 dependsOn 密钥来记录资源依赖关系。 例如,虚拟机资源依赖于网络接口:

    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-06-01",
    "name": "[parameters('vmName')]",
    "location": "[parameters('location')]",
    "dependsOn": [
      "[resourceId('Microsoft.Network/networkInterfaces/', variables('networkInterfaceName'))]"
    ],
    

验证部署

验证 VM 是否已预配以及是否可通过 SSH 进行连接。 为此,请执行以下操作:

  1. 运行 Invoke-Expression 命令以通过 SSH 连接到 VM:

    Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
    

    出现提示时,输入 yes 继续连接。 然后输入管理员密码 insecurepassword123!

    重要

    在实践中,请确保密码安全。 也可以使用公钥身份验证,这通常比使用密码更安全。

  2. 从 SSH 与 VM 的连接中,运行 hostname 以打印 VM 的主机名:

    hostname
    

    你会看到 VM 的内部主机名 vm1

    vm1
    
  3. 运行 exit 以离开 SSH 会话。

    exit
    

恭喜!你已使用 ARM 模板成功部署了 Linux VM。 VM 是包含从属资源的常见资源类型。

设置

在这里,你将打开 Visual Studio Code,创建终端会话,并连接到由免费的 Azure 沙箱环境提供的 Azure 订阅。

你需要在此模块中执行一次这些设置任务。 如果在后续练习中注销或断开连接,则可以参考这些步骤。

在 Visual Studio Code 中打开 shell

  1. 打开 Visual Studio Code。

  2. 使用“终端”菜单打开终端窗口。

  3. 如果下拉菜单显示首选 shell(例如 bash 或 zsh),则可以跳到下一部分。

  4. 如果没有,请选择下拉列表,然后选择“选择默认 Shell”。

  5. 选择所需的 shell 类型。

    Screenshot that shows selecting a shell from the drop-down menu.

  6. 选择终端中的 +,以通过选定的 shell 类型创建一个新的终端。

登录 Azure

  1. 从终端运行 az login

    az login
    

    将会出现一个浏览器窗口。

  2. 选择用于激活沙盒的帐户,并在出现提示时关闭浏览器窗口。

设置活动订阅

运行以下 az account set 命令以将 Azure 沙箱环境设置为活动订阅:

az account set -s "Concierge Subscription"

注意

如果命令失败,请运行 az account list --refresh --all,然后重新运行 az account set 命令。

设置默认资源组

通常,当你运行 Azure CLI 命令时,需要指定一个资源组。

沙盒为你提供默认资源组。 若要使以下 Azure CLI 命令更易于运行,请在此处设置默认资源组。

运行以下 az configure 命令以设置默认资源组:

az configure --defaults group=<rgn>resource group name</rgn>

典型 VM 部署中的内容

部署 VM 时,请记住需要与 VM 一起部署多个资源,才能使 VM 正常工作。

下面简要概述了通常需要与 VM 一起部署的资源类型:

  • Microsoft.Storage/storageAccounts。 存储帐户为操作系统和文件提供磁盘空间。
  • Microsoft.Network/publicIPAddresses。 通过公共 IP 地址可以从 Internet 连接到 VM。
  • Microsoft.Network/networkSecurityGroups。 网络安全组包含用于处理到虚拟网络的入站和出站流量的规则。
  • Microsoft.Network/virtualNetworks。 需要将 VM 放在虚拟网络中。 此资源需要先部署网络安全组。
  • Microsoft.Network/networkInterfaces。 此资源依赖于另外两个资源:公共 IP 地址和虚拟网络。
  • Microsoft.Compute/virtualMachines。 虚拟机是要部署的主要资源。 它依赖于两个不同的资源:存储帐户和网络接口。

部署 Linux VM

在这里,你将从我们为你提供的 GitHub 存储库下载 Azure 资源管理器 (ARM) 模板。 该模板将预配 Linux VM 以及运行它所需的所有资源。

  1. 运行以下 wget 命令以下载 ARM 模板:

    wget https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json
    

    如果尚未安装 wget,则可以运行以下 curl 命令:

    curl https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json > azuredeploy.json
    
  2. 运行 az deployment group create 命令以部署模板:

    az deployment group create \
      --template-file azuredeploy.json \
      --parameters adminUsername=azureuser vmName=vm1 adminPasswordOrKey='insecurepassword123!'
    

    该命令可能需要几分钟才能完成运行。 当命令运行时,如果愿意,可在单独的浏览器选项卡中检查 ARM 模板

    通过搜索 dependsOn 密钥来记录资源依赖关系。 例如,虚拟机资源依赖于网络接口:

    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-06-01",
    "name": "[parameters('vmName')]",
    "location": "[parameters('location')]",
    "dependsOn": [
      "[resourceId('Microsoft.Network/networkInterfaces/', variables('networkInterfaceName'))]"
    ],
    

验证部署

验证 VM 是否已预配以及是否可通过 SSH 进行连接。 为此,请执行以下操作:

  1. 运行以下 az deployment group list 命令以列出订阅中的部署组:

    az deployment group list --output table
    

    你会看到一个名为 azuredeploy 的部署组:

    Name         ResourceGroup                               State      Timestamp                         Mode
    -----------  ------------------------------------------  ---------  --------------------------------  -----------
    azuredeploy  learn-1ef901aa-3f6a-46aa-8e93-a7f11e5192b8  Succeeded  2020-11-24T17:55:39.762517+00:00  Incremental
    
  2. 运行以下 az deployment group show 命令以显示可用于连接到 VM 的 SSH 命令:

    az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv
    

    ARM 模板在 output 部分中定义此属性。 下面是一个示例:

    ssh azureuser@simplelinuxvm-a33zb3sc332ue.westus.cloudapp.azure.com
    
  3. 再次运行该命令,这次使用 $() 语法来执行 SSH 命令:

    $(az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv)
    

    出现提示时,输入 yes 继续连接。 然后输入管理员密码 insecurepassword123!

    重要

    在实践中,请确保密码安全。 也可以使用公钥身份验证,这通常比使用密码更安全。

  4. 从 SSH 与 VM 的连接中,运行 hostname 以打印 VM 的主机名:

    hostname
    

    你会看到 VM 的内部主机名 vm1

    vm1
    
  5. 运行 exit 以离开 SSH 会话。

    exit
    

恭喜!你已使用 ARM 模板成功部署了 Linux VM。 VM 是包含从属资源的常见资源类型。