Azure Resource Manager模板语言 - resourceId():无法评估模板语言函数'resource Id'

json powershell azure azure-management-api azure-resource-manager

4081 观看

3回复

195 作者的声誉

如何正确调用Azure Resource Manager模板语言中定义的函数resourceId()?

上下文

///  - Azure
///  - Azure Resource Management
///      https://msdn.microsoft.com/en-us/library/azure/dn578292.aspx
///
///  - Azure Resource Manager Template Language
///      https://msdn.microsoft.com/en-us/library/azure/dn835138.aspx
///
///  - Azure Resource Manager Template Language functions and expressions
///  - Azure Resource Manager Template Language function:
///      resourceId('resourceNamespace/resourceType','resourceName')
///
///  - Powershell
///  - Azure PowerShell
///  - Azure PowerShell Resource Manager Mode (Switch-AzureMode AzureResourceManager)
///  - Azure PowerShell CmdLet: New-AzureResourceGroup
///


模板中的这一行(请参阅下面的完整模板)
"sourceDatabaseId": "[resourceId('Microsoft.Sql/servers/databases', 'TestDB')]"


运行PowerShell New-AzureResourceGroup CmdLet 时出现此错误:

    PS c:\ AzureDeployment> New-AzureResourceGroup -Location“North Europe”-Name“psResourceGroup”-DeploymentName“psDeployment”-TemplateFile。\ Template.json -TemplateParameterFile。\ Parameters.json -Verbose
    命令管道位置1处的cmdlet New-AzureResourceGroup
    提供以下参数的值:
    (输入!?获取帮助。)
    VERBOSE:在目标“psDeployment”上执行“替换资源组...”操作。
    VERBOSE:16:22:07  - 在'northeurope'位置创建资源组'psResourceGroup'
    New-AzureResourceGroup:16:22:08  - 资源Microsoft.Sql / servers / databases 
    'xxx-sql-server-name-xxx / psDatabaseName'失败并显示消息 
    '无法处理资源的模板语言表达式
    '/subscriptions/xxxxxxxx/resourceGroups/psResourceGroup/providers/Microsoft.Sql/servers/xxx-sql-server-name-xxx/databases/psDatabaseName'
    在第_行和第_列。 
    '无法评估模板语言功能'资源ID':类型'Microsoft.Sql / servers / databases'需要'2'资源名称参数。''
    在行:1个字符:1
    + New-AzureResourceGroup -Location“North Europe”-Name“psResourceGroup”-Templat ... 
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo:NotSpecified:(:) [New-AzureResourceGroup],Exception 
        + FullyQualifiedErrorId:Microsoft.Azure.Commands.Resources.NewAzureResourceGroupCommand



resourceId()根据文档,该函数有2个参数,我用两个常量字符串调用它,我认为是正确的:
resourceId('Microsoft.Sql/servers/databases', 'TestDB')
它仍然会产生一条错误消息,表明参数的数量是错误的:
'Unable to evaluate template language function 'resource Id': the type 'Microsoft.Sql/servers/databases' requires '2' resource name argument(s).'

根据错误消息使用的资源是: '/subscriptions/xxxxxxxx/resourceGroups/psResourceGroup/providers/Microsoft.Sql/servers/xxx-sql-server-name-xxx/databases/psDatabaseName'

那么,为数据库调用resourceId()的正确方法是什么?

此外,如果我从模板中删除createMode和sourceDatabaseId一切正常。



这是上面使用的模板

{    
    “$ schema”:“http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json”,
    “contentVersion”:“1.0.0.0”,

    “参数”:{
        “地点”: {
            “type”:“string”,
            “defaultValue”:“北欧”,
            “allowedValues”:[
                “东亚”,
                “东南亚”,
                “东美”,
                “美国西部”,
                “美国中北部”,
                “美国中南部”,
                “美国中部”,
                “北欧”,
                “西欧”
            ]
        },
        “sqlServerName”:{“type”:“string”},
        “sqlAdminUserName”:{“type”:“string”},
        “sqlAdminUserPassword”:{“type”:“securestring”},
        “databaseName”:{“type”:“string”}
    },

    “资源”:[
        {
            “type”:“Microsoft.Sql / servers”,
            “apiVersion”:“2.0”,
            “location”:“[parameters('location')]”,
            “name”:“[parameters('sqlServerName')]”,
            “properties”:{“administratorLogin”:“[parameters('sqlAdminUserName')]”,“administratorLoginPassword”:“[parameters('sqlAdminUserPassword')]”},
            “资源”:[
                {
                    “type”:“数据库”,
                    “apiVersion”:“2.0”,
                    “location”:“[parameters('location')]”,
                    “name”:“[parameters('databaseName')]”,
                    “dependsOn”:[“[concat('Microsoft.Sql / servers /',parameters('sqlServerName'))]”],
                    “properties”:{
                        “版本”:“标准”,
                        “collat​​ion”:“SQL_Latin1_General_CP1_CI_AS”,
                        “maxSizeBytes”:“10737418240”,
                        “requestedServiceObjectiveId”:“f1173c43-91bd-4aaa-973c-54e79e15235b”,
                        “createMode”:“复制”,

====>“sourceDatabaseId”:“[resourceId('Microsoft.Sql / servers / databases','TestDB')]”

                    }
                }
            ]
        }
    ]
}

作者: NoOneSpecial 的来源 发布者: 2015 年 4 月 21 日

回应 (3)


0

590 作者的声誉

我注意到你的apiVersion值格式不正确。Azure使用API​​的日期值。

尝试使用示例文件中的值:

"apiVersion": "2014-04-01-preview"
作者: JonnyG 发布者: 28.04.2015 01:23

5

66 作者的声誉

决定

我在一篇完全不相关的文章中偶然发现了解决方案,但你应该过去了

[resourceId('Microsoft.SQL/servers/databases', parameters('sqlServerName'), 'TestDB')]

作者: Jordan Locke 发布者: 29.01.2016 10:47

0

6 作者的声誉

因为你丢失了SQL服务器的名字?

作者: Quinn 发布者: 14.02.2019 03:55
32x32