Partilhar via


Saídas nos modelos ARM

Este artigo descreve como definir valores de saída no seu modelo do Azure Resource Manager (modelo ARM). Você usa saídas quando precisa retornar valores dos recursos implantados.

O formato de cada valor de saída deve ser resolvido para um dos tipos de dados.

Sugestão

Bicep é recomendado, pois oferece as mesmas capacidades que os modelos ARM e tem uma sintaxe mais fácil de usar. Para saber mais, consulte Saídas.

Você está limitado a 64 saídas em um modelo. Para obter mais informações, consulte limites de modelo.

Definir valores de saída

O exemplo a seguir mostra como retornar uma propriedade de um recurso implantado. Adicione a seção de saídas ao modelo. O valor de saída obtém o nome de domínio totalmente qualificado para um endereço IP público:

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

Se você precisar gerar uma propriedade que tenha um hífen no nome, use colchetes ao redor do nome em vez de notação de ponto. Por exemplo, use ['property-name'] em vez 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']]"
    }
  }
}

Saída condicional

Você pode usar o condition elemento para retornar condicionalmente um valor. Normalmente, você usa uma saída condicional quando implanta condicionalmente um recurso. O exemplo a seguir mostra como retornar condicionalmente a ID do recurso para um endereço IP público com base em se um novo foi implantado:

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

Para obter um exemplo simples de saída condicional, consulte Modelo de saída condicional.

Número dinâmico de saídas

Em alguns cenários, você não sabe o número de instâncias de um valor que precisa retornar ao criar o modelo. Você pode retornar um número variável de valores usando a saída iterativa. Adicione o elemento copy para iterar uma saída:

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

Para obter mais informações, consulte iteração de saída em modelos ARM.

Modelos ligados

Você pode implantar modelos relacionados usando modelos vinculados. Para recuperar o valor de saída de um modelo vinculado, use a reference função no modelo pai. A sintaxe no modelo pai é:

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

O exemplo a seguir mostra como definir o endereço IP em um balanceador de carga recuperando um valor de um modelo vinculado:

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

Se o nome da propriedade tiver um hífen, use colchetes ao redor do nome em vez de notação de ponto.

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

Não é possível usar a reference função na seção de saídas de um modelo aninhado. Para retornar os valores de um recurso implantado em um modelo aninhado, converta seu modelo aninhado em um modelo vinculado.

Modelo de exemplo

O modelo a seguir não implanta nenhum recurso. Ele mostra algumas maneiras de retornar saídas de diferentes tipos:

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

Obter valores de saída

Quando a implantação é bem-sucedida, os valores de saída são retornados automaticamente nos resultados da implantação.

Para obter valores de saída do histórico de implantação, você pode usar script.

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

Classificar objetos em saídas

Em JSON, um objeto é uma coleção não ordenada de zero ou mais pares chave/valor. A ordenação pode ser diferente dependendo das implementações. Por exemplo, a função Bicep items() classifica os objetos na ordem alfabética. Em outros lugares, o pedido original pode ser preservado. Devido a esse não-determinismo, evite fazer suposições sobre a ordenação de chaves de objeto ao escrever código, que interage com parâmetros de implantação e saídas.

Próximos passos

Para saber mais sobre as propriedades disponíveis para saídas, consulte a estrutura e a sintaxe dos modelos ARM.