练习 - 控制资源的部署顺序
在本部分中,首先执行一些基本设置任务。 在 Visual Studio Code 中,将终端会话连接到由免费的 Azure 沙箱环境提供的 Azure 订阅。 这样做可以对 Azure 的命令进行身份验证。
然后,运行用于预配 Linux 虚拟机 (VM) 的基本 ARM 模板。 部署完成后,验证 VM 是否正在运行并可连接。
尽管使用 VM 是一项常见的任务,但你发现 VM 资源需要必须存在才能创建 VM 的网络和存储组件。 你将了解 dependsOn
构造如何使你能够设置资源的预配顺序。
设置
在这里,你将打开 Visual Studio Code,创建 PowerShell 会话,并连接到由免费的 Azure 沙箱环境提供的 Azure 订阅。
你需要在此模块中执行一次这些设置任务。 如果在后续练习中注销或断开连接,则可以参考这些步骤。
在 Visual Studio Code 中打开 PowerShell
打开 Visual Studio Code。
使用“终端”菜单打开终端窗口。
如果终端窗口右侧的下拉菜单显示“pwsh”,即表示你有了要使用的正确 shell,可以跳到下一部分继续进行操作。
如果没有,请选择下拉列表,然后选择“选择默认 Shell”。
选择“pwsh”。
选择终端中的 +,以 pwsh 作为 shell 创建一个新的终端。
登录 Azure
运行
Connect-AzAccount
以登录到你的帐户。Connect-AzAccount
将会出现一个浏览器窗口。
选择用于激活沙盒的帐户,并在出现提示时关闭浏览器窗口。
设置活动订阅
运行
Get-AzSubscription
以获取沙盒环境的订阅 ID。Get-AzSubscription
找到
Concierge Subscription
并复制第二列。 它的格式类似于 cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0。运行
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 以及运行它所需的所有资源。
运行以下
curl
命令以下载 ARM 模板:curl -O 'https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-linux/azuredeploy.json'
运行
ConvertTo-SecureString
cmdlet,并将结果分配给名为$secure
的 PowerShell 变量:$secure = "insecurepassword123!" | ConvertTo-SecureString -AsPlainText -Force
现在,你拥有了密码的加密版本,接下来可以传递部署脚本。
运行
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 进行连接。 为此,请执行以下操作:
运行
Invoke-Expression
命令以通过 SSH 连接到 VM:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
出现提示时,输入
yes
继续连接。 然后输入管理员密码insecurepassword123!
。重要
在实践中,请确保密码安全。 也可以使用公钥身份验证,这通常比使用密码更安全。
从 SSH 与 VM 的连接中,运行
hostname
以打印 VM 的主机名:hostname
你会看到 VM 的内部主机名
vm1
:vm1
运行
exit
以离开 SSH 会话。exit
恭喜!你已使用 ARM 模板成功部署了 Linux VM。 VM 是包含从属资源的常见资源类型。
设置
在这里,你将打开 Visual Studio Code,创建终端会话,并连接到由免费的 Azure 沙箱环境提供的 Azure 订阅。
你需要在此模块中执行一次这些设置任务。 如果在后续练习中注销或断开连接,则可以参考这些步骤。
在 Visual Studio Code 中打开 shell
打开 Visual Studio Code。
使用“终端”菜单打开终端窗口。
如果下拉菜单显示首选 shell(例如 bash 或 zsh),则可以跳到下一部分。
如果没有,请选择下拉列表,然后选择“选择默认 Shell”。
选择所需的 shell 类型。
选择终端中的 +,以通过选定的 shell 类型创建一个新的终端。
登录 Azure
从终端运行
az login
:az login
将会出现一个浏览器窗口。
选择用于激活沙盒的帐户,并在出现提示时关闭浏览器窗口。
设置活动订阅
运行以下 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 以及运行它所需的所有资源。
运行以下
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
运行
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 进行连接。 为此,请执行以下操作:
运行以下
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
运行以下
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
再次运行该命令,这次使用
$()
语法来执行 SSH 命令:$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
出现提示时,输入
yes
继续连接。 然后输入管理员密码insecurepassword123!
。重要
在实践中,请确保密码安全。 也可以使用公钥身份验证,这通常比使用密码更安全。
从 SSH 与 VM 的连接中,运行
hostname
以打印 VM 的主机名:hostname
你会看到 VM 的内部主机名
vm1
:vm1
运行
exit
以离开 SSH 会话。exit
恭喜!你已使用 ARM 模板成功部署了 Linux VM。 VM 是包含从属资源的常见资源类型。