Fonctions définies par l'utilisateur dans un modèle Azure Resource Manager
Dans votre modèle, vous pouvez créer vos propres fonctions. Ces fonctions peuvent être utilisées dans votre modèle. Les fonctions définies par l’utilisateur sont distinctes des fonctions de modèles standard qui sont automatiquement disponibles dans votre modèle. Créez vos propres fonctions quand vous avez des expressions complexes qui sont utilisées de manière répétitive dans votre modèle.
Cet article vous explique comment ajouter des fonctions définies par l'utilisateur dans votre modèle Azure Resource Manager.
Définir la fonction
Vos fonctions requièrent une valeur pour l’espace de noms afin d’éviter tout conflit avec les fonctions de modèle. L'exemple suivant illustre une fonction qui renvoie un nom unique :
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
Utiliser la fonction
L’exemple suivant montre un modèle qui comprend une fonction définie par l’utilisateur pour obtenir un nom unique pour un compte de stockage. Le modèle comprend un paramètre storageNamePrefix
qu’il transmet à la fonction sous forme de paramètre.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageNamePrefix": {
"type": "string",
"maxLength": 11
}
},
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[contoso.uniqueName(parameters('storageNamePrefix'))]",
"location": "South Central US",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
Pendant le déploiement, le paramètre storageNamePrefix
est transmis à la fonction :
- Le modèle définit un paramètre
storageNamePrefix
. - La fonction utilise
namePrefix
parce que vous ne pouvez utiliser que des paramètres définis dans la fonction. Pour plus d’informations, consultez Limitations. - Dans la section
resources
du modèle, l’élémentname
utilise la fonction et transmet la valeurstorageNamePrefix
au paramètrenamePrefix
de la fonction.
Limites
La définition d’une fonction utilisateur est soumise à certaines restrictions :
- La fonction ne peut pas accéder aux variables.
- La fonction ne peut utiliser que des paramètres définis dans l’autre fonction. Quand vous utilisez la fonction parameters dans une fonction définie par l’utilisateur, vous êtes limité aux paramètres de cette fonction.
- La fonction ne peut pas appeler d’autres fonctions définies par l’utilisateur.
- La fonction ne peut pas utiliser la fonction reference ni aucune des fonctions list.
- Les paramètres de la fonction ne peuvent pas avoir de valeur par défaut.
Étapes suivantes
- Pour en savoir plus sur les propriétés disponibles pour les fonctions définies par l'utilisateur, consultez Comprendre la structure et la syntaxe des modèles Azure Resource Manager.
- Pour obtenir la liste des fonctions de modèle disponibles, consultez Fonctions de modèle Azure Resource Manager.