Azure Resource Manager şablonundaki bir kaynağı güncelleştirme
Dağıtım sırasında bir kaynağı güncelleştirmeniz gereken zamanlar olabilir. Örneğin, diğer bağımlı kaynaklar oluşturulana kadar kaynağın tüm özelliklerini belirtemezsiniz. Örneğin, yük dengeleyici için bir arka uç havuzu oluşturursanız, sanal makinelerinizdeki (VM'ler) ağ arabirimlerini (NIC) arka uç havuzuna dahil etmek üzere güncelleştirebilirsiniz. Resource Manager dağıtım sırasında kaynakların güncelleştirilmesini destekler, ancak hataları önlemek ve dağıtımın bir güncelleştirme olarak işlendiğinden emin olmak için şablonunuzu doğru tasarlamanız gerekir.
Bir kaynak oluşturup daha sonra güncelleştirdiğinizde iki kez başvurursunuz. İlk olarak şablonu oluşturan şablona başvurursunuz. Daha sonra, kaynağı güncelleştirdiğinizde, kaynağa aynı adla başvurursunuz. Ancak, bir şablonda iki kaynak aynı ada sahipse Resource Manager bir özel durum oluşturur. Bu hatayı önlemek için, güncelleştirilmiş kaynağı bağlı veya kaynak türünü kullanan bir alt şablon olarak eklenen ikinci bir şablonda Microsoft.Resources/deployments
belirtin.
İkinci şablonda, değiştireceğiniz özelliğin adını veya eklenecek özellik için yeni bir ad belirtmeniz gerekir. Ayrıca, değişmeyen özelliklerin adlarını ve özgün değerlerini de belirtmelisiniz. Özgün özelliklerden birini veya daha fazlasını belirtemezseniz, Resource Manager yeni bir kaynak oluşturmak istediğinizi varsayar ve özgün kaynağı siler.
Örnek şablon
Şimdi tekniği gösteren örnek bir şablona bakalım. Şablon, adlı firstVNet
bir alt firstSubnet
ağa sahip adlı bir sanal ağ dağıtır. Ardından adlı nic1
bir sanal ağ arabirimi (NIC) dağıtır ve NIC'yi alt ağ ile ilişkilendirir. adlı dağıtım kaynağı, adlı updateVNet
secondSubnet
ikinci bir alt ağ ekleyerek güncelleştirilen firstVNet
iç içe bir şablon içerir.
{
"$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": {}
}
Kaynağımız firstVNet
için kaynak nesnesini göz önünde bulundurun. İç içe yerleştirilmiş bir şablondaki ayarları yeniden belirttiğimize firstVNet
dikkat edin; bunun nedeni, Resource Manager aynı şablonda aynı dağıtım adına izin vermemesi ve iç içe yerleştirilmiş şablonların farklı bir şablon olarak kabul edilmesidir. Kaynağımız firstSubnet
için değerlerimizi yeniden belirterek, Resource Manager mevcut kaynağı silip yeniden dağıtmak yerine güncelleştirmesini söyleriz. Son olarak, için yeni ayarlarımız secondSubnet
bu güncelleştirme sırasında alınır.
Şablonu deneyin
GitHub'da örnek bir şablon mevcuttur. Şablonu dağıtmak için aşağıdaki Azure CLI komutlarını çalıştırın:
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
Dağıtım tamamlandıktan sonra portalda belirttiğiniz kaynak grubunu açın. adlı bir sanal ağ ve adlı firstVNet
nic1
bir NIC görürsünüz. öğesine ve firstVNet
ardından öğesine tıklayın subnets
. Başlangıçta oluşturulan öğesini firstSubnet
ve kaynağa eklenmiş olanını secondSubnet
updateVNet
görürsünüz.
Ardından, kaynak grubuna geri dönün ve öğesine tıklayın nic1
ve ardından öğesine tıklayın IP configurations
.
IP configurations
bölümünde, subnet
olarak ayarlanırfirstSubnet (10.0.0.0/24)
.
Özgün firstVNet
dosya yeniden oluşturulmak yerine güncelleştirildi. Yeniden oluşturulmuş olsaydı firstVNet
, nic1
ile firstVNet
ilişkilendirilmezdi.
Sonraki adımlar
- Azure Resource Manager
- ARM şablonları nelerdir?
- Öğretici: İlk ARM şablonunuzu oluşturma ve dağıtma
- Öğretici: ARM şablonunuza kaynak ekleme
- ARM şablonu en iyi yöntemleri
- Azure Resource Manager belgeleri
- ARM şablonu belgeleri