Dus*_*gas 5 azure azure-resource-manager azure-rm-template
Azure资源管理器(ARM)模板可以使用链接模板。这些链接的模板可以定义在ARM模板部署期间创建的其他资源。
ARM模板支持相关性,以确保某些资源先于其他资源创建。
我想在链接模板中为在主模板中创建的资源指定依赖项。如果我在链接模板中包含依赖项,则它看起来像这样:
"resources": [
{
"apiVersion": "2015-08-01",
"type": "Microsoft.Web/sites/hostNameBindings",
"name": "[concat(parameters('siteName'),'/', parameters('fqdn'))]",
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]"
],
"properties": {
"siteName": "[parameters('siteName')]"
}
}
]
Run Code Online (Sandbox Code Playgroud)
当dependsOn显示正确时,在处创建一个资源Microsoft.Web/sites/{siteNameParameter},部署ARM模板将输出以下错误消息:
InvalidTemplate:部署模板验证失败:'模板中未定义资源'Microsoft.Web / sites / blahblahblahblah'。请参阅https://aka.ms/arm-template了解用法详细信息。
我当前在定义链接模板调用时在主模板中定义此依赖关系。这似乎很脆弱,很容易打破。有没有比在主ARM模板中定义依赖项更好的方法?
{
"apiVersion": "2015-01-01",
"name": "SomeName",
"type": "Microsoft.Resources/deployments",
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "https://tempuri.org/supersecrettemplatepath/azuredeploy.json",
"contentVersion": "1.0.0.0"
},
"parameters":
{
"fqdn": {
"value": "www.tempuri.org"
},
"siteName": {
"value": "[parameters('siteName')]"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过两种方式定义依赖项-两者均有效。将依赖关系置于部署资源上(您的第二种方法)将意味着,在预配置网站之前,不会启动整个嵌套的部署。如果您想并行执行一些操作,则可以将依赖项放在嵌套模板中(您的第一种方法)。这可能对您的情况无关紧要,但这是关键的区别。
dependsOn需要一个resourceId-,并且错误正在尝试说,如果模板中未定义资源,则需要在中提供更多详细信息resourceId,在这种情况下,您需要resourceGroup(可能是订阅,但我对此表示怀疑)。因此,例如,您可以使用:
"dependsOn": [
"[resourceId(resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]"
],
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2958 次 |
| 最近记录: |