教程:使用参数文件部 ARM 模板
本教程介绍如何使用参数文件存储在部署过程中传递的值。 在以前的教程中,我们通过部署命令使用了内联参数。 此方法适用于测试 Azure 资源管理器模板(ARM 模板),但是当自动执行部署时,可以更容易地为环境传递一组值。 参数文件可以方便你针对特定的环境将参数值打包。 在本教程中,你将针对开发和生产环境创建参数文件。 完成此说明需要 12 分钟。
先决条件
建议完成有关标记的教程,但这不是必需的。
需要安装带资源管理器工具扩展的 Visual Studio Code,以及 Azure PowerShell 或 Azure 命令行接口 (CLI)。 有关详细信息,请参阅模板工具。
审阅模板
模板有许多可以在部署过程中提供的参数。 在上一教程结束时,模板包含以下 JSON 文件:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Premium_LRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"defaultValue": "exampleplan"
},
"webAppName": {
"type": "string",
"metadata": {
"description": "Base name of the resource such as web app name and app service plan "
},
"minLength": 2
},
"linuxFxVersion": {
"type": "string",
"defaultValue": "php|7.0",
"metadata": {
"description": "The Runtime stack of current web app"
}
},
"resourceTags": {
"type": "object",
"defaultValue": {
"Environment": "Dev",
"Project": "Tutorial"
}
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
"webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"tags": "[parameters('resourceTags')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
},
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2021-03-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"tags": "[parameters('resourceTags')]",
"sku": {
"name": "B1",
"tier": "Basic",
"size": "B1",
"family": "B",
"capacity": 1
},
"kind": "linux",
"properties": {
"perSiteScaling": false,
"reserved": true,
"targetWorkerCount": 0,
"targetWorkerSizeId": 0
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2021-03-01",
"name": "[variables('webAppPortalName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[parameters('appServicePlanName')]"
],
"tags": "[parameters('resourceTags')]",
"kind": "app",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"siteConfig": {
"linuxFxVersion": "[parameters('linuxFxVersion')]"
}
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
该模板可以正常工作,但现在,你希望能够轻松地管理为模板传入的参数。
添加参数文件
参数文件是 JSON 文件,其结构类似于模板。 在文件中,我们提供需要在部署过程中传入的参数值。
在参数文件中,为模板中的参数提供值。 参数文件中每个参数的名称需要与模板中参数的名称相匹配。 该名称不区分大小写,但为了方便查看匹配的值,我们建议你匹配模板中的大小写。
无需为每个参数提供值。 如果未指定的参数具有默认值,则在部署过程中将使用该值。 如果参数没有默认值,并且未在参数文件中指定值,系统会在部署过程中提示你提供值。
不能在参数文件中指定与模板中的参数名称不匹配的参数名称。 如果提供了未知参数,则会收到错误。
在 Visual Studio Code 中,创建包含以下内容的新文件。 使用名称 azuredeploy.parameters.dev.json 保存文件。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"value": "devstore"
},
"storageSKU": {
"value": "Standard_LRS"
},
"appServicePlanName": {
"value": "devplan"
},
"webAppName": {
"value": "devapp"
},
"resourceTags": {
"value": {
"Environment": "Dev",
"Project": "Tutorial"
}
}
}
}
此文件是用于开发环境的参数文件。 请注意,它将“Standard_LRS”用于存储帐户,使用“dev”前缀为资源命名,并将 Environment
标记设置为“Dev” 。
同样,创建包含以下内容的新文件。 使用名称 azuredeploy.parameters.prod.json 保存文件。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"value": "contosodata"
},
"storageSKU": {
"value": "Standard_GRS"
},
"appServicePlanName": {
"value": "contosoplan"
},
"webAppName": {
"value": "contosowebapp"
},
"resourceTags": {
"value": {
"Environment": "Production",
"Project": "Tutorial"
}
}
}
}
此文件是用于生产环境的参数文件。 请注意,它将“Standard_GRS”用于存储帐户,使用“contoso”前缀为资源命名,并将 Environment
标记设置为“Production” 。 在实际生产环境中,你可能还希望使用具有非免费 SKU 的应用服务,但我们在本教程中使用该 SKU。
部署模板
使用 Azure CLI 或 Azure PowerShell 来部署模板。
让我们创建两个新的资源组,对模板进行最终测试。 一个用于开发环境,一个用于生产环境。
对于模板和参数变量,请将 {path-to-the-template-file}
、{path-to-azuredeploy.parameters.dev.json}
、{path-to-azuredeploy.parameters.prod.json}
和大括号 {}
替换为你的模板和参数文件路径。
首先,让我们部署到开发环境。
$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
-Name myResourceGroupDev `
-Location "China East"
New-AzResourceGroupDeployment `
-Name devenvironment `
-ResourceGroupName myResourceGroupDev `
-TemplateFile $templateFile `
-TemplateParameterFile $parameterFile
现在,我们部署到生产环境。
$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
-Name myResourceGroupProd `
-Location "China North"
New-AzResourceGroupDeployment `
-Name prodenvironment `
-ResourceGroupName myResourceGroupProd `
-TemplateFile $templateFile `
-TemplateParameterFile $parameterFile
注意
如果部署失败,请使用 verbose
开关获取有关正在创建的资源的信息。 使用 debug
开关获取调试的详细信息。
验证部署
可以通过在 Azure 门户中浏览资源组来验证部署。
- 登录 Azure 门户。
- 在左侧菜单中选择“资源组”。
- 可以看到在本教程中部署的两个新资源组。
- 选择任一资源组,查看部署的资源。 请注意,这些资源与我们在参数文件中为该环境指定的值匹配。
清理资源
在 Azure 门户上的左侧菜单中选择“资源组” 。
选中复选框旁边的超链接资源组名称。 如果已完成此系列,则需删除三个资源组:myResourceGroup、myResourceGroupDev 和 myResourceGroupProd。
从顶部菜单中选择“删除资源组”图标。
注意
删除资源组的操作不可逆。
在显示的弹出窗口中输入资源组名称,然后选择“删除”。
后续步骤
祝贺。 你已完成本简介,知道如何将模板部署到 Azure 了。 如果你有任何意见和建议,请在反馈部分告知我们。
下一个教程系列将详细介绍如何部署模板。