繁体   English   中英

处理Azure Resource Manager链接模板中的依赖项

[英]Handling dependencies in Azure Resource Manager Linked Templates

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')]"
        }
    }
]

dependsOn显示正确时,a资源在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')]"
            }
        }
    }
}

您可以以任何方式定义依赖关系 - 两者都是有效的。 将依赖关系部署资源(第二种方法)意味着在配置网站之前不会启动整个嵌套部署。 如果你想并行地解决一些问题,那么你会将依赖项放在嵌套模板中(第一种方法)。 对于您的场景,这可能或不重要,但这是一个关键的区别。

dependsOn需要一个resourceId - 并且正如错误试图说的那样,如果资源没有在模板中定义,你需要在resourceId有更多细节,在这种情况下,你需要resourceGroup (可能是订阅,但我对此表示怀疑)。 例如,您可以使用:

"dependsOn": [
    "[resourceId(resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]"
],

dependsOn需要链接部署的名称,而不是其中的一个资源。

例如:

dependsOn:“Microsoft.Resources / deployments / myExternalTemplate”

"dependsOn": [
    "[resourceId(subscription().subscriptionId, resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]"
],

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM