You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bicep CosmosDB子资源循环中选择自动缩放或吞吐量属性

解决Bicep遍历CosmosDB集合时动态选择吞吐量配置的问题

可以通过内联条件对象构建的方式,在同一个循环里根据autoScaleEnabled标志动态生成对应的吞吐量配置,避免同时存在两种参数或传入无效值。

完整实现代码

首先保留你的集合配置参数:

param containers array = [
  {
    name: 'Device'
    partitionKey: '/TID'
    autoScaleEnabled: true
    throughput: 500
    maxAutoScale: '1000' // 建议设置有效数值,避免0
    timeToLiveEnabled: false
    timeToLiveTimeInSec: 50
  }
  {
    name: 'User'
    partitionKey: '/UID'
    autoScaleEnabled: false
    throughput: 400
    maxAutoScale: '0'
    timeToLiveEnabled: true
    timeToLiveTimeInSec: 86400
  }
]

// 假设已定义CosmosDB账户和数据库资源
resource cosmosAccount 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' = {
  name: 'your-cosmos-account'
  location: resourceGroup().location
  properties: {
    databaseAccountOfferType: 'Standard'
    locations: [{ locationName: resourceGroup().location }]
  }
}

resource sqlDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2023-04-15' = {
  parent: cosmosAccount
  name: 'your-db-name'
  properties: { resource: {} }
}

然后在容器资源循环中,用三元运算符动态生成options对象:

resource cosmosContainers 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-04-15' = [for item in containers: {
  parent: sqlDatabase
  name: item.name
  properties: {
    resource: {
      id: item.name
      partitionKey: {
        paths: [item.partitionKey]
        kind: 'Hash'
      }
      // 配置TTL
      ...(item.timeToLiveEnabled ? { defaultTtl: item.timeToLiveTimeInSec } : {})
    }
    // 核心:根据autoScaleEnabled动态选择吞吐量配置
    options: item.autoScaleEnabled ? {
      autoscaleSettings: {
        maxThroughput: int(item.maxAutoScale) // 转成int类型,符合API要求
      }
    } : {
      throughput: item.throughput
    }
  }
}]

关键说明

  1. 动态Options构建:通过item.autoScaleEnabled ? {autoscale配置} : {固定吞吐量配置}的三元运算符,确保每次只生成其中一种配置,不会同时出现两个属性。
  2. 类型转换:因为参数里maxAutoScale是字符串类型,需要用int()转成整数,匹配CosmosDB API的参数要求。
  3. TTL拓展:额外用...展开运算符处理TTL配置,保持代码的一致性,同样根据标志动态添加属性。
  4. 避免无效值:确保maxAutoScale在启用自动缩放时传入有效数值(比如1000-1000000之间),固定吞吐量也符合CosmosDB的最小/最大值要求。

内容的提问来源于stack exchange,提问作者Tdawg90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:55:22