نمط نهج Azure: العلامات

تعد العلامات جزءا مهما من إدارة موارد Azure وتنظيمها وإدارتها. يتيح نهج Azure تكوين العلامات على مواردك الجديدة والموجودة على نطاق واسع مع تأثير التعديل ومهام المعالجة.

نموذج 1: معلمة العلامات

يستخدم تعريف النهج هذا معلمتين، tagName و tagValue لتعيين ما يبحث عنه تعيين النهج على مجموعات الموارد. يسمح هذا التنسيق باستخدام تعريف النهج لأي عدد من مجموعات اسم العلامة وقيمتها، مع الاحتفاظ بتعريف نهج واحد فقط.

إشعار

في حين أن نمط تعريف النهج هذا مشابه لنمط في النمط: المعلمات - نموذج #1، يستخدم هذا النموذج وضع الكل ويستهدف مجموعات الموارد.

{
    "properties": {
        "displayName": "Add or replace a tag on resource groups",
        "mode": "All",
        "description": "Adds or replaces the specified tag and value when any resource group is created or updated. Existing resource groups can be remediated by triggering a remediation task.",
        "metadata": {
            "category": "Tags"
        },
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Name",
                    "description": "Name of the tag, such as 'environment'"
                }
            },
            "tagValue": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Value",
                    "description": "Value of the tag, such as 'production'"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
                    },
                    {
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "notEquals": "[parameters('tagValue')]"
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "addOrReplace",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[parameters('tagValue')]"
                    }]
                }
            }
        }
    }
}

نموذج 1: الشرح

"properties": {
    "displayName": "Add or replace a tag on resource groups",
    "mode": "All",
    "description": "Adds or replaces the specified tag and value when any resource group is created or updated. Existing resource groups can be remediated by triggering a remediation task.",
    "metadata": {
        "category": "Tags"
    },

في هذا النموذج، يتم تعيين الوضع إلى الكل لأنه يستهدف مجموعة موارد. في معظم الحالات، يجب تعيين الوضع إلى مفهرس عند العمل مع العلامات. لمزيد من المعلومات، راجع الأوضاع.

"if": {
    "allOf": [{
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "notEquals": "[parameters('tagValue')]"
        }
    ]
},

في هذا الجزء من تعريف النهج، concat يجمع بين معلمة tagName ذات المعلمات والتنسيق tags['name'] لإخبار الحقل بتقييم تلك العلامة للمعلمة tagValue. نظرًا لاستخدام notEquals، إذا كانت tags[tagName]لا تساوي tagValue، فسيتم تشغيل تأثير التعديل.

"operations": [{
    "operation": "addOrReplace",
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "value": "[parameters('tagValue')]"
}]

هنا، يتم استخدام نفس التنسيق لاستخدام قيم العلامة ذات المعلمات بواسطة عملية addOrReplace لإنشاء العلامة أو تحديثها إلى القيمة المطلوبة في مجموعة الموارد التي تم تقييمها.

نموذج 2: اكتساب قيمة العلامة من مجموعة الموارد

يستخدم تعريف النهج هذا المعلمة tagName لتحديد قيمة العلامة المراد توريثها من مجموعة الموارد الأصلية.

{
    "properties": {
        "displayName": "Inherit a tag from the resource group",
        "mode": "Indexed",
        "description": "Adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.",
        "metadata": {
            "category": "Tags"
        },
        "parameters": {
            "tagName": {
                "type": "String",
                "metadata": {
                    "displayName": "Tag Name",
                    "description": "Name of the tag, such as 'environment'"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "notEquals": "[resourceGroup().tags[parameters('tagName')]]"
                    },
                    {
                        "value": "[resourceGroup().tags[parameters('tagName')]]",
                        "notEquals": ""
                    }
                ]
            },
            "then": {
                "effect": "modify",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
                    ],
                    "operations": [{
                        "operation": "addOrReplace",
                        "field": "[concat('tags[', parameters('tagName'), ']')]",
                        "value": "[resourceGroup().tags[parameters('tagName')]]"
                    }]
                }
            }
        }
    }
}

نموذج 2: الشرح

"properties": {
    "displayName": "Inherit a tag from the resource group",
    "mode": "Indexed",
    "description": "Adds or replaces the specified tag and value from the parent resource group when any resource is created or updated. Existing resources can be remediated by triggering a remediation task.",
    "metadata": {
        "category": "Tags"
    },

في هذا النموذج، يتم تعيين الوضع إلى مفهرس لأنه لا يستهدف مجموعة موارد أو اشتراكا على الرغم من أنه يحصل على القيمة من مجموعة موارد. لمزيد من المعلومات، راجع الأوضاع.

"if": {
    "allOf": [{
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "notEquals": "[resourceGroup().tags[parameters('tagName')]]"
        },
        {
            "value": "[resourceGroup().tags[parameters('tagName')]]",
            "notEquals": ""
        }
    ]
},

يستخدم concat policyRule.if مثل Sample #1 لتقييم قيمة tagName، ولكنه يستخدم الدالة resourceGroup() لمقارنتها بقيمة نفس العلامة في مجموعة الموارد الأصلية. تتحقق الجملة الثانية هنا من أن العلامة الموجودة في مجموعة الموارد لها قيمة وليست خالية.

"operations": [{
    "operation": "addOrReplace",
    "field": "[concat('tags[', parameters('tagName'), ']')]",
    "value": "[resourceGroup().tags[parameters('tagName')]]"
}]

هنا، تستخدم القيمة التي يتم تعيينها إلى علامة tagName على المورد أيضا الدالة resourceGroup() للحصول على القيمة من مجموعة الموارد الأصلية. وبهذه الطريقة، يمكنك اكتساب العلامات من مجموعات الموارد الأصل. إذا قمت بالفعل بإنشاء المورد ولكنك لم تقم بإضافة العلامة، يمكن لنفس تعريف النهج ومهمة المعالجة تحديث الموارد الموجودة.

الخطوات التالية