Aracılığıyla paylaş


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ırfield().

    "parameters": {
        "location": {
            "value": "[field('location')]"
        }
    }
    

Sonraki adımlar