Язык шаблонов Azure Resource Manager - resourceId(): невозможно оценить функцию языка шаблонов "идентификатор ресурса"
Как правильно вызвать функцию resourceId(), определенную на языке шаблонов Azure Resource Manager?
контекст
/// - 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-группа-AzureResourceG Задайте значения для следующих параметров: (Введите!? Для справки.) VERBOSE: Выполнение операции "Замена группы ресурсов..." для цели "psDeployment". VERBOSE: 16:22:07 - Создана группа ресурсов 'psResourceGroup' в расположении 'northeurope' New-AzureResourceGroup: 16:22:08 - Ресурс Microsoft.Sql/servers/database 'xxx-sql-server-name-xxx/psDatabaseName' не удалось с сообщением "Невозможно обработать выражения языка шаблона для ресурса" /subscription/xxxxxxxx/resourceGroups/psResourceGroup/providers/Microsoft.Sql/servers/xxx-sql-server-name-xxx/databases/psDatabaseName'в строке _ и столбце _, "Невозможно оценить функцию языка шаблонов" Идентификатор ресурса: для типа "Microsoft.Sql/servers/database" требуются аргументы "2" для имени ресурса. '' В строке: 1 символ:1 + New-AzureResourceGroup -Location " Северная Европа "-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", "parameters": { "location": { "type": "string", "defaultValue": "North Europe", "allowValues ": [ " Восточная Азия "," Юго-Восточная Азия "," Восточная часть США "," Западная часть США "," Северо-центральная часть " US", " South Central US", " Central US", " North Europe", "West Europe" ] }, "sqlServerName": { "type": "string" }, "sqlAdminUserName": { "type": " строка " }, "sqlAdminUserPassword": { "type": "securestring" }, "databaseName": { "type": "string" } }, "resources": [ { "type": "Microsoft.Sql/servers", "apiVersion": "2.0", "location": "[parameters('location')]", "name": "[parameters('sqlServerName')]", "properties": { "administratorLogin": "[ параметры ('sqlAdminUserName')]", "administratorLoginPassword": "[параметры ('sqlAdminUserPassword')]" }, "resources": [ { "type": "database "," apiVersion ":" 2.0 "," location ": "[параметры ('местоположение')]", "имя": "[параметры ('имя_базы_данных')]", "зависящий от": [ "[concat('Microsoft.Sql/servers/', параметры ('sqlServerName'))]" ], "properties": { "edition": "Standard", "collation": "SQL_Latin1_General_CP1_CI_AS", "maxSizeBytes": "10737418240", "requiredServiceObjectiveId": "f1173c43-91bd-4aaa-973c-54e79e15235b", "createMode": "Copy", ====> "sourceDatabaseId": "[resourceId('Microsoft.Sql/servers/database', 'TestDB')]" } } ] } ] }
2 ответа
Я наткнулся на решение в совершенно не связанной статье, но вы должны пропустить
[resourceId('Microsoft.SQL/servers/databases', parameters('sqlServerName'), 'TestDB')]
Я заметил, что ваши значения apiVersion не отформатированы должным образом. Azure использует значения даты для API.
Попробуйте использовать значение, как в примерах файлов:
"apiVersion": "2014-04-01-preview"