Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment définir des valeurs de sortie dans votre modèle Azure Resource Manager (modèle ARM). Vous utilisez des sorties quand vous devez retourner des valeurs à partir des ressources déployées.
Le format de chaque valeur de sortie doit être résolu en un des types de données.
Conseil / Astuce
Nous recommandons Bicep, parce qu’il offre les mêmes fonctionnalités que les modèles ARM et que la syntaxe est plus facile d’utilisation. Pour en savoir plus, consultez les sorties.
Vous êtes limité à 64 sorties dans un modèle. Pour plus d’informations, consultez Limites du modèle.
Définir des valeurs de sortie
L’exemple suivant montre comment renvoyer une propriété à partir d’une ressource déployée.
Ajoutez la outputs
section au modèle. La valeur de sortie obtient le nom de domaine complet pour une adresse IP publique.
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Si vous avez besoin de générer une propriété dont le nom comporte un trait d’union, utilisez des crochets autour du nom au lieu de la notation par points. Par exemple, utilisez ['property-name']
au lieu de .property-name
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"user": {
"user-name": "Test Person"
}
},
"resources": [
],
"outputs": {
"nameResult": {
"type": "string",
"value": "[variables('user')['user-name']]"
}
}
}
Sortie conditionnelle
Vous pouvez utiliser l’élément condition
pour retourner conditionnellement une valeur. En général, vous utilisez une sortie conditionnelle quand vous avez déployé de manière conditionnelle une ressource. L’exemple suivant montre comment retourner de manière conditionnelle l’ID de ressource pour une adresse IP publique en fonction du déploiement d’une nouvelle adresse :
"outputs": {
"resourceID": {
"condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
"type": "string",
"value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
}
}
Pour obtenir un exemple simple de sortie conditionnelle, consultez le modèle de sortie conditionnelle.
Nombre dynamique de sorties
Dans certains scénarios, vous ne connaissez pas le nombre d’instances d’une valeur que vous devez retourner lors de la création du modèle. Vous pouvez retourner un nombre variable de valeurs à l’aide d’une sortie itérative. Ajoutez l’élément copy
pour itérer une sortie.
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
Pour plus d’informations, voir Itération de sorties dans des modèles ARM.
Modèles liés
Vous pouvez déployer des modèles associés à l’aide de modèles liés. Pour récupérer la valeur de sortie d’un modèle lié, utilisez la fonction de référence dans le modèle parent. La syntaxe dans le modèle parent est la suivante :
"[reference('<deploymentName>').outputs.<propertyName>.value]"
L’exemple suivant montre comment définir l’adresse IP sur un équilibreur de charge en récupérant une valeur à partir d’un modèle lié.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs.resourceID.value]"
}
Si le nom de la propriété a un trait d’union, utilisez des crochets autour du nom au lieu de la notation par points.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}
Vous ne pouvez pas utiliser la reference
fonction dans la section sorties d’un modèle imbriqué. Pour retourner les valeurs d’une ressource déployée dans un modèle imbriqué, convertissez votre modèle imbriqué en modèle lié.
Le modèle d’adresse IP publique crée une adresse IP publique et génère l’ID de ressource. Le modèle d’équilibreur de charge est lié au modèle précédent. Il utilise l’ID de ressource dans la sortie lors de la création de l’équilibreur de charge.
Exemple de modèle
Le modèle suivant ne déploie aucune ressource. Il montre certaines façons de retourner des résultats de types variés.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"stringOutput": {
"type": "string",
"value": "[deployment().name]"
},
"integerOutput": {
"type": "int",
"value": "[length(environment().authentication.audiences)]"
},
"booleanOutput": {
"type": "bool",
"value": "[contains(deployment().name, 'demo')]"
},
"arrayOutput": {
"type": "array",
"value": "[environment().authentication.audiences]"
},
"objectOutput": {
"type": "object",
"value": "[subscription()]"
}
}
}
Obtenir des valeurs de sortie
Une fois le déploiement terminé, les valeurs de sortie sont automatiquement retournées dans les résultats du déploiement.
Pour obtenir des valeurs de sortie à partir de l’historique de déploiement, vous pouvez utiliser un script.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Tri d’objets dans les sorties
Dans JSON, un objet est une collection non ordonnée de zéro ou plus paires clé/valeur. L’ordre peut être différent selon les implémentations. Par exemple, la fonction Bicep items() trie les objets par ordre alphabétique. Dans d’autres endroits, l’ordre d’origine peut être conservé. En raison de ce non-déterminisme, évitez de faire des hypothèses sur l’ordre des clés des objets lors de l’écriture du code, ce qui interagit avec les paramètres et les sorties des déploiements.
Étapes suivantes
- Pour en savoir plus sur les propriétés disponibles pour les sorties, consultez Comprendre la structure et la syntaxe des modèles ARM.