Azure ARM策略分配SKU动态化配置技术问询
动态配置Azure策略分配请求中的SKU信息
嘿,我最近在折腾Azure资源组里的策略分配创建,目前已经把JSON请求里除了SKU之外的所有内容都弄成动态配置的了,现在就差把SKU信息也改成动态的。先给大伙看看我现在用的XML请求片段(之后要转成JSON发送的):
<SubscriptionID>XXXXXXXXX</SubscriptionID> <ClientSecretKey>XXXXXXXXX</ClientSecretKey> <TenantId>XXXXXXXXX</TenantId>
实现SKU动态化的思路和步骤
首先得明确,Azure策略分配的JSON请求里,SKU部分的标准结构是这样的:
"sku": { "name": "A1", "tier": "Standard" }
要实现动态化,核心就是把name和tier这两个字段的固定值,改成从外部动态获取的变量。下面分两种常见场景来说:
场景1:从XML扩展节点动态取值
如果要延续你现有的XML配置方式,首先可以给XML添加SKU相关的节点:
<SubscriptionID>XXXXXXXXX</SubscriptionID> <ClientSecretKey>XXXXXXXXX</ClientSecretKey> <TenantId>XXXXXXXXX</TenantId> <SkuName>A1</SkuName> <SkuTier>Standard</SkuTier>
然后在你转换XML到JSON的逻辑里,读取这两个节点的值,填充到JSON的SKU字段中。举个C#的例子(你也可以换成自己用的语言逻辑):
// 读取XML中的SKU参数 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("你的配置文件路径"); string skuName = xmlDoc.SelectSingleNode("//SkuName").InnerText; string skuTier = xmlDoc.SelectSingleNode("//SkuTier").InnerText; // 构建策略分配的JSON对象(其他属性已经是动态配置好的) var policyAssignment = new { properties = new { // 这里放你已经实现的其他动态属性,比如policyDefinitionId、scope等 sku = new { name = skuName, tier = skuTier } }, location = "eastus" // 示例固定值,你也可以改成动态的 }; // 序列化为JSON字符串,用于发送请求 string jsonPayload = Newtonsoft.Json.JsonConvert.SerializeObject(policyAssignment);
场景2:用ARM模板实现动态参数化
如果是用ARM模板来部署策略分配,直接通过参数来实现SKU的动态化会更方便:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "policyAssignmentName": { "type": "string", "metadata": { "description": "策略分配的名称" } }, "skuName": { "type": "string", "defaultValue": "A1", "metadata": { "description": "SKU名称,比如A1" } }, "skuTier": { "type": "string", "defaultValue": "Standard", "metadata": { "description": "SKU层级,比如Standard" } }, // 其他需要动态配置的参数,比如subscriptionId、policyDefinitionId等 }, "resources": [ { "type": "Microsoft.Authorization/policyAssignments", "name": "[parameters('policyAssignmentName')]", "apiVersion": "2022-06-01", "properties": { "policyDefinitionId": "[parameters('policyDefinitionId')]", "scope": "[subscription().id]", "sku": { "name": "[parameters('skuName')]", "tier": "[parameters('skuTier')]" } } } ] }
部署的时候,你可以通过命令行传入自定义的SKU参数,比如用Azure CLI:
az deployment group create --resource-group your-resource-group --template-file policy-assignment.json --parameters skuName="A1" skuTier="Standard"
不管用哪种方式,核心都是把SKU的两个关键字段从硬编码改成动态获取的变量,这样就能和你已经实现的其他动态配置逻辑统一起来了。
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

