如何在单个 ARM 模板中部署带有规则引擎的 Front Door

问题描述 投票:0回答:3

我想部署一个 Azure 前门,其中自定义规则引擎与其中一个路由规则相关联。

整个问题在于RulesEngine必须与RoutingRule相关联,RoutingRule只能在创建Front Door时创建,但RulesEngine也需要Front Door才能创建。

https://learn.microsoft.com/en-us/azure/templates/microsoft.network/2020-05-01/frontdoors

我后来尝试创建 Microsoft.Network/frontDoors/routingRules 类型的独立资源,但出现资源类型无效的错误。

我是否遗漏了某些内容,或者这在单个 ARM 部署中无法实现?

azure azure-resource-manager azure-front-door
3个回答
1
投票

另一种解决方案是在部署后运行命令式脚本,将routingRule与RulesEngine关联起来。

从今天起将是:

az extension add -n front-door

az network front-door routing-rule update --front-door-name <fd-name> --name <routing-rule-nam> -g <resource-group-name> --rules-engine <rules-engine-name>


0
投票

这不是最佳选择,但我有一个解决方案。

基本上我需要做的是创建前门,然后创建规则引擎(取决于前门),然后使用嵌套部署模板(取决于规则引擎),它必须重新创建整个前门配置,但现在它可以引用规则引擎资源。


0
投票

我能够制作一个带有规则引擎和前门的工作单一 ARM 模板。

首先放置没有dependsOn设置的规则引擎资源,然后添加具有规则引擎资源ID的dependsOn设置的前门资源。

通过一些测试,看起来规则引擎资源并不依赖于前门来创建。

以下是 2 个资源的 ARM 模板片段示例:

 {
"type": "Microsoft.Network/frontdoors/rulesengines",
"apiVersion": "2021-06-01",
"name": "[concat(parameters('frontDoorName'), '/ruleEngineName')]",
"properties": {
    "resourceState": "Enabled",
    "rules": [
        {
            "name": "ruleName",
            "priority": 0,
            "action": {...},
            "matchConditions": [...],
            "matchProcessingBehavior": "Continue"
        }
    ]
}
},
{
"type": "Microsoft.Network/frontdoors",
"apiVersion": "2021-06-01",
"name": "[parameters('frontDoorName')]",
"location": "Global",
"dependsOn": [
  "[resourceId('Microsoft.Network/frontdoors/rulesengines', parameters('frontDoorName'), 'ruleEngineName')]"
],
"properties": {
  "routingRules": [
    {
      "id": "[concat(resourceId('Microsoft.Network/frontdoors', parameters('frontDoorName')), '/RoutingRules/routeRuleName')]",
      "name": "routeRuleName",
      "properties": {
        "routeConfiguration": {
          ...
        },
        "rulesEngine": {
            "id": "[resourceId('Microsoft.Network/frontdoors/rulesengines', parameters('frontDoorName'), 'ruleEngineName')]"
        },
        "resourceState": "Enabled",
        "frontendEndpoints": [
          ...
        ],
        "acceptedProtocols": [
          ...
        ],
        "patternsToMatch": [
          ...
        ],
        "enabledState": "Enabled"
      }
    }
  ],
  "resourceState": "Enabled",
  "loadBalancingSettings": [...],
  "backendPools": [...],
  "frontendEndpoints": [...],
  "backendPoolsSettings": {...},
  "enabledState": "Enabled",
  "friendlyName": "[parameters('frontDoorName')]"
}

}

© www.soinside.com 2019 - 2024. All rights reserved.