Salidas en plantillas de ARM
En este artículo se describe cómo definir valores de salida en una plantilla de Azure Resource Manager (plantilla de ARM). Las salidas se usan cuando es necesario devolver valores de los recursos implementados.
El formato de cada valor de salida debe resolverse como uno de los tipos de datos.
Sugerencia
Se recomienda Bicep porque ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para obtener más información, consulte salidas.
Está limitado a 64 salidas en una plantilla. Para obtener más información, consulte Límites de plantilla.
Definición de valores de salida
En el ejemplo siguiente se muestra cómo devolver una propiedad desde un recurso implementado.
Agregue la sección outputs
a la plantilla. El valor de salida obtiene el nombre de dominio completo de una dirección IP pública.
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Si necesita generar una propiedad que tenga un guion en el nombre, use corchetes alrededor del nombre en lugar de la notación de puntos. Por ejemplo, use ['property-name']
en lugar 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']]"
}
}
}
Salida condicional
Puede usar el elemento condition
para devolver condicionalmente un valor. Por norma general, se usa una salida condicional cuando se implementa condicionalmente un recurso. En el ejemplo siguiente, se muestra cómo se devuelve condicionalmente el identificador de recurso de una dirección IP pública en función de si se ha implementado una nueva:
"outputs": {
"resourceID": {
"condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
"type": "string",
"value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
}
}
Para obtener un ejemplo sencillo de salida condicional, consulte la plantilla de salida condicional.
Número dinámico de salidas
En algunos escenarios, no se conoce el número de instancias de un valor que se debe devolver al crear la plantilla. Puede devolver un número variable de valores mediante la salida iterativa. Agregue el elemento copy
para iterar una salida.
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
Para más información, vea Iteración de salida en plantillas de ARM.
Plantillas vinculadas
Puede implementar plantillas relacionadas mediante plantillas vinculadas. Para recuperar el valor de salida de una plantilla vinculada, use la función reference en la plantilla principal. La sintaxis de la plantilla principal es la siguiente:
"[reference('<deploymentName>').outputs.<propertyName>.value]"
En el ejemplo siguiente, se muestra cómo establecer la dirección IP en un equilibrador de carga mediante la recuperación de un valor desde una plantilla vinculada.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs.resourceID.value]"
}
Si el nombre de la propiedad tiene un guion, use corchetes alrededor del nombre en lugar de la notación de puntos.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}
No se puede usar la función reference
en la sección de salidas de una plantilla anidada. Para devolver los valores de un recurso implementado en una plantilla anidada, convierta la plantilla anidada en una plantilla vinculada.
La Plantilla de dirección IP pública crea una dirección IP pública y genera el identificador del recurso. La Plantilla de equilibrador de carga se vincula a la plantilla anterior. Usa el identificador de recurso en la salida al crear el equilibrador de carga.
Plantilla de ejemplo
La plantilla siguiente no implementa ningún recurso. Muestra algunas formas de devolver salidas de tipos diferentes.
{
"$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()]"
}
}
}
Obtención de valores de salida
Cuando la implementación se realiza correctamente, los valores de salida se devuelven automáticamente en los resultados de la implementación.
Para obtener valores de salida del historial de implementación, puede usar un script.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Ordenación de objetos en salidas
En JSON, un objeto es una colección desordenada de cero o más pares clave-valor. El orden puede ser diferente en función de las implementaciones. Por ejemplo, la función Bicep items() ordena los objetos por orden alfabético. En otros lugares, se puede conservar la ordenación original. Debido a este no determinismo, evite realizar suposiciones sobre el orden de las claves de objeto al escribir código, que interactúa con los parámetros y salidas de implementación.
Pasos siguientes
- Para más información sobre las propiedades disponibles para salidas, consulte Nociones sobre la estructura y la sintaxis de las plantillas de Azure Resource Manager.