Compartir a través de


Resultados en plantillas de ARM

En este artículo se describe cómo definir valores de salida en la 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 en uno de los tipos de datos.

Sugerencia

Se recomienda Bicep , ya que ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para 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 salidas 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, usa ['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 condition elemento 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 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 obtener más información, consulte 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 primaria es:

"[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.

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 los valores de salida del historial de implementación, puede usar el script.

(Get-AzResourceGroupDeployment `
  -ResourceGroupName <resource-group-name> `
  -Name <deployment-name>).Outputs.resourceID.value

Ordenar 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 las salidas de parámetros de implementación &.

Pasos siguientes

Para obtener información sobre las propiedades disponibles para salidas, consulte Estructura y sintaxis de las plantillas de ARM.