Output dalam ARM templat

Artikel ini menjelaskan cara menentukan nilai output dalam templat Azure Resource Manager (templat ARM). Anda menggunakan output saat Anda perlu menampilkan nilai dari sumber daya yang disebarkan.

Format setiap nilai output harus sesuai dengan salah satu jenis data.

Tip

Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat output.

Anda dibatasi hingga 64 output dalam templat. Untuk informasi selengkapnya, lihat Batas templat.

Menentukan nilai output

Contoh berikut menunjukkan cara menampilkan properti dari sumber daya yang disebarkan.

Tambahkan bagian outputs ke templat. Nilai output mendapatkan nama domain yang sepenuhnya memenuhi syarat untuk alamat IP publik.

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

Jika Anda perlu mengeluarkan properti yang memiliki tanda hubung dalam nama, gunakan tanda kurung di sekitar nama, bukan notasi titik. Misalnya, gunakan ['property-name'], bukan .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 kondisional

Anda dapat menggunakan elemen condition untuk mengembalikan nilai secara kondisional. Biasanya, Anda menggunakan output kondisional saat Anda menyebarkan secara kondisional sebuah sumber daya. Contoh berikut menunjukkan cara menampilkan ID sumber daya secara kondisional untuk alamat IP publik berdasarkan apakah ID sumber daya yang baru sudah disebarkan:

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

Untuk contoh sederhana output kondisional, lihat templat output kondisional.

Jumlah output dinamis

Dalam beberapa skenario, Anda tidak tahu jumlah instans nilai yang perlu Anda tampilkan saat membuat templat. Anda dapat menampilkan jumlah nilai variabel dengan menggunakan output iteratif. Tambahkan elemen copy untuk iterasi output.

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

Untuk informasi selengkapnya, lihat Perulangan output di dalam templat ARM.

Templat yang ditautkan

Anda dapat menyebarkan templat terkait dengan menggunakan templat yang ditautkan. Untuk mengambil nilai output dari templat yang ditautkan, gunakan fungsi referensi di templat induk. Sintaks dalam templat induk adalah:

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

Contoh berikut menunjukkan cara mengatur alamat IP pada penyeimbang muatan dengan mengambil nilai dari templat yang ditautkan.

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

Jika nama properti memiliki tanda hubung, gunakan tanda kurung siku di sekitar nama, bukan notasi titik.

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

Anda tidak dapat menggunakan reference fungsi di bagian output dari templat bertingkat. Untuk menampilkan nilai untuk sumber daya yang disebarkan dalam templat bertingkat, konversi templat bertingkat menjadi templat yang ditautkan.

Templat alamat IP Publik membuat alamat IP publik dan menghasilkan ID sumber daya. Templat penyeimbang muatan tertaut ke templat sebelumnya. Ia menggunakan ID sumber daya dalam output saat membuat penyeimbang muatan.

Contoh templat

Templat berikut tidak menyebarkan sumber daya apa pun. Ia menunjukkan beberapa cara menampilkan berbagai jenis output.

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

Mendapatkan nilai output

Saat penyebaran berhasil, nilai output akan ditampilkan secara otomatis dalam hasil penyebaran.

Untuk mendapatkan nilai output dari riwayat penyebaran, Anda dapat menggunakan skrip.

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

Pengurutan objek dalam output

Di JSON, objek adalah kumpulan pasangan kunci/nilai nol atau lebih yang tidak diurutkan. Pengurutan dapat berbeda bergantung pada implementasinya. Misalnya, fungsi item() Bicep mengurutkan objek dalam urutan abjad. Di tempat lain, pengurutan asli dapat dipertahankan. Karena non-determinisme ini, hindari membuat asumsi tentang pengurutan kunci objek saat menulis kode, yang berinteraksi dengan parameter penyebaran &output.

Langkah berikutnya