Compartilhar via


Saídas em modelos do ARM

Este artigo descreve como definir os valores de saída no modelo do ARM (Azure Resource Manager). 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.

Dica

Recomendamos o Bicep porque ele oferece as mesmas funcionalidades que os modelos do ARM e a sintaxe é mais fácil de usar. Para saber mais, confira saídas.

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

Definir os valores de saída

O exemplo a seguir mostra como retornar uma propriedade de um recurso implantado.

Adicione a seção outputs 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 da notação de ponto. Por exemplo, use ['property-name'] ao invés 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 elemento condition para retornar condicionalmente um valor. Normalmente, você usa uma saída condicional quando implementa condicionalmente um recurso. O exemplo a seguir mostra como retornar condicionalmente o ID do recurso para um endereço IP público com base na implantação de um novo:

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

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

Número dinâmico de saídas

Em alguns cenários, não é possível saber 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 vinculados

É possível implantar modelos relacionados usando modelos vinculados. Para recuperar o valor de saída de um modelo vinculado, use a função de referência 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.

O modelo de endereço IP público cria um endereço IP público e gera a ID do recurso. O modelo de balanceador de carga vincula ao modelo anterior. Ele usa a ID do recurso na saída ao criar o balanceador de carga.

Modelo de exemplo

O modelo a seguir não implanta recursos. Ele mostra algumas maneiras de retornar saídas 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()]"
    }
  }
}

Obter valores de saída

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

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

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

Classificação de objeto em saídas

No 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 items() do Bicep classifica os objetos na ordem alfabética. Em outros locais, a ordenação original pode ser preservada. Devido a esse não determinismo, evite fazer suposições sobre a ordem das chaves de objeto ao escrever códigos que interagem com parâmetros e saídas de implantações.

Próximas etapas