Output nei modelli di Resource Manager

Questo articolo descrive come definire i valori di output nel modello di Azure Resource Manager .This article describe how to define output values in your Azure Resource Manager template (ARM template). Gli output vengono usati quando è necessario restituire valori dalle risorse distribuite.

Il formato di ogni valore di output deve essere risolto in uno dei tipi di dati.

Suggerimento

È consigliabile usare Bicep perché offre le stesse funzionalità dei modelli arm e la sintassi è più facile da usare. Per altre informazioni, vedere output.

Sono limitati a 64 output in un modello. Per altre informazioni, vedere Limiti dei modelli.

Definire i valori di output

Nell'esempio seguente viene illustrato come restituire una proprietà da una risorsa distribuita.

Aggiungere la outputs sezione al modello. Il valore di output ottiene il nome di dominio completo per un indirizzo IP pubblico.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
  },
}

Se è necessario restituire una proprietà con un trattino nel nome, usare le parentesi quadre intorno al nome anziché la notazione punto. Usare, ad esempio, ['property-name'] invece di .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']]"
    }
  }
}

Output condizionale

È possibile usare l'elemento condition per restituire in modo condizionale un valore. In genere, si usa un output condizionale quando è stata distribuita una risorsa in modo condizionale. Nell'esempio seguente viene illustrato come restituire in modo condizionale l'ID risorsa per un indirizzo IP pubblico in base al fatto che ne sia stato distribuito uno nuovo:

"outputs": {
  "resourceID": {
    "condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

Per un semplice esempio di output condizionale, vedere modello di output condizionale.

Numero dinamico di output

In alcuni scenari non si conosce il numero di istanze di un valore che è necessario restituire durante la creazione del modello. È possibile restituire un numero variabile di valori usando l'output iterativo. Aggiungere l'elemento copy per scorrere un output.

"outputs": {
  "storageEndpoints": {
    "type": "array",
    "copy": {
      "count": "[parameters('storageCount')]",
      "input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
    }
  }
}

Per altre informazioni, vedere Iterazione di output nei modelli di Resource Manager.

Modelli collegati

È possibile distribuire modelli correlati usando i modelli collegati. Per recuperare il valore di output da un modello collegato, usare la funzione di riferimento nel modello padre. La sintassi nel modello padre è:

"[reference('<deploymentName>').outputs.<propertyName>.value]"

Nell'esempio seguente viene illustrato come impostare l'indirizzo IP in un servizio di bilanciamento del carico recuperando un valore da un modello collegato.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs.resourceID.value]"
}

Se il nome della proprietà ha un trattino, usare parentesi quadre intorno al nome anziché alla notazione punto.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}

Non è possibile usare la funzione reference nella sezione outputs di un modello annidato. Per restituire i valori per una risorsa distribuita in un modello annidato, convertire il modello annidato in un modello collegato.

Il modello Indirizzo IP pubblico crea un indirizzo IP pubblico e restituisce l'ID risorsa. Il modello di bilanciamento del carico è collegato al modello precedente. Usa l'ID risorsa nell'output durante la creazione del servizio di bilanciamento del carico.

Modello di esempio

Il modello seguente non distribuisce alcuna risorsa. Illustra alcuni modi per restituire output di tipi diversi.

{
  "$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()]"
    }
  }
}

Ottenere i valori di output

Quando la distribuzione ha esito positivo, i valori di output vengono restituiti automaticamente nei risultati della distribuzione.

Per ottenere i valori di output dalla cronologia di distribuzione, è possibile usare lo script.

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

Ordinamento degli oggetti negli output

In JSON un oggetto è una raccolta non ordinata di zero o più coppie chiave/valore. L'ordinamento può essere diverso a seconda delle implementazioni. Ad esempio, la funzione Bicep items() ordina gli oggetti nell'ordine alfabetico. In altre posizioni, l'ordinamento originale può essere mantenuto. A causa di questo non determinismo, evitare di fare ipotesi sull'ordinamento delle chiavi oggetto durante la scrittura di codice, che interagisce con i parametri e gli output delle distribuzioni.

Passaggi successivi