Azure İlkesi deseni: kaynakları dağıtma
deployIfNotExists etkisi, uyumlu olmayan bir kaynak oluştururken veya güncelleştirirken Azure Resource Manager şablonunun (ARM şablonu) dağıtılmasına olanak sağlar. Bu yaklaşım, kaynakların oluşturulmaya devam etmesini sağladığından reddetme etkisini kullanmak için tercih edilebilir, ancak değişikliklerin uyumlu hale getirmek için yapıldığından emin olur.
Örnek ilke tanımı
Bu ilke tanımı, oluşturulan veya güncelleştirilen kaynağı değerlendirmek type
için alan işlecini kullanır. Bu kaynak bir Microsoft.Network/virtualNetworks olduğunda, ilke yeni veya güncelleştirilmiş kaynağın konumunda bir ağ izleyicisi arar. Eşleşen bir ağ izleyicisi bulunamazsa ARM şablonu eksik kaynağı oluşturmak için dağıtılır.
Not
Bu ilke, aboneliğinizde NetworkWatcherRG adlı bir kaynak grubunuz olmasını gerektirir. Bir bölgede Ağ İzleyicisi etkinleştirdiğinizde Azure, NetworkWatcherRG kaynak grubunu oluşturur.
{
"properties": {
"displayName": "Deploy network watcher when virtual networks are created",
"mode": "Indexed",
"description": "This policy creates a network watcher resource in regions with virtual networks. You need to ensure existence of a resource group named networkWatcherRG, which will be used to deploy network watcher instances.",
"metadata": {
"category": "Network"
},
"parameters": {},
"policyRule": {
"if": {
"field": "type",
"equals": "Microsoft.Network/virtualNetworks"
},
"then": {
"effect": "DeployIfNotExists",
"details": {
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
}
},
"resources": [{
"apiVersion": "2016-09-01",
"type": "Microsoft.Network/networkWatchers",
"name": "[concat('networkWacher_', parameters('location'))]",
"location": "[parameters('location')]"
}]
},
"parameters": {
"location": {
"value": "[field('location')]"
}
}
}
}
}
}
}
}
}
Açıklama
existenceCondition
"type": "Microsoft.Network/networkWatchers",
"resourceGroupName": "networkWatcherRG",
"existenceCondition": {
"field": "location",
"equals": "[field('location')]"
},
properties.policyRule.then.details bloğu, Azure İlkesi properties.policyRule.if bloğunda oluşturulan veya güncelleştirilen kaynakla ilgili olarak nelerin aranacaklarını bildirir. Bu örnekte, networkWatcherRG kaynak grubundaki bir ağ izleyicisi, yeni veya güncelleştirilmiş kaynağın konumuna eşit alanla location
mevcut olmalıdır. işlevinin field()
kullanılması, existenceCondition'ın yeni veya güncelleştirilmiş kaynakta, özellikle de özelliğindeki özelliklere erişmesine location
olanak tanır.
roleDefinitionIds
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
properties.policyRule.then.details bloğundaki roleDefinitionIds dizi özelliği, ilke tanımına dahil edilen Resource Manager şablonunu dağıtmak için yönetilen kimliğin hangi hakların gerektiğini bildirir. Bu özellik, şablon dağıtımı için gereken izinlere sahip rolleri içerecek şekilde ayarlanmalıdır, ancak 'en az ayrıcalık ilkesi' kavramını kullanmalıdır ve yalnızca gerekli işlemlere sahip olmalıdır ve başka bir şey olmamalıdır.
Dağıtım şablonu
İlke tanımının dağıtım bölümünde üç temel bileşeni tanımlayan bir özellik bloğu vardır:
mode - Bu özellik, şablonun dağıtım modunu ayarlar.
template - Bu özellik şablonun kendisini içerir. Bu örnekte, konum şablonu parametresi yeni ağ izleyici kaynağının konumunu ayarlar.
"template": { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string" } }, "resources": [{ "apiVersion": "2016-09-01", "type": "Microsoft.Network/networkWatchers", "name": "[concat('networkWacher_', parameters('location'))]", "location": "[parameters('location')]" }] },
parameters - Bu özellik, şablona sağlanan parametreleri tanımlar. Parametre adları şablonda tanımlanan adlarla eşleşmelidir. Bu örnekte, parametresi eşleşecek konum olarak adlandırılmıştır. Konum değeri, değerlendirilen kaynağın değerini (policyRule.if bloğundaki sanal ağ) almak için işlevini yeniden kullanır
field()
."parameters": { "location": { "value": "[field('location')]" } }
Sonraki adımlar
- Diğer desenleri ve yerleşik tanımları gözden geçirin.
- Azure İlkesi tanımı yapısını gözden geçirin.
- İlkenin etkilerini anlama konusunu gözden geçirin.