Comment appelez-vous correctement la fonction resourceId() définie dans le Azure Resource Manager Template Language?
/// - 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
///
Cette ligne dans le modèle (voir modèle ci-dessous complet)
"sourceDatabaseId": "[resourceId('Microsoft.Sql/servers/databases', 'TestDB')]"
donne cette erreur lors de l'exécution du PowerShell New-AzureResourceGroup CmdLet:
PS c:\AzureDeployment> New-AzureResourceGroup -Location "North Europe" -Name "psResourceGroup" -DeploymentName "psDeployment" -TemplateFile .\Template.json -TemplateParameterFile .\Parameters.json -Verbose cmdlet New-AzureResourceGroup at command pipeline position 1 Supply values for the following parameters: (Type !? for Help.) VERBOSE: Performing the operation "Replacing resource group ..." on target "psDeployment". VERBOSE: 16:22:07 - Created resource group 'psResourceGroup' in location 'northeurope' New-AzureResourceGroup : 16:22:08 - Resource Microsoft.Sql/servers/databases 'xxx-sql-server-name-xxx/psDatabaseName' failed with message 'Unable to process template language expressions for resource '/subscriptions/xxxxxxxx/resourceGroups/psResourceGroup/providers/Microsoft.Sql/servers/xxx-sql-server-name-xxx/databases/psDatabaseName' at line _ and column _. 'Unable to evaluate template language function 'resource Id': the type 'Microsoft.Sql/servers/databases' requires '2' resource name argument(s).'' At line:1 char:1 + New-AzureResourceGroup -Location "North Europe" -Name "psResourceGroup" -Templat ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [ New-AzureResourceGroup ], Exception + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupCommand
La fonction resourceId()
a, selon les documentation, deux paramètres, et je l'appelle avec deux chaînes constantes que je Beleve est correct:
resourceId('Microsoft.Sql/servers/databases', 'TestDB')
Encore il produit un message d'erreur indiquant que le nombre de paramètres est faux:
'Unable to evaluate template language function 'resource Id': the type 'Microsoft.Sql/servers/databases' requires '2' resource name argument(s).'
La ressource utilisée, selon le message d'erreur est: '/subscriptions/xxxxxxxx/resourceGroups/psResourceGroup/providers/Microsoft.Sql/servers/xxx-sql-server-name-xxx/databases/psDatabaseName'
Alors, quelle est la bonne façon d'appeler resourceId() pour une base de données?
En outre, si je supprime createMode et sourceDatabaseId du modèle, tout fonctionne correctement.
C'est le modèle utilisé ci-dessus
{ "$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", "allowedValues": [ "East Asia", "South East Asia", "East US", "West US", "North Central US", "South Central US", "Central US", "North Europe", "West Europe" ] }, "sqlServerName": { "type": "string" }, "sqlAdminUserName": { "type": "string" }, "sqlAdminUserPassword": { "type": "securestring" }, "databaseName": { "type": "string" } }, "resources": [ { "type": "Microsoft.Sql/servers", "apiVersion": "2.0", "location": "[parameters('location')]", "name": "[parameters('sqlServerName')]", "properties": { "administratorLogin": "[parameters('sqlAdminUserName')]", "administratorLoginPassword": "[parameters('sqlAdminUserPassword')]" }, "resources": [ { "type": "databases", "apiVersion": "2.0", "location": "[parameters('location')]", "name": "[parameters('databaseName')]", "dependsOn": [ "[concat('Microsoft.Sql/servers/', parameters('sqlServerName'))]" ], "properties": { "edition": "Standard", "collation": "SQL_Latin1_General_CP1_CI_AS", "maxSizeBytes": "10737418240", "requestedServiceObjectiveId": "f1173c43-91bd-4aaa-973c-54e79e15235b", "createMode": "Copy", ====> "sourceDatabaseId": "[resourceId('Microsoft.Sql/servers/databases', 'TestDB')]" } } ] } ] }
Comme je l'ai dit, tout fonctionne très bien si je supprime createMode et databaseId. Et si vous regardez les modèles de Microsofts, vous pouvez voir qu'ils utilisent également la version 2.0 comme 'Save-AzureResourceGroupGalleryTemplate Microsoft.WebSiteSQLDatabase.0.3.12-preview' Mais vous avez raison car souvent apiVersion est une chaîne de date .Mais comme vous pouvez le voir si vous exécutez 'Get-AzureProvider | Format-Custom -depth 2' l'apiVersion est absent de Microsoft.Sql/... Donc l'apiVersion est correcte et pas le problème. – NoOneSpecial