Bagikan melalui


Output dalam templat ARM

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

Format setiap nilai output harus diselesaikan ke salah satu jenis data.

Petunjuk / Saran

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

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

Tentukan nilai output

Contoh berikut menunjukkan cara mengembalikan 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 condition elemen untuk mengembalikan nilai secara kondisional. Biasanya, Anda menggunakan output kondisional saat Anda menyebarkan secara kondisional sebuah sumber daya. Contoh berikut menunjukkan cara mengembalikan ID sumber daya secara kondisional untuk alamat IP publik berdasarkan apakah yang baru disebarkan:

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

Untuk contoh sederhana keluaran kondisional, lihat template keluaran bersyarat.

Jumlah output dinamis

Dalam beberapa skenario, Anda tidak tahu jumlah instans nilai yang perlu Anda kembalikan saat membuat templat. Anda dapat mengembalikan jumlah variabel nilai dengan menggunakan output berulang. copy Tambahkan elemen untuk melakukan 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 tertaut. Untuk mengambil nilai output dari templat tertaut, gunakan fungsi referensi di templat induk. Sintaks dalam templat induk adalah:

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

Contoh berikut menunjukkan cara mengatur alamat IP pada load balancer dengan mengambil nilai dari templat tertaut.

"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 fungsi reference di bagian keluaran dari templat berlapis. Untuk mengembalikan nilai untuk sumber daya yang disebarkan dalam templat berlapis, konversikan templat berlapis Anda ke templat tertaut.

Templat alamat IP Publik membuat alamat IP publik dan menghasilkan ID sumber daya. Templat Load balancer menautkan ke templat sebelumnya. Ini menggunakan ID sumber daya dalam output saat membuat load balancer.

Contoh templat

Templat berikut ini tidak menyebarkan sumber daya apa pun. Ini menunjukkan beberapa cara mengembalikan output dari berbagai jenis.

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

Dapatkan nilai output

Ketika penyebaran berhasil, nilai output secara otomatis dikembalikan 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 selanjutnya