Utdata i ARM-mallar

Den här artikeln beskriver hur du definierar utdatavärden i din Azure Resource Manager-mall (ARM-mall). Du använder utdata när du behöver returnera värden från de distribuerade resurserna.

Formatet för varje utdatavärde måste matcha till en av datatyperna.

Dricks

Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i utdata.

Du är begränsad till 64 utdata i en mall. Mer information finns i Mallgränser.

Definiera utdatavärden

I följande exempel visas hur du returnerar en egenskap från en distribuerad resurs.

Lägg till avsnittet outputs i mallen. Utdatavärdet hämtar det fullständigt kvalificerade domännamnet för en offentlig IP-adress.

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

Om du behöver mata ut en egenskap som har ett bindestreck i namnet använder du hakparenteser runt namnet i stället för punkt notation. Använd till exempel ['property-name'] i stället för .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']]"
    }
  }
}

Villkorsstyrda utdata

Du kan använda elementet condition för att villkorligt returnera ett värde. Vanligtvis använder du villkorsstyrda utdata när du har distribuerat en resurs villkorligt. I följande exempel visas hur du villkorligt returnerar resurs-ID:t för en offentlig IP-adress baserat på om en ny har distribuerats:

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

Ett enkelt exempel på villkorsstyrda utdata finns i mallen för villkorsstyrd utdata.

Dynamiskt antal utdata

I vissa scenarier vet du inte hur många instanser av ett värde du behöver returnera när du skapar mallen. Du kan returnera ett variabelt antal värden med hjälp av iterativa utdata. Lägg till elementet copy för att iterera utdata.

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

Mer information finns i Utdata-iteration i ARM-mallar.

Länkade mallar

Du kan distribuera relaterade mallar med hjälp av länkade mallar. Om du vill hämta utdatavärdet från en länkad mall använder du referensfunktionen i den överordnade mallen. Syntaxen i den överordnade mallen är:

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

I följande exempel visas hur du anger IP-adressen för en lastbalanserare genom att hämta ett värde från en länkad mall.

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

Om egenskapsnamnet har ett bindestreck använder du hakparenteser runt namnet i stället för punkt notation.

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

Du kan inte använda reference funktionen i utdataavsnittet i en kapslad mall. Om du vill returnera värdena för en distribuerad resurs i en kapslad mall konverterar du den kapslade mallen till en länkad mall.

Mallen offentlig IP-adress skapar en offentlig IP-adress och matar ut resurs-ID:t. Mallen Lastbalanserare länkar till föregående mall. Den använder resurs-ID:t i utdata när du skapar lastbalanseraren.

Exempelmall

Följande mall distribuerar inga resurser. Den visar några sätt att returnera utdata av olika typer.

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

Hämta utdatavärden

När distributionen lyckas returneras utdatavärdena automatiskt i resultatet av distributionen.

Om du vill hämta utdatavärden från distributionshistoriken kan du använda skript.

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

Objektsortering i utdata

I JSON är ett objekt en osorterad samling med noll eller fler nyckel/värde-par. Beställningen kan variera beroende på implementeringarna. Funktionen Bicep items() sorterar till exempel objekten i alfabetisk ordning. På andra ställen kan den ursprungliga ordningen bevaras. På grund av denna icke-determinism bör du undvika att göra några antaganden om ordningen på objektnycklar när du skriver kod, som interagerar med distributionsparametrar och utdata.

Nästa steg