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

如何通过代码切换DynamoDB中“将相同设置应用到全局二级索引”选项?

给DynamoDB全局二级索引同步自动扩缩容设置

好的,我来帮你搞定这个问题~你提到的“将相同设置应用到全局二级索引”选项,本质就是把表的自动扩缩容配置(最小/最大容量、扩缩容策略)同步到所有GSI上。用Boto3实现的话,只需要针对每个GSI单独调用Auto Scaling的API,逻辑和表的配置完全一致,只是调整两个关键参数就行。

核心参数调整

和表的配置相比,针对GSI需要修改以下两个参数:

  • ResourceId:格式改为 table/{表名}/index/{GSI名称}
  • ScalableDimension:读容量对应 dynamodb:index:ReadCapacityUnits,写容量对应 dynamodb:index:WriteCapacityUnits

完整代码示例

下面是扩展你现有代码的版本,支持给表和所有GSI同步配置:

import boto3

def conf_auto_scaling_with_gsi(self, table_name):
    print(f"INFO :: Creating auto scaling for Table [{table_name}] and its GSIs")
    
    # --------------------------
    # 保留你原来的表配置逻辑
    # --------------------------
    # 表的读容量自动扩缩容
    self.as_c.register_scalable_target(
        ServiceNamespace='dynamodb',
        ResourceId=f'table/{table_name}',
        ScalableDimension='dynamodb:table:ReadCapacityUnits',
        MinCapacity=5,
        MaxCapacity=4000
    )
    # 表的写容量自动扩缩容
    self.as_c.register_scalable_target(
        ServiceNamespace='dynamodb',
        ResourceId=f'table/{table_name}',
        ScalableDimension='dynamodb:table:WriteCapacityUnits',
        MinCapacity=5,
        MaxCapacity=4000
    )

    # --------------------------
    # 自动获取表的所有GSI名称
    # --------------------------
    dynamodb_client = boto3.client('dynamodb')
    table_desc = dynamodb_client.describe_table(TableName=table_name)
    gsi_list = table_desc['Table'].get('GlobalSecondaryIndexes', [])
    if not gsi_list:
        print(f"INFO :: Table [{table_name}] has no Global Secondary Indexes")
        return
    
    # --------------------------
    # 给每个GSI同步相同的扩缩容设置
    # --------------------------
    for gsi in gsi_list:
        gsi_name = gsi['IndexName']
        print(f"INFO :: Applying auto scaling to GSI [{gsi_name}]")
        
        # GSI的读容量自动扩缩容
        self.as_c.register_scalable_target(
            ServiceNamespace='dynamodb',
            ResourceId=f'table/{table_name}/index/{gsi_name}',
            ScalableDimension='dynamodb:index:ReadCapacityUnits',
            MinCapacity=5,
            MaxCapacity=4000
        )
        # GSI的写容量自动扩缩容
        self.as_c.register_scalable_target(
            ServiceNamespace='dynamodb',
            ResourceId=f'table/{table_name}/index/{gsi_name}',
            ScalableDimension='dynamodb:index:WriteCapacityUnits',
            MinCapacity=5,
            MaxCapacity=4000
        )

补充:同步扩缩容策略(如果有的话)

如果你给表配置了具体的扩缩容策略(比如目标追踪策略),也要给每个GSI创建对应的策略,参数和表的保持一致,同样调整ResourceId和ScalableDimension:

def add_scaling_policy_for_gsi(self, table_name, gsi_name):
    # 给GSI添加读容量扩缩容策略(和表的策略参数一致)
    read_policy_name = f"{table_name}-{gsi_name}-read-scaling"
    self.as_c.put_scaling_policy(
        PolicyName=read_policy_name,
        ServiceNamespace='dynamodb',
        ResourceId=f'table/{table_name}/index/{gsi_name}',
        ScalableDimension='dynamodb:index:ReadCapacityUnits',
        PolicyType='TargetTrackingScaling',
        TargetTrackingScalingPolicyConfiguration={
            'TargetValue': 70.0,  # 和表的目标利用率保持一致
            'PredefinedMetricSpecification': {
                'PredefinedMetricType': 'DynamoDBReadCapacityUtilization'
            },
            'ScaleInCooldown': 300,
            'ScaleOutCooldown': 300
        }
    )
    
    # 给GSI添加写容量扩缩容策略
    write_policy_name = f"{table_name}-{gsi_name}-write-scaling"
    self.as_c.put_scaling_policy(
        PolicyName=write_policy_name,
        ServiceNamespace='dynamodb',
        ResourceId=f'table/{table_name}/index/{gsi_name}',
        ScalableDimension='dynamodb:index:WriteCapacityUnits',
        PolicyType='TargetTrackingScaling',
        TargetTrackingScalingPolicyConfiguration={
            'TargetValue': 70.0,
            'PredefinedMetricSpecification': {
                'PredefinedMetricType': 'DynamoDBWriteCapacityUtilization'
            },
            'ScaleInCooldown': 300,
            'ScaleOutCooldown': 300
        }
    )

关键说明

AWS控制台的“将相同设置应用到全局二级索引”选项,其实就是帮你自动执行了上面的步骤:遍历所有GSI,复制表的Min/Max容量和扩缩容策略配置。用代码实现的话,就是手动完成这个遍历和配置过程。

内容的提问来源于stack exchange,提问作者Ráfagan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:34:00