你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
了解如何根据 Azure 资源管理器模板(ARM 模板)中的条件部署 Azure 资源。
在 “设置资源部署顺序 ”教程中,创建虚拟机、虚拟网络和其他一些依赖资源,包括存储帐户。 无需每次都创建新的存储帐户,而是允许用户选择创建新存储帐户和使用现有存储帐户。 若要实现此目标,请定义其他参数。 如果参数的值是 新的,则会创建新的存储帐户。 否则,将使用具有所提供名称的现有存储帐户。
本教程涵盖以下任务:
- 打开快速入门模板
- 修改模板
- 部署模板
- 清理资源
本教程仅介绍使用条件的基本方案。 有关详细信息,请参见:
有关涵盖条件的 Learn 模块,请参阅 使用高级 ARM 模板功能管理复杂的云部署。
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
先决条件
若要完成本文,需要做好以下准备:
若要提高安全性,请使用虚拟机管理员帐户生成的密码。 可以使用 Azure Cloud Shell 在 PowerShell 或 Bash 中运行以下命令:
openssl rand -base64 32若要了解详细信息,请运行
man openssl rand以打开手动页。Azure Key Vault 旨在保护加密密钥和其他机密。 有关详细信息,请参阅 教程:在 ARM 模板部署中集成 Azure Key Vault。 我们还建议每三个月更新一次密码。
打开快速入门模板
Azure 快速入门模板是 ARM 模板的存储库。 你可以找到示例模板并对其进行自定义,而不是从头开始创建模板。 本教程中使用的模板称为 “部署简单的 Windows VM”。
在 Visual Studio Code 中,选择文件>打开文件。
在 文件名中,粘贴以下 URL:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json选择 “打开 ”以打开该文件。
模板定义了六个资源:
- Microsoft.Storage/storageAccounts。
- Microsoft.Network/publicIPAddresses。
- Microsoft.Network/networkSecurityGroups。
- Microsoft.Network/virtualNetworks。
- Microsoft.Network/networkInterfaces。
- Microsoft.Compute/virtualMachines。
在自定义模板之前,查看模板引用会很有帮助。
选择 “文件>另存为” ,将文件的副本保存到本地计算机 ,名称azuredeploy.json。
修改模板
对现有模板进行两项更改:
- 添加存储帐户名称参数。 用户可以指定新的存储帐户名称或现有的存储帐户名称。
- 添加名为
newOrExisting的新参数。 部署使用此参数来确定是创建新的存储帐户还是使用现有存储帐户。
下面是进行更改的过程:
在 Visual Studio Code 中打开 azuredeploy.json 。
将整个模板中的三个
variables('storageAccountName')替换为parameters('storageAccountName')。删除以下变量定义:
将以下两个参数添加到 parameters 节的开头:
"storageAccountName": { "type": "string" }, "newOrExisting": { "type": "string", "allowedValues": [ "new", "existing" ] },按 Alt+Shift+F 在 Visual Studio Code 中设置模板的格式。
更新的参数定义如下所示:
将以下行添加到存储帐户定义的开头。
"condition": "[equals(parameters('newOrExisting'),'new')]",条件检查参数
newOrExisting的值。 如果参数值 是新的,则部署将创建存储帐户。更新的存储帐户定义如下所示:
使用以下
storageUri值更新虚拟机资源定义的属性:"storageUri": "[format('https://{0}.blob.core.windows.net', parameters('storageAccountName'))]"使用不同资源组下的现有存储帐户时,必须进行此更改。
保存更改。
部署模板
登录到 Cloud Shell。
通过选择左上角的 PowerShell 或 Bash (对于 CLI),选择首选环境。 切换时必须重新启动 shell。
选择 “上传/下载文件”,然后选择“ 上传”。 请参阅前面的屏幕截图。 选择在上一个步骤中保存的文件。 上传文件后,可以使用
ls命令和cat命令来验证文件是否已成功上传。运行以下 PowerShell 脚本来部署模板。
重要
存储帐户名称在 Azure 中必须是唯一的。 名称必须只有小写字母或数字。 长度不能超过 24 个字符。 存储帐户名称是项目名称加上 store。 确保项目名称和生成的存储帐户名称满足存储帐户名称要求。
$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource group name and resource names" $newOrExisting = Read-Host -Prompt "Create new or use existing (Enter new or existing)" $location = Read-Host -Prompt "Enter the Azure location (i.e. centralus)" $vmAdmin = Read-Host -Prompt "Enter the admin username" $vmPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString $dnsLabelPrefix = Read-Host -Prompt "Enter the DNS Label prefix" $resourceGroupName = "${projectName}rg" $storageAccountName = "${projectName}store" New-AzResourceGroup -Name $resourceGroupName -Location $location New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` -adminUsername $vmAdmin ` -adminPassword $vmPassword ` -dnsLabelPrefix $dnsLabelPrefix ` -storageAccountName $storageAccountName ` -newOrExisting $newOrExisting ` -TemplateFile "$HOME/azuredeploy.json" Write-Host "Press [ENTER] to continue ..."注释
如果
newOrExisting为 new,但具有指定存储帐户名称的存储帐户已存在,则部署将会失败。
尝试进行另一次部署,将newOrExisting设置为现有,并指定现有的存储帐户。 若要事先创建存储帐户,请参阅 “创建存储帐户”。
清理资源
不再需要 Azure 资源时,通过删除资源组来清理部署的资源。 若要删除资源组,请选择“尝试” 以启动 Cloud Shell。 若要粘贴 PowerShell 脚本,请右键单击 shell 窗格,然后选择“ 粘贴”。
$projectName = Read-Host -Prompt "Enter the same project name you used in the last procedure"
$resourceGroupName = "${projectName}rg"
Remove-AzResourceGroup -Name $resourceGroupName
Write-Host "Press [ENTER] to continue ..."
后续步骤
在本教程中,你开发了一个模板,允许用户在创建新存储帐户和使用现有存储帐户之间进行选择。 若要了解如何从 Azure Key Vault 检索机密,并将机密用作模板部署中的密码,请参阅: