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')]"
}
}
]
}
]
}