当使用New-AzureRmDeployment
命令集通过主ARM模板部署链接的ARM模板时,尝试使用resourceGroup().name
函数和属性时出现错误。错误消息是:
Unable to process template language expressions for resource
'/subscriptions/<subscriptionGuid>/resourceGroups/Zxy-
Test/providers/Microsoft.Resources/deployments/storageDeployment' at line
'29' and column '5'. 'The template function
'RESOURCEGROUP' is not expected at this location.`
作为替代方案,我尝试使用resourceId(...)
函数而不进行资源组函数调用,但是在缺少资源组信息且与从Azure门户获取的资源ID不匹配的情况下,该函数给出了错误的资源ID
例如
"value": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
缺少资源组的结果:
/subscriptions/<subscriptionGuid>/providers/Microsoft.Storage/storageAccounts/linktestdata
这是我所期望的,Azure门户也报告了此情况
/subscriptions/<subscriptionGuid>/resourceGroups/Zxy-Test/providers/Microsoft.Storage/storageAccounts/linktestdata
我以以下TestMaster.json
和TestLinked0.json
模板为例来说明问题。
TestMaster.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"linkedTemplateUri": {
"type": "string",
"metadata": {
"description": "URI to the linked ARM template file."
}
}
},
"resources": [
{
"apiVersion": "2018-05-01",
"name": "testMasterDeployment",
"type": "Microsoft.Resources/deployments",
"location": "West US",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[parameters('linkedTemplateUri')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"tagValues": { "value": {
"TagA": "A-Tag",
"TagB": "B-Tag"
}}
}
}
}
],
"outputs": {
"messageFromMaster00": {
"type": "string",
"value": "Master-00 reporting"
},
"messageFromLinkedTemplate": {
"type": "object",
"value": "[reference('testMasterDeployment').outputs.messageFromNestedTemplate]"
}
}
}
TestLinked0.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"rgName": {
"defaultValue": "Zxy-Test",
"type": "string"
},
"location": {
"defaultValue": "West US",
"type": "string"
},
"tagValues": {
"type": "object"
}
},
"variables": {
"storageName": "linktestdata"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('location')]",
"name": "[parameters('rgName')]",
"properties": {},
"tags": "[parameters('tagValues')]"
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2017-05-10",
"name": "storageDeployment",
"resourceGroup": "[parameters('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2017-10-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"tags": "[parameters('tagValues')]",
"kind": "StorageV2",
"sku": {
"name": "Standard_LRS"
}
}
],
"outputs": {
"storageAccount": {
"type": "string",
"value": "[variables('storageName')]"
},
"resourceInfo0": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
},
"resourceInfo1": {
"type": "string",
"value": "[resourceId(resourceGroup().name, 'Microsoft.Storage/storageAccounts', variables('storageName'))]"
}
}
}
}
}
],
"outputs": {
"messageFromNestedTemplate": {
"type": "object",
"value": "[reference('storageDeployment').outputs]"
}
}
}
用于部署ARM模板的PowerShell:
$uri = 'https://<containername>.blob.core.windows.net/azure-resource-templates/TestMaster.json'
$linkedTemplateUri = 'https://<containername>.blob.core.windows.net/azure-resource-templates/TestLinked0.json'
New-AzureRmDeployment -Location 'West US' -TemplateUri $uri -linkedTemplateUri $linkedTemplateUri
答案 0 :(得分:2)
我现在发现Microsoft文档说“不支持resourceGroup()函数”。用于https://docs.microsoft.com/en-us/azure/azure-resource-manager/deploy-to-subscription#using-template-functions的订阅级别部署。我正在使用的Commandlet是New-AzureRmDeployment
,用于在当前订阅范围内部署资源。看来我需要采取其他方法。