5

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 -場所 "北ヨーロッパ" -名前 "psResourceGroup" -DeploymentName "psDeployment" -TemplateFile .\Template.json -TemplateParameterFile .\Parameters.json -Verbose
    コマンド パイプライン位置 1 のコマンドレット New-AzureResourceGroup
    次のパラメーターの値を指定します。
    (ヘルプを表示するには !? と入力します。)
    詳細: ターゲット "psDeployment" で操作 "リソース グループを置換しています ..." を実行しています。
    詳細: 16:22:07 - リソース グループ 'psResourceGroup' を場所 'northeurope' に作成しました
    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'
    行 _ と列 _ で。
    「テンプレート言語関数 'resource Id' を評価できません: タイプ 'Microsoft.Sql/servers/databases' には '2' 個のリソース名引数が必要です。''
    行:1 文字:1
    + New-AzureResourceGroup -場所 "北ヨーロッパ" -名前 "psResourceGroup" -テンプレート ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo : NotSpecified: (:) [New-AzureResourceGroup]、例外
        + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupCommand



ドキュメントresourceId()によると、この関数には2 つのパラメーターがあり、正しいと思われる 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",

    "パラメーター": {
        "位置": {
            "タイプ": "文字列",
            "defaultValue": "北ヨーロッパ",
            "allowedValues": [
                "東アジア"、
                "東南アジア"、
                "米国東部",
                "米国西部"、
                "米国中北部",
                「米国中南部」、
                "米国中部",
                「北ヨーロッパ」、
                「西ヨーロッパ」
            ]
        }、
        "sqlServerName": { "タイプ": "文字列" },
        "sqlAdminUserName": { "タイプ": "文字列" },
        "sqlAdminUserPassword": { "type": "securestring" },
        "databaseName": { "type": "string" }
    }、

    "資力": [
        {
            "type": "Microsoft.Sql/servers",
            "apiVersion": "2.0",
            "場所": "[パラメータ('場所')]",
            "name": "[parameters('sqlServerName')]",
            "properties": { "administratorLogin": "[parameters('sqlAdminUserName')]", "administratorLoginPassword": "[parameters('sqlAdminUserPassword')]" },
            "資力": [
                {
                    "タイプ": "データベース",
                    "apiVersion": "2.0",
                    "場所": "[パラメータ('場所')]",
                    "名前": "[パラメータ('データベース名')]",
                    "dependsOn": [ "[concat('Microsoft.Sql/servers/', parameters('sqlServerName'))]" ],
                    "プロパティ": {
                        "エディション": "スタンダード",
                        "collat​​ion": "SQL_Latin1_General_CP1_CI_AS",
                        "maxSizeBytes": "10737418240",
                        "requestedServiceObjectiveId": "f1173c43-91bd-4aaa-973c-54e79e15235b",
                        "createMode": "コピー",

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

                    }
                }
            ]
        }
    ]
}

4

1 に答える 1