与环境无关的 ARM 模板参数文件
environment agnostic ARM template parameter file
我有一个用于存储帐户部署的(简化的)ARM 模板:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters":{
"env_storage_name": {
"type": "string"
}
},
"resources":[
{
"type": "Microsoft.Storage/storageAccounts",
"name":"[parameters('env_storage_name')]",
"apiVersion": "2019-06-01"
}
]
}
此模板使用关联的参数文件:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"env_storage_name": {
"value": "<env>-storage_name"
}
}
}
我的目标是通过以下方式使用 Powershell 部署此模板:
az deployment group create --name "someDeploymentName" --resource-group "myRG" --template-file "pathToTemplate.json" --parameters "pathToParameters.json"
我用谷歌搜索了很多,但到目前为止我还没有找到一种方法来动态替换参数中的 env 子字符串,例如“dev”、“tst”、“acc”、“prd”。我想做的是在环境中有效地使用相同的 Powershell 命令“管道”。我试过玩弄变量,但到目前为止我还没有设法完成它。
这可能吗?谁能帮帮我?
根据上述要求,我们创建了下面的 arm 模板来创建存储帐户并在我们的环境中测试它工作正常。
{
"$schema":"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"parameters":{
"env_storage":{
"type":"string",
"allowedValues":[
"dev",
"test",
"acc",
"prd"
]
},
"storageName":{
"type":"string"
}
},
"functions":[
],
"variables":{
},
"resources":[
{
"type":"Microsoft.Storage/storageAccounts",
"apiVersion":"2021-04-01",
"name":"[concat(parameters('env_storage'),parameters('storageName'))]",
"location":"[resourceGroup().location]",
"kind":"StorageV2",
"sku":{
"name":"Premium_LRS",
"tier":"Premium"
}
}
],
"outputs":{
}
}
无需为 parameters.json 创建单独的文件,您可以直接在 az 部署组 cmdlet 中传递参数,如下所示。
对于 PowerShell:
$paramObject = @{ <list of parameters that declared in the deploymenttemplate.json>
'env_storage' = '<env_value>'
'storageName' = '<account Name>'
}
$parameters = @{
'Name' = '<deploymentName>'
'ResourceGroupName' = '<resourcegroupname>'
'TemplateFile' = '<deploymenttemplate.json'
'TemplateParameterObject' = $paramObject
'Verbose' = $true
}
New-AzResourceGroupDeployment @parameters
如果您使用 Bash,您可以使用以下格式在 az deployment group create cmdlet 期间传递参数
$params = '{ \"env_storage\": {\"value\":\"<env_value>\"}, \"<storageName>\": {\"value\":\"<stroageaccountName\"} }'
az deployment group create --resource-group <resourcegrpName> --template-file <deploymenttemplate.json> --parameters $params
这里是参考文档,可以了解有关如何 pass parameters in azure deployment group cli cmdlet
的更多信息
解决我的问题的方法是,使用变量从参数中连接我的相关资源名称等。我花了一段时间才了解 ARM 在这里为您提供的可能性。
我现在正在使用这个模板:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscription": {
"type": "string"
},
"env": {
"type": "string"
}
},
"variables": {
"storage_name": "[concat(parameters('subscription'),'-',parameters('env'),'-storage_account_name')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name":"[variables('storage_name')]",
"apiVersion": "2019-06-01"
}
]
}
并用此参数文件提供给它:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscription": {
"value": "mySub"
},
"env": {
"value": "dev"
}
}
}
所以我唯一要做的就是更改参数文件中的“env”参数。
这并没有给我按下按钮的可能性,所有四个环境都是按顺序创建的,但这不是 atm 要求的一部分。例如,我仍然必须手动将“dev”更改为“tst”并重新运行我的 PowerShell 脚本,但这对我来说是可以接受的。
我有一个用于存储帐户部署的(简化的)ARM 模板:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters":{
"env_storage_name": {
"type": "string"
}
},
"resources":[
{
"type": "Microsoft.Storage/storageAccounts",
"name":"[parameters('env_storage_name')]",
"apiVersion": "2019-06-01"
}
]
}
此模板使用关联的参数文件:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"env_storage_name": {
"value": "<env>-storage_name"
}
}
}
我的目标是通过以下方式使用 Powershell 部署此模板:
az deployment group create --name "someDeploymentName" --resource-group "myRG" --template-file "pathToTemplate.json" --parameters "pathToParameters.json"
我用谷歌搜索了很多,但到目前为止我还没有找到一种方法来动态替换参数中的 env 子字符串,例如“dev”、“tst”、“acc”、“prd”。我想做的是在环境中有效地使用相同的 Powershell 命令“管道”。我试过玩弄变量,但到目前为止我还没有设法完成它。
这可能吗?谁能帮帮我?
根据上述要求,我们创建了下面的 arm 模板来创建存储帐户并在我们的环境中测试它工作正常。
{
"$schema":"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"parameters":{
"env_storage":{
"type":"string",
"allowedValues":[
"dev",
"test",
"acc",
"prd"
]
},
"storageName":{
"type":"string"
}
},
"functions":[
],
"variables":{
},
"resources":[
{
"type":"Microsoft.Storage/storageAccounts",
"apiVersion":"2021-04-01",
"name":"[concat(parameters('env_storage'),parameters('storageName'))]",
"location":"[resourceGroup().location]",
"kind":"StorageV2",
"sku":{
"name":"Premium_LRS",
"tier":"Premium"
}
}
],
"outputs":{
}
}
无需为 parameters.json 创建单独的文件,您可以直接在 az 部署组 cmdlet 中传递参数,如下所示。
对于 PowerShell:
$paramObject = @{ <list of parameters that declared in the deploymenttemplate.json>
'env_storage' = '<env_value>'
'storageName' = '<account Name>'
}
$parameters = @{
'Name' = '<deploymentName>'
'ResourceGroupName' = '<resourcegroupname>'
'TemplateFile' = '<deploymenttemplate.json'
'TemplateParameterObject' = $paramObject
'Verbose' = $true
}
New-AzResourceGroupDeployment @parameters
如果您使用 Bash,您可以使用以下格式在 az deployment group create cmdlet 期间传递参数
$params = '{ \"env_storage\": {\"value\":\"<env_value>\"}, \"<storageName>\": {\"value\":\"<stroageaccountName\"} }'
az deployment group create --resource-group <resourcegrpName> --template-file <deploymenttemplate.json> --parameters $params
这里是参考文档,可以了解有关如何 pass parameters in azure deployment group cli cmdlet
的更多信息解决我的问题的方法是,使用变量从参数中连接我的相关资源名称等。我花了一段时间才了解 ARM 在这里为您提供的可能性。
我现在正在使用这个模板:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscription": {
"type": "string"
},
"env": {
"type": "string"
}
},
"variables": {
"storage_name": "[concat(parameters('subscription'),'-',parameters('env'),'-storage_account_name')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name":"[variables('storage_name')]",
"apiVersion": "2019-06-01"
}
]
}
并用此参数文件提供给它:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscription": {
"value": "mySub"
},
"env": {
"value": "dev"
}
}
}
所以我唯一要做的就是更改参数文件中的“env”参数。
这并没有给我按下按钮的可能性,所有四个环境都是按顺序创建的,但这不是 atm 要求的一部分。例如,我仍然必须手动将“dev”更改为“tst”并重新运行我的 PowerShell 脚本,但这对我来说是可以接受的。