Memperbarui sumber daya di template Azure Resource Manager
Mungkin ada kalanya Anda perlu memperbarui sumber daya selama penyebaran, seperti ketika Anda tidak dapat menentukan semua properti untuk sumber daya hingga sumber daya dependen lainnya dibuat. Misalnya, jika Anda membuat kumpulan backend untuk load balancer, Anda dapat memperbarui antarmuka jaringan (NIC) pada mesin virtual (VM) Anda untuk menyertakannya ke dalam kumpulan backend. Resource Manager mendukung pembaruan sumber daya selama penyebaran, tetapi Anda harus merancang templat dengan benar untuk menghindari kesalahan dan memastikan bahwa penyebaran ditangani sebagai pembaruan.
Saat Anda membuat sumber daya dan memperbaruinya nanti, Anda mereferensikannya dua kali. Anda mereferensikannya terlebih dahulu dalam templat yang membuatnya. Kemudian, saat memperbarui sumber daya, Anda mereferensikannya dengan nama yang sama. Namun, jika dua sumber daya memiliki nama yang sama di templat, Resource Manager akan mengeluarkan pengecualian. Untuk menghindari kesalahan ini, tentukan sumber daya yang diperbarui dalam templat kedua yang ditautkan atau disertakan sebagai subteks Microsoft.Resources/deployments
yang menggunakan jenis sumber daya.
Di templat kedua, Anda harus menentukan nama properti untuk diubah atau nama baru untuk properti yang akan ditambahkan. Anda juga harus menentukan nama dan nilai asli properti yang tidak berubah. Jika Anda gagal menentukan satu atau beberapa properti asli, Resource Manager mengasumsikan bahwa Anda ingin membuat sumber daya baru dan menghapus yang asli.
Contoh templat
Mari kita lihat contoh templat yang menunjukkan teknik. Templat menyebarkan jaringan virtual bernama firstVNet
yang memiliki satu subnet bernama firstSubnet
. Kemudian menyebarkan antarmuka jaringan virtual (NIC) bernama nic1
dan mengaitkan NIC dengan subnet. Sumber daya penyebaran bernama updateVNet
menyertakan templat berlapis yang diperbarui firstVNet
dengan menambahkan subnet kedua bernama secondSubnet
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"apiVersion": "2020-05-01",
"name": "firstVNet",
"location": "[resourceGroup().location]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/22"
]
},
"subnets": [
{
"name": "firstSubnet",
"properties": {
"addressPrefix": "10.0.0.0/24"
}
}
]
}
},
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/networkInterfaces",
"name": "nic1",
"location": "[resourceGroup().location]",
"dependsOn": [
"firstVNet"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'firstVNet', 'firstSubnet')]"
}
}
}
]
}
},
{
"apiVersion": "2020-06-01",
"type": "Microsoft.Resources/deployments",
"name": "updateVNet",
"dependsOn": [
"nic1"
],
"properties": {
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {},
"variables": {},
"resources": [
{
"apiVersion": "2020-05-01",
"name": "firstVNet",
"location": "[resourceGroup().location]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": "[reference('firstVNet').addressSpace]",
"subnets": [
{
"name": "[reference('firstVNet').subnets[0].name]",
"properties": {
"addressPrefix": "[reference('firstVNet').subnets[0].properties.addressPrefix]"
}
},
{
"name": "secondSubnet",
"properties": {
"addressPrefix": "10.0.1.0/24"
}
}
]
}
}
],
"outputs": {}
}
}
}
],
"outputs": {}
}
Pertimbangkan objek sumber daya untuk sumber daya kita firstVNet
. Perhatikan bahwa kami menentukan lagi pengaturan untuk kami firstVNet
dalam templat berlapis—ini karena Resource Manager tidak mengizinkan nama penyebaran yang sama dalam templat yang sama, dan templat berlapis dianggap sebagai templat yang berbeda. Dengan sekali lagi menentukan nilai untuk sumber daya, firstSubnet
kami memberi tahu Resource Manager untuk memperbarui sumber daya yang ada alih-alih menghapusnya dan menyebarkannya kembali. Yang terakhir, setelan baru kita untuk secondSubnet
diambil selama pembaruan ini.
Coba templatenya
Contoh template tersedia di GitHub. Untuk menerapkan templat, jalankan perintah Azure CLI berikut:
az group create --location <location> --name <resource-group-name>
az deployment group create -g <resource-group-name> \
--template-uri https://raw.githubusercontent.com/mspnp/template-examples/master/example1-update/deploy.json
Setelah penyebaran selesai, buka grup sumber daya yang Anda tentukan di portal. Anda akan melihat jaringan virtual bernama firstVNet
dan NIC bernama nic1
. Klik firstVNet
, lalu klik subnets
. Anda akan melihat firstSubnet
yang awalnya dibuat, dan Anda akan melihat secondSubnet
yang ditambahkan di sumber daya updateVNet
.
Kemudian, kembali ke grup sumber daya dan klik nic1
, lalu klik IP configurations
. Di bagian IP configurations
, subnet
disetel ke firstSubnet (10.0.0.0/24)
.
firstVNet
Aslinya diperbarui alih-alih dibuat ulang. Jika firstVNet
telah dibuat ulang, nic1
tidak akan dikaitkan dengan firstVNet
.
Langkah berikutnya
- Azure Resource Manager
- Apa itu templat ARM?
- Tutorial: Membuat dan menyebarkan templat ARM pertama Anda
- Tutorial: Menambahkan sumber daya ke templat ARM Anda
- Praktik terbaik templat ARM
- Dokumentasi Azure Resource Manager
- Dokumentasi templat ARM