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'))]" ], "プロパティ": { "エディション": "スタンダード", "collation": "SQL_Latin1_General_CP1_CI_AS", "maxSizeBytes": "10737418240", "requestedServiceObjectiveId": "f1173c43-91bd-4aaa-973c-54e79e15235b", "createMode": "コピー", ====> "sourceDatabaseId": "[resourceId('Microsoft.Sql/servers/databases', 'TestDB')]" } } ] } ] }