Release-Pipeline 中的 ARM 模板函数出错

Error in ARM template function in Release-Pipeline

我的 ARM 模板有问题,我用模板函数替换了某个部分。这发生在发布管道的执行期间。 ARM 模板由我添加到发布管道的 Azure Powershell 脚本安装。

这里是抛出错误的相关部分:

"parameters": {
    "connections_office365_externalid": {
        "defaultValue": "[concat(resourceGroup().id,'/providers')]/Microsoft.Web/connections/office365",
        "type": "String"
    },
    "connections_sql_externalid": {
        "defaultValue": "[concat(resourceGroup().id, '/providers')]/Microsoft.Web/connections/sql25",
        "type": "String"
    }
},

在部署 ARM 模板时出现以下错误:

> Status Message: Property id '[concat(resourceGroup().id,
> '/providers')]/Microsoft.Web/connections/office365' at path
> 'properties.parameters.$connections.value.office365.connectionId' is
> invalid. Expect fully qualified resource Id that start with
> '/subscriptions/{subscriptionId}' or
> '/providers/{resourceProviderNamespace}/'.
> (Code:LinkedInvalidPropertyId)

似乎带有模板函数的部分没有被执行,因为该函数没有被翻译成合适的value.Does任何人都知道这个模板函数没有在发布的运行时执行的问题管道?`

更新:

部署前 DefaultValue 部件是这样替换的:

我替换了字符串的特定部分(正则表达式)以使其动态化

(Get-Content $file.FullName -Raw) -replace "\/subscriptions\/(.*?)\/resourceGroups\/customerPrefix(.*?)\/providers","[concat(resourceGroup().id, '/providers')]" | Set-Content $file.FullName

如果您通过 ARM 模板为逻辑应用程序设置连接,请继续使用此部分:

"office365_1": {
                "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('logicAppLocation'), '/managedApis/', 'office365')]",
                "connectionId": "[resourceId('Microsoft.Web/connections', parameters('office365_1_Connection_Name'))]",
                "connectionName": "[parameters('office365_1_Connection_Name')]"
              }

您只需稍微更改替换脚本即可使其正常工作。见下文:

我已经测试并发现表达式 [concat(resourceGroup().id,'/providers')]/Microsoft.Web/connections/office365 无法在模板中计算。

正确的表达应该是这样的:

"defaultValue": "[concat(resourceGroup().id, '/providers', '/Microsoft.Web/connections/office365')]"

因为您想替换字符串的特定部分(正则表达式)以使其动态化。您可以像这样更改替换脚本:

(Get-Content $file.FullName -Raw) -replace "\/subscriptions\/(.*?)\/resourceGroups\/(.*?)\/providers(\/.*)`"",'[concat(resourceGroup().id, ''/providers'', '''')]"' | Set-Content $file.FullName

以上脚本会将相关字符串替换成这样"[concat(resourceGroup().id, '/providers', '/Microsoft.Web/connections/sql25')]",